mm-video-v4l2: vdec: read color primaries as per H264 spec

Currently not reading range flag, if color_description_present_flag
is not set. But as per H264 spec, bitstream can have valid range
info even if color_description_present_flag is not set. So made
necessay changes to inline with H264 spec.

Change-Id: I549c791e05542803707e4c129bfa8d86b31e9e40
Signed-off-by: Govindaraj Rajagopal <grajagop@codeaurora.org>
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index b666cd6..af4fa47 100644
--- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -851,7 +851,7 @@
         void adjust_timestamp(OMX_S64 &act_timestamp);
         void set_frame_rate(OMX_S64 act_timestamp);
         bool handle_extradata(OMX_BUFFERHEADERTYPE *p_buf_hdr);
-        void convert_color_space_info(OMX_U32 primaries, OMX_U32 range,
+        void convert_color_space_info(OMX_U32 primaries,
             OMX_U32 transfer, OMX_U32 matrix,
             ColorAspects *aspects);
         bool handle_color_space_info(void *data);
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 845581b..37071c4 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -7472,7 +7472,7 @@
     prev_ts = act_timestamp;
 }
 
-void omx_vdec::convert_color_space_info(OMX_U32 primaries, OMX_U32 range,
+void omx_vdec::convert_color_space_info(OMX_U32 primaries,
     OMX_U32 transfer, OMX_U32 matrix, ColorAspects *aspects)
 {
     switch (primaries) {
@@ -7502,8 +7502,6 @@
             break;
     }
 
-    aspects->mRange = range ? ColorAspects::RangeFull : ColorAspects::RangeLimited;
-
     switch (transfer) {
         case MSM_VIDC_TRANSFER_BT709_5:
         case MSM_VIDC_TRANSFER_601_6_525: // case MSM_VIDC_TRANSFER_601_6_625:
@@ -7586,7 +7584,7 @@
 
                 if (seqdisp_payload && seqdisp_payload->color_descp) {
 
-                    convert_color_space_info(seqdisp_payload->color_primaries, 0,
+                    convert_color_space_info(seqdisp_payload->color_primaries,
                             seqdisp_payload->transfer_char, seqdisp_payload->matrix_coeffs,
                             aspects);
                     /* MPEG2 seqdisp payload doesn't give range info. Hence assing the value
@@ -7601,17 +7599,20 @@
         case V4L2_PIX_FMT_HEVC:
             {
                 struct msm_vidc_vui_display_info_payload *display_info_payload;
+                OMX_U32 range;
                 display_info_payload = (struct msm_vidc_vui_display_info_payload*)data;
 
                 /* Refer H264 Spec @ Rec. ITU-T H.264 (02/2014) to understand this code */
 
-                if (display_info_payload->video_signal_present_flag &&
-                        display_info_payload->color_description_present_flag) {
-                    convert_color_space_info(display_info_payload->color_primaries,
-                            display_info_payload->video_full_range_flag,
-                            display_info_payload->transfer_char,
-                            display_info_payload->matrix_coeffs,
-                            aspects);
+                if (display_info_payload->video_signal_present_flag) {
+                    range = display_info_payload->video_full_range_flag;
+                    aspects->mRange = range ? ColorAspects::RangeFull : ColorAspects::RangeLimited;
+                    if (display_info_payload->color_description_present_flag) {
+                        convert_color_space_info(display_info_payload->color_primaries,
+                                display_info_payload->transfer_char,
+                                display_info_payload->matrix_coeffs,
+                                aspects);
+                    }
                 }
             }
             break;