summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2020-11-30 00:12:39 -0800
committerLinux Build Service Account <lnxbuild@localhost>2020-11-30 00:12:39 -0800
commitc3e37ddaa14ae3ad0be6a84c1a586c972d91940e (patch)
tree792051a37e9cca4fe0096536750ac82ad3ee1e5f
parentc1b1a867429956c8a62268563e2392d66d5e7bb4 (diff)
parent0515d17c093506cba8203b4e744c6284f3001176 (diff)
Merge 0515d17c093506cba8203b4e744c6284f3001176 on remote branch
Change-Id: I281919762f683207ef6e38f0d128093622eeb640
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp43
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");