diff options
author | Ashray Kulkarni <ashrayk@codeaurora.org> | 2015-01-28 12:22:51 -0800 |
---|---|---|
committer | Deva Ramasubramanian <dramasub@codeaurora.org> | 2016-02-10 12:15:49 -0800 |
commit | 5f4d49feac7ec71861538f69efc201b19c3b984c (patch) | |
tree | f38a612837fac6c85fae8387a4fd42303e842272 | |
parent | a7f1dda4184ef2a44ae06557e6f3b7df46060e44 (diff) | |
download | android_hardware_qcom_media-5f4d49feac7ec71861538f69efc201b19c3b984c.tar.gz android_hardware_qcom_media-5f4d49feac7ec71861538f69efc201b19c3b984c.tar.bz2 android_hardware_qcom_media-5f4d49feac7ec71861538f69efc201b19c3b984c.zip |
mm-video-v4l2: vidc: vdec: Add support for S3D metadata
Stereo video output information is present in H264 SEI. Venus HW
decodes it and sends to OMX component as extradata. OMX component
parses extradata and sends this information to display as metadata.
Change-Id: I08af0a408e4c44c396587600a7ea1b5a61fbe5a9
-rw-r--r-- | mm-video-v4l2/vidc/vdec/inc/omx_vdec.h | 1 | ||||
-rw-r--r-- | mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp | 30 |
2 files changed, 30 insertions, 1 deletions
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h index 2478338a..4d9b072a 100644 --- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h +++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h @@ -991,6 +991,7 @@ class omx_vdec: public qc_omx_component unsigned int m_fill_output_msg; bool client_set_fps; + unsigned int stereo_output_mode; class allocate_color_convert_buf { public: 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 7dfacc05..9f230824 100644 --- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp +++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp @@ -123,7 +123,7 @@ extern "C" { #define EXTRADATA_IDX(__num_planes) ((__num_planes) ? (__num_planes) - 1 : 0) #define ALIGN(x, to_align) ((((unsigned) x) + (to_align - 1)) & ~(to_align - 1)) -#define DEFAULT_EXTRADATA (OMX_INTERLACE_EXTRADATA) +#define DEFAULT_EXTRADATA (OMX_INTERLACE_EXTRADATA | OMX_FRAMEPACK_EXTRADATA) #define DEFAULT_CONCEAL_COLOR "32784" //0x8010, black by default #ifndef ION_FLAG_CP_BITSTREAM @@ -642,6 +642,7 @@ omx_vdec::omx_vdec(): m_error_propogated(false), m_other_extradata(NULL), m_profile(0), client_set_fps(false), + stereo_output_mode(HAL_NO_3D), m_last_rendered_TS(-1), m_queued_codec_config_count(0), current_perf_level(V4L2_CID_MPEG_VIDC_PERF_LEVEL_NOMINAL), @@ -8047,6 +8048,13 @@ OMX_ERRORTYPE omx_vdec::fill_buffer_done(OMX_HANDLETYPE hComp, UPDATE_REFRESH_RATE, (void*)¤t_framerate); } + if (buffer->nFilledLen && m_enable_android_native_buffers && m_out_mem_ptr) { + OMX_U32 buf_index = buffer - m_out_mem_ptr; + DEBUG_PRINT_LOW("stereo_output_mode = %d",stereo_output_mode); + setMetaData((private_handle_t *)native_buffer[buf_index].privatehandle, + S3D_FORMAT, (void*)&stereo_output_mode); + } + if (il_buffer) { log_output_buffers(il_buffer); if (dynamic_buf_mode) { @@ -10123,6 +10131,26 @@ void omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr) case MSM_VIDC_EXTRADATA_S3D_FRAME_PACKING: struct msm_vidc_s3d_frame_packing_payload *s3d_frame_packing_payload; s3d_frame_packing_payload = (struct msm_vidc_s3d_frame_packing_payload *)(void *)data->data; + switch (s3d_frame_packing_payload->fpa_type) { + case MSM_VIDC_FRAMEPACK_SIDE_BY_SIDE: + if (s3d_frame_packing_payload->content_interprtation_type == 1) + stereo_output_mode = HAL_3D_SIDE_BY_SIDE_L_R; + else if (s3d_frame_packing_payload->content_interprtation_type == 2) + stereo_output_mode = HAL_3D_SIDE_BY_SIDE_R_L; + else { + DEBUG_PRINT_ERROR("Unsupported side-by-side framepacking type"); + stereo_output_mode = HAL_NO_3D; + } + break; + case MSM_VIDC_FRAMEPACK_TOP_BOTTOM: + stereo_output_mode = HAL_3D_TOP_BOTTOM; + break; + default: + DEBUG_PRINT_ERROR("Unsupported framepacking type"); + stereo_output_mode = HAL_NO_3D; + } + DEBUG_PRINT_LOW("setMetaData FRAMEPACKING : fpa_type = %lu, content_interprtation_type = %lu, stereo_output_mode= %d", + s3d_frame_packing_payload->fpa_type, s3d_frame_packing_payload->content_interprtation_type, stereo_output_mode); if (client_extradata & OMX_FRAMEPACK_EXTRADATA) { append_framepack_extradata(p_extra, s3d_frame_packing_payload); p_extra = (OMX_OTHER_EXTRADATATYPE *) (((OMX_U8 *) p_extra) + p_extra->nSize); |