version gst-launch command in gst-launch-ext
authorChristian Schaller <uraeus@gnome.org>
Thu, 18 Sep 2003 18:28:23 +0000 (18:28 +0000)
committerChristian Schaller <uraeus@gnome.org>
Thu, 18 Sep 2003 18:28:23 +0000 (18:28 +0000)
Original commit message from CVS:
version gst-launch command in gst-launch-ext

configure.ac
tools/gst-launch-ext.in [new file with mode: 0755]

index 5f0fe3f..4f5062f 100644 (file)
@@ -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 (executable)
index 0000000..8e02fb3
--- /dev/null
@@ -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 (<CONFIG>)
+    {
+      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 = <PLAYLIST>) {
+           chomp $file2;
+           my $ext2 = extension ($file2);
+           playfile($file2, $ext2);
+       }
+       close PLAYLIST;
+    } else {
+       playfile($file, $ext);
+    }
+}