diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2020-11-30 00:12:39 -0800 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2020-11-30 00:12:39 -0800 |
commit | c3e37ddaa14ae3ad0be6a84c1a586c972d91940e (patch) | |
tree | 792051a37e9cca4fe0096536750ac82ad3ee1e5f | |
parent | c1b1a867429956c8a62268563e2392d66d5e7bb4 (diff) | |
parent | 0515d17c093506cba8203b4e744c6284f3001176 (diff) |
Merge 0515d17c093506cba8203b4e744c6284f3001176 on remote branch
Change-Id: I281919762f683207ef6e38f0d128093622eeb640
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp index fe71103f..5f4d8537 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -3142,7 +3142,7 @@ OMX_ERRORTYPE omx_vdec::send_command_proxy(OMX_IN OMX_HANDLETYPE hComp, struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); - ts.tv_sec += 2; + ts.tv_sec += 1; DEBUG_PRINT_LOW("waiting for %d EBDs of CODEC CONFIG buffers ", m_queued_codec_config_count); BITMASK_SET(&m_flags, OMX_COMPONENT_FLUSH_DEFERRED); @@ -10372,16 +10372,14 @@ OMX_ERRORTYPE omx_vdec::update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn) memset(&fmt, 0x0, sizeof(struct v4l2_format)); if (0 == portDefn->nPortIndex) { int ret = 0; - if (secure_mode) { - fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; - fmt.fmt.pix_mp.pixelformat = output_capability; - ret = ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt); - if (ret) { - DEBUG_PRINT_ERROR("Get Resolution failed"); - return OMX_ErrorHardware; - } - drv_ctx.ip_buf.buffer_size = fmt.fmt.pix_mp.plane_fmt[0].sizeimage; + fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; + fmt.fmt.pix_mp.pixelformat = output_capability; + ret = ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt); + if (ret) { + DEBUG_PRINT_ERROR("Get Resolution failed"); + return OMX_ErrorHardware; } + drv_ctx.ip_buf.buffer_size = fmt.fmt.pix_mp.plane_fmt[0].sizeimage; portDefn->eDir = OMX_DirInput; portDefn->nBufferCountActual = drv_ctx.ip_buf.actualcount; portDefn->nBufferCountMin = drv_ctx.ip_buf.mincount; @@ -10393,10 +10391,6 @@ OMX_ERRORTYPE omx_vdec::update_portdef(OMX_PARAM_PORTDEFINITIONTYPE *portDefn) portDefn->format.video.xFramerate = m_fps_received; portDefn->bEnabled = m_inp_bEnabled; portDefn->bPopulated = m_inp_bPopulated; - - fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; - fmt.fmt.pix_mp.pixelformat = output_capability; - ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt); } else if (1 == portDefn->nPortIndex) { unsigned int buf_size = 0; int ret = 0; @@ -12815,9 +12809,9 @@ bool omx_vdec::allocate_color_convert_buf::get_color_format(OMX_COLOR_FORMATTYPE void omx_vdec::send_codec_config() { if (codec_config_flag) { - unsigned long p1 = 0; // Parameter - 1 - unsigned long p2 = 0; // Parameter - 2 - unsigned long ident = 0; + unsigned long p1 = 0, p2 = 0; + unsigned long p3 = 0, p4 = 0; + unsigned long ident = 0, ident2 = 0; pthread_mutex_lock(&m_lock); DEBUG_PRINT_LOW("\n Check Queue for codec_config buffer \n"); while (m_etb_q.m_size) { @@ -12835,6 +12829,21 @@ void omx_vdec::send_codec_config() { } } else if (ident == OMX_COMPONENT_GENERATE_ETB) { if (((OMX_BUFFERHEADERTYPE *)p2)->nFlags & OMX_BUFFERFLAG_CODECCONFIG) { + while (m_ftb_q.m_size) { + m_ftb_q.pop_entry(&p3,&p4,&ident2); + if (ident2 == OMX_COMPONENT_GENERATE_FTB) { + pthread_mutex_unlock(&m_lock); + if (fill_this_buffer_proxy((OMX_HANDLETYPE)p3,\ + (OMX_BUFFERHEADERTYPE *)p4) != OMX_ErrorNone) { + DEBUG_PRINT_ERROR("\n fill_this_buffer_proxy failure"); + omx_report_error (); + } + pthread_mutex_lock(&m_lock); + } else if (ident2 == OMX_COMPONENT_GENERATE_FBD) { + fill_buffer_done(&m_cmp,(OMX_BUFFERHEADERTYPE *)p3); + } + } + pthread_mutex_unlock(&m_lock); if (empty_this_buffer_proxy((OMX_HANDLETYPE)p1,\ (OMX_BUFFERHEADERTYPE *)p2) != OMX_ErrorNone) { DEBUG_PRINT_ERROR("\n empty_this_buffer_proxy failure"); |