changeset 10837:e5905bfa625d libavcodec

Export fullrange flag and color information for h.264
author conrad
date Mon, 11 Jan 2010 00:31:39 +0000
parents f20f9b76f4c8
children 95dac0e4703b
files h264.c h264.h
diffstat 2 files changed, 30 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/h264.c	Sun Jan 10 21:38:15 2010 +0000
+++ b/h264.c	Mon Jan 11 00:31:39 2010 +0000
@@ -3813,6 +3813,15 @@
         if(!s->avctx->sample_aspect_ratio.den)
             s->avctx->sample_aspect_ratio.den = 1;
 
+        if(h->sps.video_signal_type_present_flag){
+            s->avctx->color_range = h->sps.full_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
+            if(h->sps.colour_description_present_flag){
+                s->avctx->color_primaries = h->sps.color_primaries;
+                s->avctx->color_trc       = h->sps.color_trc;
+                s->avctx->colorspace      = h->sps.colorspace;
+            }
+        }
+
         if(h->sps.timing_info_present_flag){
             s->avctx->time_base= (AVRational){h->sps.num_units_in_tick, h->sps.time_scale};
             if(h->x264_build > 0 && h->x264_build < 44)
@@ -7079,13 +7088,22 @@
         get_bits1(&s->gb);      /* overscan_appropriate_flag */
     }
 
-    if(get_bits1(&s->gb)){      /* video_signal_type_present_flag */
+    sps->video_signal_type_present_flag = get_bits1(&s->gb);
+    if(sps->video_signal_type_present_flag){
         get_bits(&s->gb, 3);    /* video_format */
-        get_bits1(&s->gb);      /* video_full_range_flag */
-        if(get_bits1(&s->gb)){  /* colour_description_present_flag */
-            get_bits(&s->gb, 8); /* colour_primaries */
-            get_bits(&s->gb, 8); /* transfer_characteristics */
-            get_bits(&s->gb, 8); /* matrix_coefficients */
+        sps->full_range = get_bits1(&s->gb); /* video_full_range_flag */
+
+        sps->colour_description_present_flag = get_bits1(&s->gb);
+        if(sps->colour_description_present_flag){
+            sps->color_primaries = get_bits(&s->gb, 8); /* colour_primaries */
+            sps->color_trc       = get_bits(&s->gb, 8); /* transfer_characteristics */
+            sps->colorspace      = get_bits(&s->gb, 8); /* matrix_coefficients */
+            if (sps->color_primaries >= AVCOL_PRI_NB)
+                sps->color_primaries  = AVCOL_PRI_UNSPECIFIED;
+            if (sps->color_trc >= AVCOL_TRC_NB)
+                sps->color_trc  = AVCOL_TRC_UNSPECIFIED;
+            if (sps->colorspace >= AVCOL_SPC_NB)
+                sps->colorspace  = AVCOL_SPC_UNSPECIFIED;
         }
     }
 
--- a/h264.h	Sun Jan 10 21:38:15 2010 +0000
+++ b/h264.h	Mon Jan 11 00:31:39 2010 +0000
@@ -166,6 +166,12 @@
     unsigned int crop_bottom;          ///< frame_cropping_rect_bottom_offset
     int vui_parameters_present_flag;
     AVRational sar;
+    int video_signal_type_present_flag;
+    int full_range;
+    int colour_description_present_flag;
+    enum AVColorPrimaries color_primaries;
+    enum AVColorTransferCharacteristic color_trc;
+    enum AVColorSpace colorspace;
     int timing_info_present_flag;
     uint32_t num_units_in_tick;
     uint32_t time_scale;