OSDN Git Service

genX_mfd: no raw coded bitplanes for skipped pictures
authorcarpalis <jerome.borsboom@carpalis.nl>
Wed, 25 Oct 2017 11:26:01 +0000 (13:26 +0200)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 5 Jan 2018 06:57:31 +0000 (14:57 +0800)
Skipped pictures should not signal raw coded bitplanes as there are no
MBs encoded. Failure to do so results in decoding errors.

Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
src/gen6_mfd.c
src/gen75_mfd.c
src/gen7_mfd.c
src/gen8_mfd.c

index a7bfa48..43f0efd 100644 (file)
@@ -1377,6 +1377,8 @@ gen6_mfd_vc1_pic_state(VADriverContextP ctx,
     int overlap = 0;
     int loopfilter = 0;
     int bitplane_present;
+    int forward_mb = 0, mv_type_mb = 0, skip_mb = 0, direct_mb = 0;
+    int overflags = 0, ac_pred = 0, field_tx = 0;
 
     assert(decode_state->pic_param && decode_state->pic_param->buffer);
     pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
@@ -1466,6 +1468,13 @@ gen6_mfd_vc1_pic_state(VADriverContextP ctx,
     } else {
         ptype = pic_param->picture_fields.bits.picture_type;
         bitplane_present = !!(pic_param->bitplane_present.value & 0x7f);
+        forward_mb = pic_param->raw_coding.flags.forward_mb;
+        mv_type_mb = pic_param->raw_coding.flags.mv_type_mb;
+        skip_mb = pic_param->raw_coding.flags.skip_mb;
+        direct_mb = pic_param->raw_coding.flags.direct_mb;
+        overflags = pic_param->raw_coding.flags.overflags;
+        ac_pred = pic_param->raw_coding.flags.ac_pred;
+        field_tx = pic_param->raw_coding.flags.field_tx;
         loopfilter = pic_param->entrypoint_fields.bits.loopfilter;
     }
 
@@ -1567,13 +1576,13 @@ gen6_mfd_vc1_pic_state(VADriverContextP ctx,
                   fcm << 0);
     OUT_BCS_BATCH(batch,
                   bitplane_present << 23 |
-                  pic_param->raw_coding.flags.forward_mb << 22 |
-                  pic_param->raw_coding.flags.mv_type_mb << 21 |
-                  pic_param->raw_coding.flags.skip_mb << 20 |
-                  pic_param->raw_coding.flags.direct_mb << 19 |
-                  pic_param->raw_coding.flags.overflags << 18 |
-                  pic_param->raw_coding.flags.ac_pred << 17 |
-                  pic_param->raw_coding.flags.field_tx << 16 |
+                  forward_mb << 22 |
+                  mv_type_mb << 21 |
+                  skip_mb << 20 |
+                  direct_mb << 19 |
+                  overflags << 18 |
+                  ac_pred << 17 |
+                  field_tx << 16 |
                   pic_param->mv_fields.bits.extended_dmv_range << 14 |
                   pic_param->mv_fields.bits.extended_mv_range << 12 |
                   pic_param->mv_fields.bits.four_mv_switch << 11 |
index 2089566..13ee8b0 100644 (file)
@@ -1702,6 +1702,8 @@ gen75_mfd_vc1_pic_state(VADriverContextP ctx,
     int interpolation_mode = 0;
     int loopfilter = 0;
     int bitplane_present;
+    int forward_mb = 0, mv_type_mb = 0, skip_mb = 0, direct_mb = 0;
+    int overflags = 0, ac_pred = 0, field_tx = 0;
 
     assert(decode_state->pic_param && decode_state->pic_param->buffer);
     pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
@@ -1791,6 +1793,13 @@ gen75_mfd_vc1_pic_state(VADriverContextP ctx,
     } else {
         ptype = pic_param->picture_fields.bits.picture_type;
         bitplane_present = !!(pic_param->bitplane_present.value & 0x7f);
+        forward_mb = pic_param->raw_coding.flags.forward_mb;
+        mv_type_mb = pic_param->raw_coding.flags.mv_type_mb;
+        skip_mb = pic_param->raw_coding.flags.skip_mb;
+        direct_mb = pic_param->raw_coding.flags.direct_mb;
+        overflags = pic_param->raw_coding.flags.overflags;
+        ac_pred = pic_param->raw_coding.flags.ac_pred;
+        field_tx = pic_param->raw_coding.flags.field_tx;
         loopfilter = pic_param->entrypoint_fields.bits.loopfilter;
     }
 
@@ -1922,13 +1931,13 @@ gen75_mfd_vc1_pic_state(VADriverContextP ctx,
                   pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 0);
     OUT_BCS_BATCH(batch,
                   bitplane_present << 31 |
-                  pic_param->raw_coding.flags.forward_mb << 30 |
-                  pic_param->raw_coding.flags.mv_type_mb << 29 |
-                  pic_param->raw_coding.flags.skip_mb << 28 |
-                  pic_param->raw_coding.flags.direct_mb << 27 |
-                  pic_param->raw_coding.flags.overflags << 26 |
-                  pic_param->raw_coding.flags.ac_pred << 25 |
-                  pic_param->raw_coding.flags.field_tx << 24 |
+                  forward_mb << 30 |
+                  mv_type_mb << 29 |
+                  skip_mb << 28 |
+                  direct_mb << 27 |
+                  overflags << 26 |
+                  ac_pred << 25 |
+                  field_tx << 24 |
                   pic_param->mv_fields.bits.mv_table << 20 |
                   pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 |
                   pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 |
index b8d7a55..51cd91a 100644 (file)
@@ -1437,6 +1437,8 @@ gen7_mfd_vc1_pic_state(VADriverContextP ctx,
     int interpolation_mode = 0;
     int loopfilter = 0;
     int bitplane_present;
+    int forward_mb = 0, mv_type_mb = 0, skip_mb = 0, direct_mb = 0;
+    int overflags = 0, ac_pred = 0, field_tx = 0;
 
     assert(decode_state->pic_param && decode_state->pic_param->buffer);
     pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
@@ -1526,6 +1528,13 @@ gen7_mfd_vc1_pic_state(VADriverContextP ctx,
     } else {
         ptype = pic_param->picture_fields.bits.picture_type;
         bitplane_present = !!(pic_param->bitplane_present.value & 0x7f);
+        forward_mb = pic_param->raw_coding.flags.forward_mb;
+        mv_type_mb = pic_param->raw_coding.flags.mv_type_mb;
+        skip_mb = pic_param->raw_coding.flags.skip_mb;
+        direct_mb = pic_param->raw_coding.flags.direct_mb;
+        overflags = pic_param->raw_coding.flags.overflags;
+        ac_pred = pic_param->raw_coding.flags.ac_pred;
+        field_tx = pic_param->raw_coding.flags.field_tx;
         loopfilter = pic_param->entrypoint_fields.bits.loopfilter;
     }
 
@@ -1656,13 +1665,13 @@ gen7_mfd_vc1_pic_state(VADriverContextP ctx,
                   pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 0);
     OUT_BCS_BATCH(batch,
                   bitplane_present << 31 |
-                  pic_param->raw_coding.flags.forward_mb << 30 |
-                  pic_param->raw_coding.flags.mv_type_mb << 29 |
-                  pic_param->raw_coding.flags.skip_mb << 28 |
-                  pic_param->raw_coding.flags.direct_mb << 27 |
-                  pic_param->raw_coding.flags.overflags << 26 |
-                  pic_param->raw_coding.flags.ac_pred << 25 |
-                  pic_param->raw_coding.flags.field_tx << 24 |
+                  forward_mb << 30 |
+                  mv_type_mb << 29 |
+                  skip_mb << 28 |
+                  direct_mb << 27 |
+                  overflags << 26 |
+                  ac_pred << 25 |
+                  field_tx << 24 |
                   pic_param->mv_fields.bits.mv_table << 20 |
                   pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 |
                   pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 |
index de2975e..59d0e70 100644 (file)
@@ -1481,6 +1481,8 @@ gen8_mfd_vc1_pic_state(VADriverContextP ctx,
     int interpolation_mode = 0;
     int loopfilter = 0;
     int bitplane_present;
+    int forward_mb = 0, mv_type_mb = 0, skip_mb = 0, direct_mb = 0;
+    int overflags = 0, ac_pred = 0, field_tx = 0;
 
     assert(decode_state->pic_param && decode_state->pic_param->buffer);
     pic_param = (VAPictureParameterBufferVC1 *)decode_state->pic_param->buffer;
@@ -1570,6 +1572,13 @@ gen8_mfd_vc1_pic_state(VADriverContextP ctx,
     } else {
         ptype = pic_param->picture_fields.bits.picture_type;
         bitplane_present = !!(pic_param->bitplane_present.value & 0x7f);
+        forward_mb = pic_param->raw_coding.flags.forward_mb;
+        mv_type_mb = pic_param->raw_coding.flags.mv_type_mb;
+        skip_mb = pic_param->raw_coding.flags.skip_mb;
+        direct_mb = pic_param->raw_coding.flags.direct_mb;
+        overflags = pic_param->raw_coding.flags.overflags;
+        ac_pred = pic_param->raw_coding.flags.ac_pred;
+        field_tx = pic_param->raw_coding.flags.field_tx;
         loopfilter = pic_param->entrypoint_fields.bits.loopfilter;
     }
 
@@ -1701,13 +1710,13 @@ gen8_mfd_vc1_pic_state(VADriverContextP ctx,
                   pic_param->pic_quantizer_fields.bits.pic_quantizer_type << 0);
     OUT_BCS_BATCH(batch,
                   bitplane_present << 31 |
-                  pic_param->raw_coding.flags.forward_mb << 30 |
-                  pic_param->raw_coding.flags.mv_type_mb << 29 |
-                  pic_param->raw_coding.flags.skip_mb << 28 |
-                  pic_param->raw_coding.flags.direct_mb << 27 |
-                  pic_param->raw_coding.flags.overflags << 26 |
-                  pic_param->raw_coding.flags.ac_pred << 25 |
-                  pic_param->raw_coding.flags.field_tx << 24 |
+                  forward_mb << 30 |
+                  mv_type_mb << 29 |
+                  skip_mb << 28 |
+                  direct_mb << 27 |
+                  overflags << 26 |
+                  ac_pred << 25 |
+                  field_tx << 24 |
                   pic_param->mv_fields.bits.mv_table << 20 |
                   pic_param->mv_fields.bits.four_mv_block_pattern_table << 18 |
                   pic_param->mv_fields.bits.two_mv_block_pattern_table << 16 |