From: Christian Schaller Date: Thu, 18 Sep 2003 18:28:23 +0000 (+0000) Subject: version gst-launch command in gst-launch-ext X-Git-Tag: 1.19.3~509^2~15768 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7de769ac949314f7cbd736d0d0d5bfc5dabf582f;p=platform%2Fupstream%2Fgstreamer.git version gst-launch command in gst-launch-ext Original commit message from CVS: version gst-launch command in gst-launch-ext --- diff --git a/configure.ac b/configure.ac index 5f0fe3f..4f5062f 100644 --- a/configure.ac +++ b/configure.ac @@ -1304,6 +1304,7 @@ testsuite/spider/Makefile testsuite/alsa/Makefile testsuite/Makefile tools/Makefile +tools/gst-launch-ext gconf/Makefile pkgconfig/Makefile ) diff --git a/tools/gst-launch-ext.in b/tools/gst-launch-ext.in new file mode 100755 index 0000000..8e02fb3 --- /dev/null +++ b/tools/gst-launch-ext.in @@ -0,0 +1,161 @@ +#!/usr/bin/perl -w +use strict; + +# launch a gst-launch pipeline for the supplied media file +# use the extension to determine the gst-launch pipeline +# make use of default output sinks + +my (%pipes, %cfg); + +sub extension +{ + my $path = shift; + my $ext; + + # get only the bit after the last period. We don't deal with + # .tar.gz extensions do we ? + if ($path =~ /\./) + { + $ext = $path; + $ext =~ s/^.*\.//; + } + else { $ext = ""; } + + return $ext; +} + +sub read_config +{ + my $command = shift; + + my $config_file = `echo -n ~`."/.gst"; + if (-e $config_file) + { + open CONFIG, $config_file; + while () + { + chomp; + s/#.*//; + s/\s+$//; + next unless length; + my ($var, $value) = split (/\s*=\s*/, $_, 2); + $cfg{$var} = $value; + } + if (!($cfg{AUDIOSINK})) + { + print "Please add an AUDIOSINK to $config_file !\n"; + } + if (!($cfg{VIDEOSINK})) + { + print "Please add a VIDEOSINK to $config_file !\n"; + } + } + else + { + print "No configuration file $config_file found. You might want to create one.\n"; + print "This is not an error, just a friendly reminder... Check the man page.\n\n"; + } + if (!defined $cfg{AUDIOSINK}) { $cfg{AUDIOSINK} = "osssink"; } + if (!defined $cfg{VIDEOSINK}) { $cfg{VIDEOSINK} = "colorspace ! xvideosink"; } + if (!defined $cfg{CVS_PATH}) { $cfg{CVS_PATH} = `echo -n ~`."/gst/cvs"; } + + if ($command =~ /(.+)\/gst-launch-ext$/) + { $cfg{COMMAND_PATH} = "$1"; } + else + { $cfg{COMMAND_PATH} = ""; } +} + +sub playfile($$) +{ + my ($file, $ext) = @_; + my $command; + my $pipe; + my $path = "\$PATH:".$cfg{CVS_PATH}."/gstreamer/tools"; + + if ($cfg{COMMAND_PATH} ne "") { + $path = $cfg{COMMAND_PATH}.":$path"; + } + + $ext = lc $ext; + + if ($cfg{VISUALIZER} && ($pipe = $pipes{"vis." . $ext})) + { + $command = "gst-launch-@GST_MAJORMINOR@ filesrc location=\"$file\" ! $pipe"; + print "Running command-line\n$command\n\n"; + system ("PATH=$path $command"); + } + elsif ($pipe = $pipes{$ext}) + { + $command = "gst-launch-@GST_MAJORMINOR@ filesrc location=\"$file\" ! $pipe"; + print "Running command-line\n$command\n\n"; + system ("PATH=$path $command"); + } + else + { + print "No suitable pipe found for extension $ext.\n"; + } +} + +### main + +read_config ($0); + +%pipes = ( + "ac3", "a52dec ! $cfg{AUDIOSINK}", + "au", "auparse ! $cfg{AUDIOSINK}", + "avi", "avidemux name=demux ! { queue ! jpegdec ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", + "asf", "asfdemux name=demux ! { queue ! ffmpegdecall ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", + "flac", "flacdec ! $cfg{AUDIOSINK}", + "fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}", + "m1v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }", + "m2v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }", + "mod", "modplug ! $cfg{AUDIOSINK}", + "mp2", "mad ! $cfg{AUDIOSINK}", + "mp3", "mad ! $cfg{AUDIOSINK}", + "mpeg", "mpegdemux name=demux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", + "mpg", "mpegdemux name=demux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", + "ogg", "vorbisfile ! $cfg{AUDIOSINK}", + "sid", "siddec ! $cfg{AUDIOSINK}", + "swf", "swfdec name=swfdec ! { queue ! colorspace ! $cfg{VIDEOSINK} } { swfdec. ! queue ! $cfg{AUDIOSINK} }", + "vob", "mpegdemux name=demux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } { demux. ! queue ! a52dec ! $cfg{AUDIOSINK} }", + "wav", "wavparse ! $cfg{AUDIOSINK}", + "wm", "asfdemux name=demux ! { queue ! ffmpegdecall ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", + "wma", "asfdemux name=demux ! { queue ! ffmpegdecall ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", + "wmv", "asfdemux name=demux ! { queue ! ffmpegdecall ! $cfg{VIDEOSINK} } { demux. ! queue ! mad ! $cfg{AUDIOSINK} }", +); + +if ($cfg{VISUALIZER}) { + %pipes = ( + %pipes, + "vis.mp3", "mad ! tee name=tee silent=true ! queue leaky=1 ! { $cfg{VISUALIZER} ! colorspace ! $cfg{VIDEOSINK} } tee. ! $cfg{AUDIOSINK}", + "vis.ogg", "vorbisdec ! tee name=tee silent=true ! queue leaky=1 ! { $cfg{VISUALIZER} ! colorspace ! $cfg{VIDEOSINK} } tee. ! $cfg{AUDIOSINK}", + "vis.wav", "wavparse ! tee name=tee silent=true ! queue leaky=1 ! { $cfg{VISUALIZER} ! colorspace ! $cfg{VIDEOSINK} } tee. ! $cfg{AUDIOSINK}", + ); +} + +if ($#ARGV == -1) { + print STDERR "Usage: gst-launch-ext filename[s]\n"; + exit 1; +} + +my $file; +while ($file = shift @ARGV) { + my $ext = extension ($file); + if (!$ext) { + print "file $file doesn't have an extension !\n"; + exit; + } + if ($ext eq 'm3u') + { + open (PLAYLIST, '<', $file); + my $file2; + while ($file2 = ) { + chomp $file2; + my $ext2 = extension ($file2); + playfile($file2, $ext2); + } + close PLAYLIST; + } else { + playfile($file, $ext); + } +}