CIS Basic classes are being implemented
[living-lab-site.git] / cis / api / base.py
diff --git a/cis/api/base.py b/cis/api/base.py
new file mode 100644 (file)
index 0000000..3e5f508
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+
+"""
+Base classes for the external programs API.
+"""
+
+import cis_exceptions
+
+class BaseTranscoder:
+    """
+    Abstractization of the API class for the transcoder program. 
+    """
+
+    prog_bin = None
+    input_file = None
+
+    # Recommended formats.
+    containers = {
+        "avi": None,
+        "flv": None,
+        "mp4": None,
+        "ogg": None,
+        "webm": None,
+        "mpegts": None
+    }
+    a_codecs = {
+        "mp3": None,
+        "vorbis": None
+    }
+    v_codecs = {
+        "h264": None,
+        "theora": None,
+        "vp8": None
+    }
+
+    def __init__(self, input_file, prog_bin=None):
+        self.input_file = input_file
+        self.prog_bin = prog_bin
+
+    def transcode(self, container, a_codec, v_codec,
+            a_bitrate=None, a_samplingrate=None, a_channels=None,
+            v_bitrate=None, v_fraterate=None, v_resolution=None, v_dar=None):
+        """
+        Transcodes the input file to an audio-video file.
+
+        container: possible values are listed in containers member as keys
+        a_codec: possible values are listed in a_codecs member as keys
+        v_codec: possible values are listed in v_codecs member as keys
+        """
+
+        pass
+
+    def transcode_audio(self, container, a_codec,
+            a_bitrate=None, a_samplingrate=None, a_channels=None):
+        pass
+
+    def transcode_video(self, container, v_codec,
+            v_bitrate=None, v_fraterate=None, v_resolution=None, v_dar=None):
+        pass
+
+    def tr_container(self, name):
+        """ Translates container API name into external program identifier."""
+
+        if not self.containers.has_key(name) or self.containers[name] == None:
+            raise cis_exceptions.NotImplementedException("Container " + name)
+
+        return self.containers[name]