Lines Matching refs:priv
56 static void release_input_headers(vid_dec_PrivateType* priv) {
58 for (i = 0; i < priv->num_in_buffers; i++) {
59 assert(!priv->in_port_disabled_);
60 if (priv->in_buffers[i]->pInputPortPrivate) {
61 vid_dec_FreeInputPortPrivate(priv->in_buffers[i]);
63 (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (priv)),
65 priv->in_buffers[i]);
66 priv->in_buffers[i] = NULL;
68 priv->p_inhdr_ = NULL;
69 priv->num_in_buffers = 0;
72 static void release_output_header(vid_dec_PrivateType* priv) {
73 if (priv->p_outhdr_) {
74 assert(!priv->out_port_disabled_);
75 (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (priv)),
77 priv->p_outhdr_);
78 priv->p_outhdr_ = NULL;
82 static OMX_ERRORTYPE h264d_release_all_headers(vid_dec_PrivateType* priv)
84 assert(priv);
85 release_input_headers(priv);
86 release_output_header(priv);
91 static void h264d_buffer_emptied(vid_dec_PrivateType* priv, OMX_BUFFERHEADERTYPE * p_hdr)
93 assert(priv);
94 assert(priv->in_buffers[0] == p_hdr);
96 if (!priv->out_port_disabled_) {
101 priv->eos_ = true;
104 (void) tiz_krn_release_buffer (tiz_get_krn (handleOf (priv)), 0, p_hdr);
105 priv->p_inhdr_ = NULL;
106 priv->in_buffers[0] = NULL;
110 static void h264d_buffer_filled(vid_dec_PrivateType* priv, OMX_BUFFERHEADERTYPE * p_hdr)
112 assert(priv);
114 assert(priv->p_outhdr_ == p_hdr);
116 if (!priv->in_port_disabled_) {
119 if (priv->eos_) {
122 priv->p_outhdr_->nFlags |= OMX_BUFFERFLAG_EOS;
123 priv->eos_ = false;
126 (void) tiz_krn_release_buffer(tiz_get_krn (handleOf (priv)),
129 priv->p_outhdr_ = NULL;
133 static bool h264d_shift_buffers_left(vid_dec_PrivateType* priv) {
134 if (--priv->num_in_buffers) {
135 priv->in_buffers[0] = priv->in_buffers[1];
136 priv->sizes[0] = priv->sizes[1] - dec_frame_delta;
137 priv->inputs[0] = priv->inputs[1] + dec_frame_delta;
138 priv->timestamps[0] = priv->timestamps[1];
145 static OMX_BUFFERHEADERTYPE * get_input_buffer(vid_dec_PrivateType* priv) {
146 assert(priv);
148 if (priv->in_port_disabled_) {
152 if (priv->num_in_buffers > 1) {
154 h264d_buffer_emptied(priv, priv->in_buffers[0]);
155 if (priv->in_buffers[0]) {
159 h264d_shift_buffers_left(priv);
163 assert(priv->p_inhdr_ || priv->first_buf_in_frame);
164 tiz_krn_claim_buffer(tiz_get_krn (handleOf (priv)),
166 &priv->p_inhdr_);
167 return priv->p_inhdr_;
182 static void get_eglimage(vid_dec_PrivateType* priv) {
192 tiz_krn_claim_eglimage(tiz_get_krn (handleOf (priv)),
194 priv->p_outhdr_, &p_eglimage)) {
195 priv->use_eglimage = true;
196 p_port = tiz_krn_get_port(tiz_get_krn (handleOf (priv)),
200 if (!util_hash_table_get(priv->video_buffer_map, priv->p_outhdr_)) {
214 video_buffer = vl_video_buffer_create_ex2(priv->pipe, &templat, resources);
219 _mesa_hash_table_insert(priv->video_buffer_map, priv->p_outhdr_, video_buffer);
222 (void) tiz_krn_release_buffer(tiz_get_krn (handleOf (priv)),
224 priv->p_outhdr_);
225 priv->p_outhdr_ = NULL;
229 static OMX_BUFFERHEADERTYPE * get_output_buffer(vid_dec_PrivateType* priv) {
230 assert (priv);
232 if (priv->out_port_disabled_) {
236 if (!priv->p_outhdr_) {
238 == tiz_krn_claim_buffer(tiz_get_krn (handleOf (priv)),
240 &priv->p_outhdr_)) {
241 if (priv->p_outhdr_) {
243 if (!priv->p_outhdr_->pBuffer) {
244 get_eglimage(priv);
249 return priv->p_outhdr_;
272 static void h264d_manage_buffers(vid_dec_PrivateType* priv) {
273 bool next_is_eos = priv->num_in_buffers == 2 ? !!(priv->in_buffers[1]->nFlags & OMX_BUFFERFLAG_EOS) : false;
274 vid_dec_FrameDecoded_common(priv, priv->in_buffers[0], priv->p_outhdr_);
276 priv->p_outhdr_->nTimeStamp = priv->in_buffers[0]->nTimeStamp;
280 if ((!next_is_eos) && ((priv->p_outhdr_->nFilledLen > 0) || priv->use_eglimage || priv->eos_)) {
281 h264d_buffer_filled(priv, priv->p_outhdr_);
285 if (priv->in_buffers[0]->nFilledLen == 0) {
286 h264d_buffer_emptied(priv, priv->in_buffers[0]);
290 static OMX_ERRORTYPE decode_frame(vid_dec_PrivateType*priv,
293 unsigned i = priv->num_in_buffers++;
294 priv->in_buffers[i] = in_buf;
295 priv->sizes[i] = in_buf->nFilledLen;
296 priv->inputs[i] = in_buf->pBuffer;
297 priv->timestamps[i] = in_buf->nTimeStamp;
299 while (priv->num_in_buffers > (!!(in_buf->nFlags & OMX_BUFFERFLAG_EOS) ? 0 : 1)) {
300 priv->eos_ = !!(priv->in_buffers[0]->nFlags & OMX_BUFFERFLAG_EOS);
301 unsigned min_bits_left = priv->eos_ ? 32 : MAX2(in_buf->nFilledLen * 8, 32);
304 vl_vlc_init(&vlc, priv->num_in_buffers, priv->inputs, priv->sizes);
306 if (priv->slice)
307 priv->bytes_left = vl_vlc_bits_left(&vlc) / 8;
310 vid_dec_h264_Decode(priv, &vlc, min_bits_left);
314 if (priv->slice) {
315 unsigned bytes = priv->bytes_left - vl_vlc_bits_left(&vlc) / 8;
317 priv->codec->decode_bitstream(priv->codec, priv->target, &priv->picture.base,
318 1, &priv->slice, &bytes);
320 if (priv->num_in_buffers)
321 priv->slice = priv->inputs[1];
323 priv->slice = NULL;
326 if (priv->eos_ && priv->frame_started)
327 vid_dec_h264_EndFrame(priv);
329 if (priv->frame_finished) {
330 priv->frame_finished = false;
331 h264d_manage_buffers(priv);
332 } else if (priv->eos_) {
333 vid_dec_FreeInputPortPrivate(priv->in_buffers[0]);
334 h264d_manage_buffers(priv);
336 priv->in_buffers[0]->nFilledLen = 0;
337 h264d_buffer_emptied(priv, priv->in_buffers[0]);
340 if (priv->out_port_disabled_) {
345 if (priv->num_in_buffers == 2) {
347 dec_frame_delta = MIN2((min_bits_left - vl_vlc_bits_left(&vlc)) / 8, priv->sizes[1]);
352 h264d_shift_buffers_left(priv);
364 vid_dec_PrivateType*priv = super_ctor(typeOf (ap_obj, "h264dprc"), ap_obj, app);
365 assert(priv);
366 priv->p_inhdr_ = 0;
367 priv->p_outhdr_ = 0;
368 priv->first_buf_in_frame = true;
369 priv->eos_ = false;
370 priv->in_port_disabled_ = false;
371 priv->out_port_disabled_ = false;
372 priv->picture.base.profile = PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH;
373 priv->profile = PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH;
374 reset_stream_parameters(priv);
376 return priv;
386 vid_dec_PrivateType*priv = ap_obj;
390 assert (priv);
392 priv->screen = omx_get_screen();
393 if (!priv->screen)
396 screen = priv->screen->pscreen;
397 priv->pipe = pipe_create_multimedia_context(screen);
398 if (!priv->pipe)
401 if (!vl_compositor_init(&priv->compositor, priv->pipe)) {
402 priv->pipe->destroy(priv->pipe);
403 priv->pipe = NULL;
407 if (!vl_compositor_init_state(&priv->cstate, priv->pipe)) {
408 vl_compositor_cleanup(&priv->compositor);
409 priv->pipe->destroy(priv->pipe);
410 priv->pipe = NULL;
415 if (!vl_compositor_set_csc_matrix(&priv->cstate, (const vl_csc_matrix *)&csc, 1.0f, 0.0f)) {
416 vl_compositor_cleanup(&priv->compositor);
417 priv->pipe->destroy(priv->pipe);
418 priv->pipe = NULL;
422 list_inithead(&priv->codec_data.h264.dpb_list);
424 priv->video_buffer_map = util_hash_table_create_ptr_keys();
431 vid_dec_PrivateType*priv = ap_obj;
432 assert(priv);
435 util_hash_table_foreach(priv->video_buffer_map,
438 _mesa_hash_table_destroy(priv->video_buffer_map, NULL);
440 if (priv->pipe) {
441 vl_compositor_cleanup_state(&priv->cstate);
442 vl_compositor_cleanup(&priv->compositor);
443 priv->pipe->destroy(priv->pipe);
446 if (priv->screen)
454 vid_dec_PrivateType*priv = ap_obj;
455 assert(priv);
457 TIZ_INIT_OMX_PORT_STRUCT(priv->out_port_def_,
460 tiz_api_GetParameter(tiz_get_krn(handleOf(priv)), handleOf(priv),
461 OMX_IndexParamPortDefinition, &(priv->out_port_def_)));
463 priv->first_buf_in_frame = true;
464 priv->eos_ = false;
475 vid_dec_PrivateType*priv = (vid_dec_PrivateType*) ap_obj;
476 return h264d_release_all_headers (priv);
481 vid_dec_PrivateType*priv = (vid_dec_PrivateType*) ap_obj;
485 assert(priv);
488 if (!priv->eos_ && priv->first_buf_in_frame && (in_buf = get_input_buffer(priv))) {
489 decode_frame(priv, in_buf);
493 while (!priv->eos_ && (out_buf = get_output_buffer(priv)) && (in_buf = get_input_buffer(priv))) {
494 if (!priv->out_port_disabled_) {
495 decode_frame(priv, in_buf);
504 vid_dec_PrivateType*priv = (vid_dec_PrivateType*) ap_obj;
506 release_input_headers(priv);
507 reset_stream_parameters(priv);
510 release_output_header(priv);
517 vid_dec_PrivateType*priv = (vid_dec_PrivateType*) ap_obj;
518 assert(priv);
521 h264d_release_all_headers(priv);
522 reset_stream_parameters(priv);
523 priv->in_port_disabled_ = true;
526 release_output_header(priv);
527 priv->out_port_disabled_ = true;
534 vid_dec_PrivateType* priv = (vid_dec_PrivateType*) ap_obj;
535 assert(priv);
537 if (priv->in_port_disabled_) {
538 reset_stream_parameters(priv);
539 priv->in_port_disabled_ = false;
543 priv->out_port_disabled_ = false;