import os
import shlex
import signal
import subprocess

import lib.utils as utils
import lib.server as server

__all__ = ("TranscoderGMencoder",)

class TranscoderGMencoder(server.Transcoder):
    gmencoder_path = utils.which("gmencoder")
    name = "gmencoder"
    priority = -1
    proc = None

    def __init__(self, params):
        server.Transcoder.__init__(self, params)
        self.opts = []
    # __init__()

    def _insert_param (self, name, value):
        if (value != ""):
            self.opts.append(name)
            self.opts.append(value)

    def _parser_params (self):
        self._insert_param("-i", \
            "%s://%s" % (self.params_first("uri_prefix", "file"), self.params_first("uri_path", "")))
        self._insert_param("--video-encode", self.params_first("ve", ""))
        self._insert_param("--video-opts", "bitrate=200,pass=2,quantizer=5")
        self._insert_param("--video-fps", self.params_first("fps", ""))
        self._insert_param("--video-width", self.params_first("width", ""))
        self._insert_param("--video-height", self.params_first("height", ""))
        self._insert_param("--audio-rate", "32000")
        self._insert_param("--audio-encode", self.params_first("ae", ""))
    # _parse_params

    def start(self, outfd):
        self.opts.append (self.gmencoder_path)
        self._parser_params ()
        self._insert_param ("-o", "fd://%d" % outfd.fileno())

        cmd = " ".join(self.opts)
        self.log.info ("GMencoder: %s", cmd)

        try:
            self.proc = subprocess.Popen(self.opts, stdin=subprocess.PIPE)
        except Exception, e:
            self.log.error("Error executing GMencoder: %s" % e)
            return False

        try:
             self.proc.wait()
        except Exception, e:
            self.log.error("Problems handling data: %s" % e)
            return False

        return True
    # start()


    def stop(self):
        if self.proc:
            self.log.info ("STOPed GMencoder plugin")
            try:
                self.proc.stdin.write ("QUIT\n")
            except Exception, e:
                pass

            try:
                self.proc.wait()
            except Exception, e:
                pass

            self.proc = None
    # stop()

# TranscoderGMencoder
