1 --- Dirac-0.0.1/dirac_encoder.pyx 2005-09-09 09:37:51.000000000 -0700
2 +++ Dirac-0.0.1-new/dirac_encoder.pyx 2006-01-27 16:23:10.000000000 -0800
4 from dirac_common cimport dirac_framebuf_t
7 +cdef extern from "limits.h":
11 cdef extern from "dirac/libdirac_encoder/dirac_encoder.h":
12 ctypedef enum dirac_encoder_state_t:
13 ENC_STATE_INVALID = -1
15 cdef int dirac_encoder_end_sequence (dirac_encoder_t *encoder)
16 cdef void dirac_encoder_close (dirac_encoder_t *encoder)
20 +cdef extern from "Python.h":
21 + object PyString_FromStringAndSize(char *, int)
22 + cdef char* PyString_AsString(object)
26 +cdef class DiracEncoder:
28 + cdef dirac_encoder_t *encoder
29 + cdef dirac_encoder_context_t context
30 + cdef object inputframe
31 + cdef object outbuffer
32 + cdef object outbuffersize
34 + def __new__(self, preset=None, bufsize = 1024*1024, verbose=False, encParams = {}, seqParams = {}, instrumentation=False, localDecoded=False):
40 + self.__presetContext(preset)
41 + self.__loadEncParams(**encParams)
42 + self.__loadSeqParams(**seqParams)
45 + self.context.instr_flag = 1
47 + self.context.instr_flag = 0
50 + self.context.decode_flag = 1
52 + self.context.decode_flag = 0
54 + self.encoder = dirac_encoder_init( &self.context, cverbose )
55 + if self.encoder == NULL:
58 + self.outbuffersize = bufsize
59 + self.__allocOutBuffer()
60 + self.__setOutBuffer()
63 + def __dealloc__(self):
64 + dirac_encoder_close(self.encoder)
67 + def getCompressedData(self):
68 + cdef dirac_encoder_state_t state
70 + self.__setOutBuffer()
71 + state = dirac_encoder_output(self.encoder)
73 + if state == ENC_STATE_INVALID:
75 + raise "ENCODERERROR"
77 + elif state == ENC_STATE_BUFFER:
80 + elif state == ENC_STATE_AVAIL:
81 + data = self.outbuffer[:self.encoder.enc_buf.size]
82 + self.__allocOutBuffer()
86 + raise "INTERNALFAULT"
89 + def sendFrameForEncode(self, yuvdata):
90 + cdef unsigned char *bytes
94 + self.inputframe = yuvdata
96 + bytes = <unsigned char*>PyString_AsString(yuvdata)
97 + size = int(len(self.inputframe))
99 + result = dirac_encoder_load(self.encoder, bytes, size)
103 + raise "ENCODERERROR"
106 + def getEndSequence(self):
108 + self.__setOutBuffer()
109 + result = dirac_encoder_end_sequence(self.encoder)
111 + raise "ENCODERERROR"
113 + data = self.outbuffer[:self.encoder.enc_buf.size]
117 + def getFrameStats(self):
118 + ##############################################
121 + def getSeqStats(self):
122 + ##############################################
125 + def getInstrumentation(self):
126 + ##############################################
129 + def getLocallyDecodedFrame(self):
130 + ##############################################
133 + def __allocOutBuffer(self):
134 + self.outbuffer = PyString_FromStringAndSize(NULL, self.outbuffersize)
136 + def __setOutBuffer(self):
137 + self.encoder.enc_buf.buffer = <unsigned char*>PyString_AsString(self.outbuffer)
138 + self.encoder.enc_buf.size = self.outbuffersize
141 + def __presetContext(self, preset=None):
142 + cdef dirac_encoder_presets_t cpreset
146 + elif preset=="SD576":
148 + elif preset=="HD720":
150 + elif preset=="HD1080":
153 + raise ValueError("Not valid preset")
155 + dirac_encoder_context_init( &self.context, cpreset)
158 + def __loadSeqParams(self, **params):
159 + if "width" in params:
160 + self.context.seq_params.width = int(params['width'])
162 + if "height" in params:
163 + self.context.seq_params.height = int(params['height'])
165 + if "chroma" in params:
166 + self.context.seq_params.chroma = __chromatypemap(params['chroma'])
168 + if "chroma_width" in params:
169 + self.context.seq_params.chroma_width = int(params['chroma_width'])
171 + if "chroma_height" in params:
172 + self.context.seq_params.chroma_height = int(params['chroma_height'])
174 + if "frame_rate" in params:
175 + self.context_seq_params.frame_rate.numerator = params['frame_rate'][0]
176 + self.context_seq_params.frame_rate.denominator = params['frame_rate'][1]
178 + if "interlace" in params:
179 + if params['interlace']:
180 + self.context.seq_params.interlace = 1
182 + self.context.seq_params.interlace = 0
184 + if "topfieldfirst" in params:
185 + if params['topfieldfirst']:
186 + self.context.seq_params.topfieldfirst = 1
188 + self.context.seq_params.topfieldfirst = 0
191 + def __loadEncParams(self, **params):
193 + self.context.enc_params.qf = float(params['qf'])
195 + if "L1_sep" in params:
196 + self.context.enc_params.L1_sep = int(params['L1_sep'])
198 + if "num_L1" in params:
199 + self.context.enc_params.num_L1 = int(params['num_L1'])
201 + if "cpd" in params:
202 + self.context.enc_params.cpd = float(params['cpd'])
204 + if "xblen" in params:
205 + self.context.enc_params.xblen = int(params['xblen'])
207 + if "yblen" in params:
208 + self.context.enc_params.yblen = int(params['yblen'])
210 + if "xbsep" in params:
211 + self.context.enc_params.xbsep = int(params['xbsep'])
213 + if "ybsep" in params:
214 + self.context.enc_params.ybsep = int(params['ybsep'])
220 +cdef dirac_chroma_t __chromatypemap(object c):
234 + raise ValueError("Unknown chroma type")