summaryrefslogtreecommitdiffstats
path: root/tools/gst-launch-ext-m.m
diff options
context:
space:
mode:
authorThomas Vander Stichele <thomas@apestaart.org>2004-03-10 12:35:44 +0000
committerThomas Vander Stichele <thomas@apestaart.org>2004-03-10 12:35:44 +0000
commitc98b59c7b855ce61c7eb085714fbbdc6dcdfe6f8 (patch)
treed80deabf9cb0d5faf8a0e5ee58312d17c0e9a072 /tools/gst-launch-ext-m.m
parentfdf6d4edf512dc94a1d745e1e7981257bf293daa (diff)
updating tools generation
Original commit message from CVS: updating tools generation
Diffstat (limited to 'tools/gst-launch-ext-m.m')
-rw-r--r--tools/gst-launch-ext-m.m165
1 files changed, 165 insertions, 0 deletions
diff --git a/tools/gst-launch-ext-m.m b/tools/gst-launch-ext-m.m
new file mode 100644
index 00000000..b5c52442
--- /dev/null
+++ b/tools/gst-launch-ext-m.m
@@ -0,0 +1,165 @@
+#!/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} = "ffcolorspace ! xvimagesink"; }
+ if (!defined $cfg{CVS_PATH}) { $cfg{CVS_PATH} = `echo -n ~`."/gst/cvs"; }
+
+ if ($command =~ /(.+)\/gst-launch-ext-@GST_MAJORMINOR@$/)
+ { $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 ! spider ! $cfg{VIDEOSINK} } { demux. ! queue ! spider ! $cfg{AUDIOSINK} }",
+ "asf", "asfdemux name=demux ! { queue ! spider ! $cfg{VIDEOSINK} } { demux. ! queue ! spider ! $cfg{AUDIOSINK} }",
+ "flac", "flacdec ! $cfg{AUDIOSINK}",
+ "fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}",
+ "m1v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",
+ "m2v", "mpegdemux ! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",
+ "m4a", "qtdemux .audio_00 ! { queue ! faad ! $cfg{AUDIOSINK} }",
+ "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", "oggdemux ! vorbisdec ! audioconvert ! $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 ! spider ! $cfg{VIDEOSINK} } { demux. ! queue ! spider ! $cfg{AUDIOSINK} }",
+### a wma file can use wmav1 or wmav2 codec so we must use spider to decode it
+ "wma", "asfdemux name=demux ! spider ! $cfg{AUDIOSINK}",
+ "wmv", "asfdemux name=demux ! { queue ! spider ! $cfg{VIDEOSINK} } { demux. ! queue ! spider ! $cfg{AUDIOSINK} }",
+ "mkv", "matroskademux name=demux ! { queue ! spider ! $cfg{VIDEOSINK} } { demux. ! queue ! spider ! $cfg{AUDIOSINK} }",
+ "mka", "matroskademux ! spider ! $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-@GST_MAJORMINOR@ 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);
+ }
+}