summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2013-03-06 22:45:32 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2013-03-06 22:45:32 -0800
commit502bf25b05b42726d7f1d2fd7feefcbfb6ac4a59 (patch)
treec8fdf5bbefb703c76185db46d2e1ddc617a1e5e7
parent4f1e077df2555205e57d861b6d17b962a6aaad46 (diff)
parent41da192219a5326bdf28139e6e74104d018ff4ea (diff)
downloadandroid_hardware_qcom_media-502bf25b05b42726d7f1d2fd7feefcbfb6ac4a59.tar.gz
android_hardware_qcom_media-502bf25b05b42726d7f1d2fd7feefcbfb6ac4a59.tar.bz2
android_hardware_qcom_media-502bf25b05b42726d7f1d2fd7feefcbfb6ac4a59.zip
Merge "mm-video: vdec: Notify display about the format of video playback"
-rw-r--r--mm-video/vidc/vdec/Android.mk2
-rw-r--r--mm-video/vidc/vdec/inc/omx_vdec.h6
-rw-r--r--mm-video/vidc/vdec/src/omx_vdec.cpp32
3 files changed, 37 insertions, 3 deletions
diff --git a/mm-video/vidc/vdec/Android.mk b/mm-video/vidc/vdec/Android.mk
index fb5f26ff..56e25807 100644
--- a/mm-video/vidc/vdec/Android.mk
+++ b/mm-video/vidc/vdec/Android.mk
@@ -68,6 +68,7 @@ libmm-vdec-inc += frameworks/av/include/media/stagefright
libmm-vdec-inc += hardware/qcom/display/libqservice
libmm-vdec-inc += frameworks/av/media/libmediaplayerservice
libmm-vdec-inc += frameworks/native/include/binder
+libmm-vdec-inc += hardware/qcom/display/libqdutils
LOCAL_MODULE := libOmxVdec
@@ -80,6 +81,7 @@ LOCAL_SHARED_LIBRARIES := liblog libutils libbinder libcutils libdl
LOCAL_SHARED_LIBRARIES += libdivxdrmdecrypt
LOCAL_SHARED_LIBRARIES += libqservice
+LOCAL_SHARED_LIBRARIES += libqdMetaData
LOCAL_SRC_FILES := src/frameparser.cpp
LOCAL_SRC_FILES += src/h264_utils.cpp
diff --git a/mm-video/vidc/vdec/inc/omx_vdec.h b/mm-video/vidc/vdec/inc/omx_vdec.h
index e1fd663c..7de5a371 100644
--- a/mm-video/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video/vidc/vdec/inc/omx_vdec.h
@@ -84,6 +84,7 @@ extern "C"{
#if defined (_ANDROID_ICS_)
#include <gralloc_priv.h>
#include <IQService.h>
+#include <qdMetaData.h>
#endif
#include <pthread.h>
@@ -591,8 +592,13 @@ private:
void handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
OMX_ERRORTYPE enable_extradata(OMX_U32 requested_extradata, bool enable = true);
void print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra);
+#ifdef _MSM8974_
void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
OMX_U32 interlaced_format_type);
+#else
+ void append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
+ OMX_U32 interlaced_format_type, OMX_U32 buf_index);
+#endif
void append_frame_info_extradata(OMX_OTHER_EXTRADATATYPE *extra,
OMX_U32 num_conceal_mb,
OMX_U32 picture_type,
diff --git a/mm-video/vidc/vdec/src/omx_vdec.cpp b/mm-video/vidc/vdec/src/omx_vdec.cpp
index 2c038762..1b8c5935 100644
--- a/mm-video/vidc/vdec/src/omx_vdec.cpp
+++ b/mm-video/vidc/vdec/src/omx_vdec.cpp
@@ -4244,6 +4244,12 @@ OMX_ERRORTYPE omx_vdec::use_output_buffer(
drv_ctx.ptr_outputbuffer[i].bufferaddr = buff;
drv_ctx.ptr_outputbuffer[i].mmaped_size =
drv_ctx.ptr_outputbuffer[i].buffer_len = drv_ctx.op_buf.buffer_size;
+#if defined(_ANDROID_ICS_)
+ if (drv_ctx.interlace != VDEC_InterlaceFrameProgressive) {
+ int enable = 1;
+ setMetaData(handle, PP_PARAM_INTERLACED, (void*)&enable);
+ }
+#endif
} else
#endif
@@ -8469,7 +8475,7 @@ void omx_vdec::handle_extradata_secure(OMX_BUFFERHEADERTYPE *p_buf_hdr)
{
p_buf_hdr->nFlags |= OMX_BUFFERFLAG_EXTRADATA;
append_interlace_extradata(p_extra,
- ((struct vdec_output_frameinfo *)p_buf_hdr->pOutputPortPrivate)->interlaced_format);
+ ((struct vdec_output_frameinfo *)p_buf_hdr->pOutputPortPrivate)->interlaced_format, index);
p_extra = (OMX_OTHER_EXTRADATATYPE *) (((OMX_U8 *) p_extra) + p_extra->nSize);
}
if (client_extradata & OMX_FRAMEINFO_EXTRADATA && p_extra &&
@@ -8659,7 +8665,7 @@ void omx_vdec::handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr)
{
p_buf_hdr->nFlags |= OMX_BUFFERFLAG_EXTRADATA;
append_interlace_extradata(p_extra,
- ((struct vdec_output_frameinfo *)p_buf_hdr->pOutputPortPrivate)->interlaced_format);
+ ((struct vdec_output_frameinfo *)p_buf_hdr->pOutputPortPrivate)->interlaced_format, index);
p_extra = (OMX_OTHER_EXTRADATATYPE *) (((OMX_U8 *) p_extra) + p_extra->nSize);
}
if (client_extradata & OMX_FRAMEINFO_EXTRADATA && p_extra &&
@@ -8876,10 +8882,17 @@ void omx_vdec::print_debug_extradata(OMX_OTHER_EXTRADATATYPE *extra)
}
void omx_vdec::append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
- OMX_U32 interlaced_format_type)
+ OMX_U32 interlaced_format_type, OMX_U32 buf_index)
{
OMX_STREAMINTERLACEFORMAT *interlace_format;
OMX_U32 mbaff = 0;
+#if defined(_ANDROID_ICS_)
+ OMX_U32 enable = 0;
+ private_handle_t *handle = NULL;
+ handle = (private_handle_t *)native_buffer[buf_index].nativehandle;
+ if(!handle)
+ DEBUG_PRINT_LOW("%s: Native Buffer handle is NULL",__func__);
+#endif
extra->nSize = OMX_INTERLACE_EXTRADATA_SIZE;
extra->nVersion.nVersion = OMX_SPEC_VERSION;
extra->nPortIndex = OMX_CORE_OUTPUT_PORT_INDEX;
@@ -8895,12 +8908,25 @@ void omx_vdec::append_interlace_extradata(OMX_OTHER_EXTRADATATYPE *extra,
interlace_format->bInterlaceFormat = OMX_FALSE;
interlace_format->nInterlaceFormats = OMX_InterlaceFrameProgressive;
drv_ctx.interlace = VDEC_InterlaceFrameProgressive;
+#if defined(_ANDROID_ICS_)
+ if(handle)
+ {
+ setMetaData(handle, PP_PARAM_INTERLACED, (void*)&enable);
+ }
+#endif
}
else
{
interlace_format->bInterlaceFormat = OMX_TRUE;
interlace_format->nInterlaceFormats = OMX_InterlaceInterleaveFrameTopFieldFirst;
drv_ctx.interlace = VDEC_InterlaceInterleaveFrameTopFieldFirst;
+#if defined(_ANDROID_ICS_)
+ enable = 1;
+ if(handle)
+ {
+ setMetaData(handle, PP_PARAM_INTERLACED, (void*)&enable);
+ }
+#endif
}
print_debug_extradata(extra);
}