summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPraveen Chavan <pchavan@codeaurora.org>2017-06-07 16:51:28 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-03-21 20:54:34 -0700
commit0b61c1a2689a1de9cfaf36f593a9ba56c8b440de (patch)
treed1569fae9cb2fdc91e2f5ae4ecc2b736c8180e08
parent9ab537860bf0c6f9ecce0c9d1e37211efaef9afb (diff)
downloadandroid_hardware_qcom_media-0b61c1a2689a1de9cfaf36f593a9ba56c8b440de.tar.gz
android_hardware_qcom_media-0b61c1a2689a1de9cfaf36f593a9ba56c8b440de.tar.bz2
android_hardware_qcom_media-0b61c1a2689a1de9cfaf36f593a9ba56c8b440de.zip
mm-video-v4l2: vdec: Fix reporting change in color-space to the client
If the colorspace in bitstream gets updated, the client is notified. However, when the client comes back to read, it must be notified of the color-space values from bitstream (if specified) and use default (client's values) if unspecified. Exception: For VPX, return the stream colorspace only if client has unspecified aspects. Bug: 36373942 CRs-Fixed: 2058039 Change-Id: Ie7c387371c55c655115c040f94f6e712a6c8b322
-rw-r--r--mm-video-v4l2/vidc/vdec/inc/omx_vdec.h2
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp44
2 files changed, 32 insertions, 14 deletions
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index bcc61816..d1e15ffb 100644
--- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -50,6 +50,7 @@ IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <cutils/atomic.h>
#include <qdMetaData.h>
#include <color_metadata.h>
+#define STRINGIFY_ENUMS
#include <media/msm_media_info.h>
static ptrdiff_t x;
@@ -79,6 +80,7 @@ extern "C" {
#endif // _ANDROID_
#if defined (_ANDROID_HONEYCOMB_) || defined (_ANDROID_ICS_)
+#define STRINGIFY_ENUMS
#include <media/hardware/HardwareAPI.h>
#endif
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 2a3829c7..60199546 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -5500,20 +5500,34 @@ OMX_ERRORTYPE omx_vdec::get_config(OMX_IN OMX_HANDLETYPE hComp,
VALIDATE_OMX_PARAM_DATA(configData, DescribeColorAspectsParams);
DescribeColorAspectsParams *params = (DescribeColorAspectsParams *)configData;
- print_debug_color_aspects(&(m_client_color_space.sAspects), "GetConfig Client");
- print_debug_color_aspects(&(m_internal_color_space.sAspects), "GetConfig Internal");
-
if (params->bRequestingDataSpace) {
DEBUG_PRINT_HIGH("Does not handle dataspace request");
return OMX_ErrorUnsupportedSetting;
}
- if (m_internal_color_space.bDataSpaceChanged == OMX_TRUE) {
- DEBUG_PRINT_LOW("Updating Client's color aspects with internal");
- memcpy(&(m_client_color_space.sAspects),
- &(m_internal_color_space.sAspects), sizeof(ColorAspects));
- m_internal_color_space.bDataSpaceChanged = OMX_FALSE;
- }
- memcpy(&(params->sAspects), &(m_client_color_space.sAspects), sizeof(ColorAspects));
+
+ print_debug_color_aspects(&(m_client_color_space.sAspects), "GetConfig Client");
+ print_debug_color_aspects(&(m_internal_color_space.sAspects), "GetConfig Internal");
+
+ // For VPX, use client-color if specified.
+ // For the rest, try to use the stream-color if present
+ bool preferClientColor = (output_capability == V4L2_PIX_FMT_VP8 ||
+ output_capability == V4L2_PIX_FMT_VP9);
+
+ const ColorAspects &preferredColor = preferClientColor ?
+ m_client_color_space.sAspects : m_internal_color_space.sAspects;
+ const ColorAspects &defaultColor = preferClientColor ?
+ m_internal_color_space.sAspects : m_client_color_space.sAspects;
+
+ params->sAspects.mPrimaries = preferredColor.mPrimaries != ColorAspects::PrimariesUnspecified ?
+ preferredColor.mPrimaries : defaultColor.mPrimaries;
+ params->sAspects.mTransfer = preferredColor.mTransfer != ColorAspects::TransferUnspecified ?
+ preferredColor.mTransfer : defaultColor.mTransfer;
+ params->sAspects.mMatrixCoeffs = preferredColor.mMatrixCoeffs != ColorAspects::MatrixUnspecified ?
+ preferredColor.mMatrixCoeffs : defaultColor.mMatrixCoeffs;
+ params->sAspects.mRange = preferredColor.mRange != ColorAspects::RangeUnspecified ?
+ preferredColor.mRange : defaultColor.mRange;
+
+ print_debug_color_aspects(&(params->sAspects), "GetConfig");
break;
}
@@ -11163,9 +11177,10 @@ void omx_vdec::convert_color_space_info(OMX_U32 primaries, OMX_U32 range,
}
}
-void omx_vdec::print_debug_color_aspects(ColorAspects *aspects, const char *prefix) {
- DEBUG_PRINT_HIGH("%s : Color aspects : Primaries = %d Range = %d Transfer = %d MatrixCoeffs = %d",
- prefix, aspects->mPrimaries, aspects->mRange, aspects->mTransfer, aspects->mMatrixCoeffs);
+void omx_vdec::print_debug_color_aspects(ColorAspects *a, const char *prefix) {
+ DEBUG_PRINT_HIGH("%s : Color aspects : Primaries = %d(%s) Range = %d(%s) Tx = %d(%s) Matrix = %d(%s)",
+ prefix, a->mPrimaries, asString(a->mPrimaries), a->mRange, asString(a->mRange),
+ a->mTransfer, asString(a->mTransfer), a->mMatrixCoeffs, asString(a->mMatrixCoeffs));
}
void omx_vdec::prepare_color_aspects_metadata(OMX_U32 primaries, OMX_U32 range,
@@ -11277,6 +11292,8 @@ bool omx_vdec::handle_color_space_info(void *data,
if (vpx_color_space_payload->color_space == 0) {
*color_space = ITU_R_601;
+ aspects->mPrimaries = ColorAspects::PrimariesBT601_6_525;
+ aspects->mRange = ColorAspects::RangeLimited;
} else {
DEBUG_PRINT_ERROR("Unsupported Color space for VP8");
break;
@@ -11351,7 +11368,6 @@ bool omx_vdec::handle_color_space_info(void *data,
m_internal_color_space.sAspects.mMatrixCoeffs != aspects->mMatrixCoeffs ||
m_internal_color_space.sAspects.mRange != aspects->mRange) {
memcpy(&(m_internal_color_space.sAspects), aspects, sizeof(ColorAspects));
- m_internal_color_space.bDataSpaceChanged = OMX_TRUE;
m_color_mdata.colorPrimaries = color_mdata->colorPrimaries;
m_color_mdata.range = color_mdata->range;