summaryrefslogtreecommitdiffstats
path: root/tools/gst-launch-ext
blob: 6c5cd893a2489f64afca8a5f153a87424be07690 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/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;



sub extension
{
  my $path = shift;
  my $ext = (fileparse ($path, '\..*'))[2];
  $ext =~ s/^\.//;
  return $ext;
}

sub read_config
{
  my $config_file = "~/.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";
    $cfg{AUDIOSINK} = "osssink";
    $cfg{VIDEOSINK} = "xvideosink";
    $cfg{CVS_PATH} = "~/gst/cvs";
  }

  # check for gst-launch in cvs dir
  $GST_LAUNCH=$cfg{CVS_PATH}."/gstreamer/tools/gst-launch";
  if (! -x $GST_LAUNCH)
  {
    # let's hope it's installed ...
    $GST_LAUNCH="gst-launch";
  }
}

### main

read_config ();

my %pipes = ( 
  "mp3", "mad ! $cfg{AUDIOSINK}",
  "ogg", "vorbisdec ! $cfg{AUDIOSINK}",
  "mpg", "mpegdemux video_00! { queue ! mpeg2dec ! $cfg{VIDEOSINK} } audio_00! { queue ! mad ! $cfg{AUDIOSINK} }",
  "avi", "avidemux video_00! { queue ! windec ! $cfg{VIDEOSINK} }",
  "vob", "mpegdemux video_00! { queue ! mpeg2dec ! $cfg{VIDEOSINK} }",

);
my $file = shift @ARGV or die "Please give a file name !";

my $ext = extension ($file);

if ($pipe = $pipes{$ext})
{
  $command = "$GST_LAUNCH filesrc location=\"$file\" ! $pipe";
  print "Running $command\n";
  system ($command);
}
else
{
  print "No suitable pipe found for extension $ext.\n";
}