summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp38
1 files changed, 27 insertions, 11 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 201f6e09..68b48073 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -1612,7 +1612,7 @@ void omx_vdec::process_event_cb(void *ctxt)
pThis->omx_report_error ();
break;
}
-#if !HDR10_SETMETADATA_ENABLE
+//#if !HDR10_SETMETADATA_ENABLE
if (pThis->output_capability != V4L2_PIX_FMT_VP9 &&
pThis->output_capability != V4L2_PIX_FMT_HEVC)
break;
@@ -1634,7 +1634,7 @@ void omx_vdec::process_event_cb(void *ctxt)
OMX_CORE_OUTPUT_PORT_INDEX,
OMX_QTIIndexConfigDescribeHDR10PlusInfo, NULL);
}
-#endif
+//#endif
break;
case OMX_COMPONENT_GENERATE_EVENT_INPUT_FLUSH:
@@ -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);
@@ -11535,14 +11535,14 @@ bool omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr)
(payload_len > HDR_DYNAMIC_META_DATA_SZ)) {
DEBUG_PRINT_ERROR("Invalid User extradata size %u for HDR10+", data->nDataSize);
} else {
-#if HDR10_SETMETADATA_ENABLE
+// enable setting metadata via gralloc handle
+//#if HDR10_SETMETADATA_ENABLE
color_mdata.dynamicMetaDataValid = true;
color_mdata.dynamicMetaDataLen = payload_len;
memcpy(color_mdata.dynamicMetaDataPayload, userdata_payload->data, payload_len);
DEBUG_PRINT_HIGH("Copied %u bytes of HDR10+ extradata", payload_len);
-#else
+//#endif
store_hevc_hdr10plusinfo(payload_len, userdata_payload);
-#endif
}
}
if (client_extradata & OMX_EXTNUSER_EXTRADATA) {
@@ -11610,7 +11610,8 @@ bool omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr)
final_color_aspects.mMatrixCoeffs = ColorAspects::MatrixBT601_6;
}
get_preferred_hdr_info(final_hdr_info);
-#if HDR10_SETMETADATA_ENABLE
+// enable setting metadata via gralloc handle
+//#if HDR10_SETMETADATA_ENABLE
convert_hdr_info_to_metadata(final_hdr_info, color_mdata);
convert_hdr10plusinfo_to_metadata(p_buf_hdr->pMarkData, color_mdata);
remove_hdr10plusinfo_using_cookie(p_buf_hdr->pMarkData);
@@ -11618,7 +11619,7 @@ bool omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr)
print_debug_hdr_color_info_mdata(&color_mdata);
print_debug_hdr10plus_metadata(color_mdata);
set_colormetadata_in_handle(&color_mdata, buf_index);
-#endif
+//#endif
}
}
@@ -12802,9 +12803,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) {
@@ -12822,6 +12823,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");