mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-04 07:26:33 +00:00
0f022be747
Original commit message from CVS: fixed the vob pipeline. It now plays the movie perfectly, but the sound is missing and it is still very dark
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.audio_%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);
|
|
}
|
|
}
|