mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 20:51:13 +00:00
7bf083b366
Original commit message from CVS: more fix for vob pipeline. This works in theory, but there are still timestamp issues with a52dec that needs addressing.
124 lines
3.3 KiB
Perl
Executable file
124 lines
3.3 KiB
Perl
Executable file
#!/usr/bin/perl -w
|
|
|
|
# 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
|
|
|
|
### packages
|
|
|
|
use File::Basename;
|
|
|
|
my (%pipes, %cfg);
|
|
|
|
sub extension
|
|
{
|
|
my $path = shift;
|
|
my $ext = (fileparse ($path, '\..*?'))[2];
|
|
$ext =~ s/^\.//;
|
|
return $ext;
|
|
}
|
|
|
|
sub read_config
|
|
{
|
|
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";
|
|
}
|
|
if (!defined $cfg{AUDIOSINK}) { $cfg{AUDIOSINK} = "osssink"; }
|
|
if (!defined $cfg{VIDEOSINK}) { $cfg{VIDEOSINK} = "xvideosink"; }
|
|
if (!defined $cfg{CVS_PATH}) { $cfg{CVS_PATH} = `echo -n ~`."/gst/cvs"; }
|
|
}
|
|
|
|
sub playfile($$)
|
|
{
|
|
my ($file, $ext) = @_;
|
|
|
|
my $pipe;
|
|
if ($cfg{VISUALIZER} && ($pipe = $pipes{"vis." . $ext}))
|
|
{
|
|
$command = "gst-launch filesrc location=\"$file\" ! $pipe";
|
|
print "Running $command\n";
|
|
system ("PATH=\$PATH:".$cfg{CVS_PATH}."/gstreamer/tools $command");
|
|
}
|
|
elsif ($pipe = $pipes{$ext})
|
|
{
|
|
$command = "gst-launch filesrc location=\"$file\" ! $pipe";
|
|
print "Running $command\n";
|
|
system ("PATH=\$PATH:".$cfg{CVS_PATH}."/gstreamer/tools $command");
|
|
}
|
|
else
|
|
{
|
|
print "No suitable pipe found for extension $ext.\n";
|
|
}
|
|
}
|
|
|
|
### main
|
|
|
|
read_config ();
|
|
|
|
### "ac3", "ac3parse ! $cfg{AUDIOSINK}",
|
|
%pipes = (
|
|
"au", "auparse ! $cfg{AUDIOSINK}",
|
|
"avi", "avidemux video_%02d! { queue ! windec ! $cfg{VIDEOSINK} } avidemux0.audio_%02d! { queue ! mad ! $cfg{AUDIOSINK} }",
|
|
"fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}",
|
|
"mod", "modplug ! $cfg{AUDIOSINK}",
|
|
"mp3", "mad ! $cfg{AUDIOSINK}",
|
|
"mpg", "mpegdemux video_%02d! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } mpegdemux0.audio_%02d! { queue ! mad ! $cfg{AUDIOSINK} }",
|
|
"ogg", "vorbisdec ! $cfg{AUDIOSINK}",
|
|
"sid", "siddec ! $cfg{AUDIOSINK}",
|
|
"vob", "mpegdemux name=foo video_%02d! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } foo.private_stream_1__%02d! { queue ! a52dec ! $cfg{AUDIOSINK} }",
|
|
);
|
|
|
|
if ($cfg{VISUALIZER}) {
|
|
%pipes = (
|
|
%pipes,
|
|
"vis.mp3", "mad ! tee silent=true 'tee1.src0!' queue leaky=1 ! { $cfg{VISUALIZER} ! colorspace ! $cfg{VIDEOSINK} } 'tee1.src1!' $cfg{AUDIOSINK}",
|
|
"vis.ogg", "vorbisdec ! tee silent=true 'tee1.src0!' queue leaky=1 ! { $cfg{VISUALIZER} ! colorspace ! $cfg{VIDEOSINK} } 'tee1.src1!' $cfg{AUDIOSINK}",
|
|
"vis.wav", "wavparse ! tee silent=true 'tee1.src0!' queue leaky=1 ! { $cfg{VISUALIZER} ! colorspace ! $cfg{VIDEOSINK} } 'tee1.src1!' $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 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);
|
|
}
|
|
}
|