mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 18:20:44 +00:00
107f309045
Original commit message from CVS: fixed pipeline for vob files so we get sound (bad sound but still), Wim claims we only need 50 more rewrites to get it working well
122 lines
3.2 KiB
Perl
Executable file
122 lines
3.2 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} = "sdlvideosink"; }
|
|
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 ();
|
|
|
|
%pipes = (
|
|
"mp3", "mad ! $cfg{AUDIOSINK}",
|
|
"ogg", "vorbisdec ! $cfg{AUDIOSINK}",
|
|
"mpg", "mpegdemux video_00! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } mpegdemux0.audio_00! { queue ! mad ! $cfg{AUDIOSINK} }",
|
|
"avi", "avidemux video_00! { queue ! windec ! $cfg{VIDEOSINK} } avidemux0.audio_00! { queue ! mad ! $cfg{AUDIOSINK} }",
|
|
"vob", "mpegdemux video_00! { queue max_level=500 ! mpeg2dec ! $cfg{VIDEOSINK} } mpegdemux0.private_stream_1.0! { queue max_level=500 ! a52dec ! $cfg{AUDIOSINK} }",
|
|
"wav", "wavparse ! $cfg{AUDIOSINK}",
|
|
"fli", "flxdec ! colorspace ! $cfg{VIDEOSINK}"
|
|
);
|
|
|
|
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);
|
|
}
|
|
}
|