workaround to set VC1 overlap filter flag
authorLi, Xiaowei A <xiaowei.a.li@intel.com>
Wed, 12 Dec 2012 02:04:37 +0000 (10:04 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Wed, 9 Jan 2013 07:39:08 +0000 (15:39 +0800)
Signed-off-by: Li,Xiaowei <xiaowei.a.li@intel.com>
(cherry picked from commit a6dfb8f7fb601f102b414ac0c9088b5b8e88060f)

src/gen6_mfd.c
src/gen75_mfd.c
src/gen7_mfd.c

index 986b38b..741a97e 100755 (executable)
@@ -1662,9 +1662,26 @@ gen6_mfd_vc1_pic_state(VADriverContextP ctx,
             brfd = 0;
     }
 
-    overlap = pic_param->sequence_fields.bits.overlap;
-    if (profile != GEN6_VC1_ADVANCED_PROFILE && pic_param->pic_quantizer_fields.bits.pic_quantizer_scale < 9)
-        overlap = 0;
+    overlap = 0;
+    if (profile != GEN6_VC1_ADVANCED_PROFILE){
+       if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+           overlap = 1; 
+        }
+    }else {
+        if (pic_param->picture_fields.bits.picture_type == GEN6_VC1_P_PICTURE &&
+             pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+              overlap = 1; 
+        }
+        if (pic_param->picture_fields.bits.picture_type == GEN6_VC1_I_PICTURE ||
+            pic_param->picture_fields.bits.picture_type == GEN6_VC1_BI_PICTURE){
+             if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+                overlap = 1; 
+             }else if(pic_param->conditional_overlap_flag == 2 ||
+                      pic_param->conditional_overlap_flag == 3){
+                overlap = 1;
+             }
+         }
+    } 
 
     assert(pic_param->conditional_overlap_flag < 3);
     assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */
index e53139a..1800ac5 100644 (file)
@@ -1958,9 +1958,26 @@ gen75_mfd_vc1_pic_state(VADriverContextP ctx,
             brfd = 0;
     }
 
-    overlap = pic_param->sequence_fields.bits.overlap;
-    if (profile != GEN7_VC1_ADVANCED_PROFILE && pic_param->pic_quantizer_fields.bits.pic_quantizer_scale < 9)
-        overlap = 0;
+    overlap = 0;
+    if (profile != GEN7_VC1_ADVANCED_PROFILE){
+       if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+           overlap = 1; 
+        }
+    }else {
+        if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_P_PICTURE &&
+             pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+              overlap = 1; 
+        }
+        if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_I_PICTURE ||
+            pic_param->picture_fields.bits.picture_type == GEN7_VC1_BI_PICTURE){
+             if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+                overlap = 1; 
+             }else if(pic_param->conditional_overlap_flag == 2 ||
+                      pic_param->conditional_overlap_flag == 3){
+                overlap = 1;
+             }
+         }
+    } 
 
     assert(pic_param->conditional_overlap_flag < 3);
     assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */
index 0a0e44f..8c51017 100755 (executable)
@@ -1617,9 +1617,26 @@ gen7_mfd_vc1_pic_state(VADriverContextP ctx,
             brfd = 0;
     }
 
-    overlap = pic_param->sequence_fields.bits.overlap;
-    if (profile != GEN7_VC1_ADVANCED_PROFILE && pic_param->pic_quantizer_fields.bits.pic_quantizer_scale < 9)
-        overlap = 0;
+    overlap = 0;
+    if (profile != GEN7_VC1_ADVANCED_PROFILE){
+       if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+           overlap = 1; 
+        }
+    }else {
+        if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_P_PICTURE &&
+             pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+              overlap = 1; 
+        }
+        if (pic_param->picture_fields.bits.picture_type == GEN7_VC1_I_PICTURE ||
+            pic_param->picture_fields.bits.picture_type == GEN7_VC1_BI_PICTURE){
+             if (pic_param->pic_quantizer_fields.bits.pic_quantizer_scale >= 9){
+                overlap = 1; 
+             }else if(pic_param->conditional_overlap_flag == 2 ||
+                      pic_param->conditional_overlap_flag == 3){
+                overlap = 1;
+             }
+         }
+    } 
 
     assert(pic_param->conditional_overlap_flag < 3);
     assert(pic_param->mv_fields.bits.mv_table < 4); /* FIXME: interlace mode */