updated on Thu Jan 19 16:10:29 UTC 2012
[aur-mirror.git] / python-dirac / encoder.patch
blob99185d074ae5a6de093f182e500a57cbc48dd20c
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
3 @@ -35,6 +35,10 @@
4 from dirac_common cimport dirac_framebuf_t
7 +cdef extern from "limits.h":
8 + ctypedef enum __:
9 + INT_MAX
11 cdef extern from "dirac/libdirac_encoder/dirac_encoder.h":
12 ctypedef enum dirac_encoder_state_t:
13 ENC_STATE_INVALID = -1
14 @@ -144,3 +148,223 @@
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):
35 + cdef int cverbose
36 + cverbose = 0
37 + if verbose:
38 + cverbose = 1
40 + self.__presetContext(preset)
41 + self.__loadEncParams(**encParams)
42 + self.__loadSeqParams(**seqParams)
44 + if instrumentation:
45 + self.context.instr_flag = 1
46 + else:
47 + self.context.instr_flag = 0
49 + if localDecoded:
50 + self.context.decode_flag = 1
51 + else:
52 + self.context.decode_flag = 0
54 + self.encoder = dirac_encoder_init( &self.context, cverbose )
55 + if self.encoder == NULL:
56 + raise "FAILURE"
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:
74 + print "z"
75 + raise "ENCODERERROR"
77 + elif state == ENC_STATE_BUFFER:
78 + raise "NEEDDATA"
80 + elif state == ENC_STATE_AVAIL:
81 + data = self.outbuffer[:self.encoder.enc_buf.size]
82 + self.__allocOutBuffer()
83 + return data
85 + else:
86 + raise "INTERNALFAULT"
89 + def sendFrameForEncode(self, yuvdata):
90 + cdef unsigned char *bytes
91 + cdef int size
92 + cdef int result
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)
101 + if result == -1:
102 + print "y"
103 + raise "ENCODERERROR"
106 + def getEndSequence(self):
107 + cdef int result
108 + self.__setOutBuffer()
109 + result = dirac_encoder_end_sequence(self.encoder)
110 + if result == -1:
111 + raise "ENCODERERROR"
112 + else:
113 + data = self.outbuffer[:self.encoder.enc_buf.size]
114 + return data
117 + def getFrameStats(self):
118 + ##############################################
119 + pass
121 + def getSeqStats(self):
122 + ##############################################
123 + pass
125 + def getInstrumentation(self):
126 + ##############################################
127 + pass
129 + def getLocallyDecodedFrame(self):
130 + ##############################################
131 + pass
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
144 + if preset=="CIF":
145 + cpreset=CIF
146 + elif preset=="SD576":
147 + cpreset=SD576
148 + elif preset=="HD720":
149 + cpreset=HD720
150 + elif preset=="HD1080":
151 + cpreset=HD1080
152 + else:
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
181 + else:
182 + self.context.seq_params.interlace = 0
184 + if "topfieldfirst" in params:
185 + if params['topfieldfirst']:
186 + self.context.seq_params.topfieldfirst = 1
187 + else:
188 + self.context.seq_params.topfieldfirst = 0
191 + def __loadEncParams(self, **params):
192 + if "qf" in 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):
221 + if c == "Yonly":
222 + return Yonly
223 + elif c == "422":
224 + return format422
225 + elif c == "444":
226 + return format444
227 + elif c == "420":
228 + return format420
229 + elif c == "411":
230 + return format411
231 + elif c == "NK":
232 + return formatNK
233 + else:
234 + raise ValueError("Unknown chroma type")