]> granicus.if.org Git - libvpx/commitdiff
Add slightly more colorspace variations.
authorRonald S. Bultje <rbultje@google.com>
Fri, 7 Jun 2013 21:45:49 +0000 (14:45 -0700)
committerRonald S. Bultje <rbultje@google.com>
Fri, 7 Jun 2013 21:45:49 +0000 (14:45 -0700)
Change-Id: Ib44541fbbdcf71ec881814bd6715ea1c6bd82cf4

vp9/decoder/vp9_decodframe.c
vp9/encoder/vp9_bitstream.c

index 1e2c7534a4d7a2891c0a9feb33f13b6fcdf27c4e..deb39561dd1ee8eb5979b0cf22c42c15710dcb70 100644 (file)
@@ -959,6 +959,8 @@ static size_t read_uncompressed_header(VP9D_COMP *pbi,
   cm->error_resilient_mode = vp9_rb_read_bit(rb);
 
   if (cm->frame_type == KEY_FRAME) {
+    int csp;
+
     if (vp9_rb_read_literal(rb, 8) != SYNC_CODE_0 ||
         vp9_rb_read_literal(rb, 8) != SYNC_CODE_1 ||
         vp9_rb_read_literal(rb, 8) != SYNC_CODE_2) {
@@ -966,13 +968,24 @@ static size_t read_uncompressed_header(VP9D_COMP *pbi,
                          "Invalid frame sync code");
     }
 
-    vp9_rb_read_literal(rb, 3);  // colorspace
-    if (cm->version == 1) {
-      cm->subsampling_x = vp9_rb_read_bit(rb);
-      cm->subsampling_y = vp9_rb_read_bit(rb);
-      vp9_rb_read_bit(rb);  // has extra plane
+    csp = vp9_rb_read_literal(rb, 3);  // colorspace
+    if (csp != 7) {  // != sRGB
+      vp9_rb_read_bit(rb);  // [16,235] (including xvycc) vs [0,255] range
+      if (cm->version == 1) {
+        cm->subsampling_x = vp9_rb_read_bit(rb);
+        cm->subsampling_y = vp9_rb_read_bit(rb);
+        vp9_rb_read_bit(rb);  // has extra plane
+      } else {
+        cm->subsampling_y = cm->subsampling_x = 1;
+      }
     } else {
-      cm->subsampling_y = cm->subsampling_x = 1;
+      if (cm->version == 1) {
+        cm->subsampling_y = cm->subsampling_x = 0;
+        vp9_rb_read_bit(rb);  // has extra plane
+      } else {
+        vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM,
+                           "RGB not supported in profile 0");
+      }
     }
 
     vp9_setup_past_independence(cm, xd);
index 8d5dc286af55586413cc02cd7ccffb4f0dcfaa0e..2070432b29ada6629a71d7723cbe5cc333315f10 100644 (file)
@@ -1361,12 +1361,21 @@ static void write_uncompressed_header(VP9_COMP *cpi,
     // 000 - Unknown
     // 001 - BT.601
     // 010 - BT.709
-    // 011 - xvYCC
-    // 1xx - Reserved
+    // 011 - SMPTE-170
+    // 100 - SMPTE-240
+    // 101 - Reserved
+    // 110 - Reserved
+    // 111 - sRGB (RGB)
     vp9_wb_write_literal(wb, 0, 3);
-    if (cm->version == 1) {
-      vp9_wb_write_bit(wb, cm->subsampling_x);
-      vp9_wb_write_bit(wb, cm->subsampling_y);
+    if (1 /* colorspace != sRGB */) {
+      vp9_wb_write_bit(wb, 0);  // 0: [16, 235] (i.e. xvYCC), 1: [0, 255]
+      if (cm->version == 1) {
+        vp9_wb_write_bit(wb, cm->subsampling_x);
+        vp9_wb_write_bit(wb, cm->subsampling_y);
+        vp9_wb_write_bit(wb, 0);  // has extra plane
+      }
+    } else {
+      assert(cm->version == 1);
       vp9_wb_write_bit(wb, 0);  // has extra plane
     }