1import sys
2import os
3import tempfile
4
5
6from tools import Tools
7
8class Demuxer:
9  def __init__(self,tools,filename,type):
10    if not self.CreateDirectory():
11      raise Exception, 'Failed to create directory'
12    self.Demux(tools,filename,type)
13
14  def GetDirectory(self):
15    return self.directory
16
17  def CreateDirectory(self):
18    try:
19      self.directory=tempfile.mkdtemp(dir='.',prefix='katedj-tmp-extract-')
20    except OSError,e:
21      return False
22    return True
23
24  def GetCodecs(self,tools):
25    cmdline=tools.codecs_command
26    if cmdline!=None:
27      try:
28        popen=subprocess.Popen(cmdline,stdin=None,stderr=subprocess.PIPE,stdout=subprocess.PIPE,universal_newlines=True,shell=True)
29        if popen.stdout:
30          list=[]
31          line=popen.stdout.readline()
32          while line:
33            line=line.split('\n')[0]
34            if line and 'Kate' not in line:
35              list.append(line)
36            line=popen.stdout.readline()
37          popen.stdout.close()
38          return list
39      except:
40        pass
41    return ['theora','vorbis','dirac','speex','flac','cmml']
42
43  def DemuxMisc(self,tools,filename):
44    params=[]
45    params+=['-o',os.path.join(self.directory,'misc.ogg')]
46    for codec in self.GetCodecs(tools):
47      params+=['-c',codec]
48    params+=[filename]
49    tools.run_demux(params)
50
51  def DemuxKate(self,tools,filename,type):
52    params=[]
53    params+=['-o',os.path.join(self.directory,'kate.%l.%c.%i.%s.kate')]
54    params+=['-t',type]
55    params+=[filename]
56    tools.run_katedec(params)
57
58  def Demux(self,tools,filename,type):
59    self.DemuxMisc(tools,filename)
60    self.DemuxKate(tools,filename,type)
61
62if __name__=='__main__':
63  tools=Tools()
64  file='../../built-streams/demo.ogg'
65  if len(sys.argv)>1:
66    file=sys.argv[1];
67  demuxer=Demuxer(tools,file)
68