summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAshray Kulkarni <ashrayk@codeaurora.org>2015-01-28 12:22:51 -0800
committerDeva Ramasubramanian <dramasub@codeaurora.org>2016-02-10 12:15:49 -0800
commit5f4d49feac7ec71861538f69efc201b19c3b984c (patch)
treef38a612837fac6c85fae8387a4fd42303e842272
parenta7f1dda4184ef2a44ae06557e6f3b7df46060e44 (diff)
downloadandroid_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.h1
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp30
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*)&current_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);