<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi:<o:p></o:p></p>
<p class="MsoNormal">When gst-vaapi is used for vc1 playback, many stream give corruption image,
<o:p></o:p></p>
<p class="MsoNormal">after some debug, I found it was caused by incorrect ttmbf parameter:
<o:p></o:p></p>
<p class="MsoNormal">     in pseudo code , ttmbf is not set when vstransform is zero, however we can
<span style="color:#1F497D">rationalize it from context.</span><o:p></o:p></p>
<p class="MsoNormal">I try to fix it in gstreamer vc1 codec parser: <a href="https://bugzilla.gnome.org/show_bug.cgi?id=684341">
https://bugzilla.gnome.org/show_bug.cgi?id=684341</a> <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">However, Gwenole expects a fix in driver code. So I sent this patch to discuss it in libva list.<o:p></o:p></p>
<p class="MsoNormal">Thanks<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Patch detail:<o:p></o:p></p>
<p class="MsoNormal">= = = = = = = =<o:p></o:p></p>
<p class="MsoNormal">From 08f0d72a63c566e55027bae244774883aa31e25b Mon Sep 17 00:00:00 2001<o:p></o:p></p>
<p class="MsoNormal">From: Zhao Halley <halley.zhao@intel.com><o:p></o:p></p>
<p class="MsoNormal">Date: Fri, 21 Sep 2012 10:30:55 +0800<o:p></o:p></p>
<p class="MsoNormal">Subject: [PATCH] fix ttmbf/ttfrm when vstransform is 0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">---<o:p></o:p></p>
<p class="MsoNormal">src/gen6_mfd.c |   14 ++++++++++++--<o:p></o:p></p>
<p class="MsoNormal">src/gen7_mfd.c |   13 ++++++++++++-<o:p></o:p></p>
<p class="MsoNormal">2 files changed, 24 insertions(+), 3 deletions(-)<o:p></o:p></p>
<p class="MsoNormal">mode change 100644 => 100755 src/gen6_mfd.c<o:p></o:p></p>
<p class="MsoNormal">mode change 100644 => 100755 src/gen7_mfd.c<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c<o:p></o:p></p>
<p class="MsoNormal">old mode 100644<o:p></o:p></p>
<p class="MsoNormal">new mode 100755<o:p></o:p></p>
<p class="MsoNormal">index 7f8b2f3..7329d8f<o:p></o:p></p>
<p class="MsoNormal">--- a/src/gen6_mfd.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/src/gen6_mfd.c<o:p></o:p></p>
<p class="MsoNormal">@@ -1656,9 +1656,19 @@ gen6_mfd_vc1_pic_state(VADriverContextP ctx,<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">     if (picture_type == GEN6_VC1_I_PICTURE || picture_type == GEN6_VC1_BI_PICTURE) /* I picture */<o:p></o:p></p>
<p class="MsoNormal">         trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx2;<o:p></o:p></p>
<p class="MsoNormal">-    else<o:p></o:p></p>
<p class="MsoNormal">+    else {<o:p></o:p></p>
<p class="MsoNormal">         trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx1;<o:p></o:p></p>
<p class="MsoNormal">-<o:p></o:p></p>
<p class="MsoNormal">+        /*<o:p></o:p></p>
<p class="MsoNormal">+         * 8.3.6.2.1 Transform Type Selection<o:p></o:p></p>
<p class="MsoNormal">+         * If variable-sized transform coding is not enabled,<o:p></o:p></p>
<p class="MsoNormal">+         * then the 8x8 transform shall be used for all blocks.<o:p></o:p></p>
<p class="MsoNormal">+         * it is also MFX_VC1_PIC_STATE requirement.<o:p></o:p></p>
<p class="MsoNormal">+         */<o:p></o:p></p>
<p class="MsoNormal">+        if (pic_param->transform_fields.bits.variable_sized_transform_flag == 0) {<o:p></o:p></p>
<p class="MsoNormal">+            pic_param->transform_fields.bits.mb_level_transform_type_flag   = 1;<o:p></o:p></p>
<p class="MsoNormal">+            pic_param->transform_fields.bits.frame_level_transform_type     = 0;<o:p></o:p></p>
<p class="MsoNormal">+        }<o:p></o:p></p>
<p class="MsoNormal">+    }<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">     if (picture_type == GEN6_VC1_B_PICTURE) {<o:p></o:p></p>
<p class="MsoNormal">         struct gen6_vc1_surface *gen6_vc1_surface = NULL;<o:p></o:p></p>
<p class="MsoNormal">diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c<o:p></o:p></p>
<p class="MsoNormal">old mode 100644<o:p></o:p></p>
<p class="MsoNormal">new mode 100755<o:p></o:p></p>
<p class="MsoNormal">index d8581ed..2d75baf<o:p></o:p></p>
<p class="MsoNormal">--- a/src/gen7_mfd.c<o:p></o:p></p>
<p class="MsoNormal">+++ b/src/gen7_mfd.c<o:p></o:p></p>
<p class="MsoNormal">@@ -1633,8 +1633,19 @@ gen7_mfd_vc1_pic_state(VADriverContextP ctx,<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">     if (picture_type == GEN7_VC1_I_PICTURE || picture_type == GEN7_VC1_BI_PICTURE) /* I picture */<o:p></o:p></p>
<p class="MsoNormal">         trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx2;<o:p></o:p></p>
<p class="MsoNormal">-    else<o:p></o:p></p>
<p class="MsoNormal">+    else {<o:p></o:p></p>
<p class="MsoNormal">         trans_ac_y = pic_param->transform_fields.bits.transform_ac_codingset_idx1;<o:p></o:p></p>
<p class="MsoNormal">+        /*<o:p></o:p></p>
<p class="MsoNormal">+         * 8.3.6.2.1 Transform Type Selection<o:p></o:p></p>
<p class="MsoNormal">+         * If variable-sized transform coding is not enabled,<o:p></o:p></p>
<p class="MsoNormal">+         * then the 8x8 transform shall be used for all blocks.<o:p></o:p></p>
<p class="MsoNormal">+         * it is also MFX_VC1_PIC_STATE requirement.<o:p></o:p></p>
<p class="MsoNormal">+         */<o:p></o:p></p>
<p class="MsoNormal">+        if (pic_param->transform_fields.bits.variable_sized_transform_flag == 0) {<o:p></o:p></p>
<p class="MsoNormal">+            pic_param->transform_fields.bits.mb_level_transform_type_flag   = 1;<o:p></o:p></p>
<p class="MsoNormal">+            pic_param->transform_fields.bits.frame_level_transform_type     = 0;<o:p></o:p></p>
<p class="MsoNormal">+        }<o:p></o:p></p>
<p class="MsoNormal">+    }<o:p></o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">     if (picture_type == GEN7_VC1_B_PICTURE) {<o:p></o:p></p>
<p class="MsoNormal">-- <o:p></o:p></p>
<p class="MsoNormal">1.7.9.5<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>