Fix a vc1 parser issue on ttmbf

Zhao, Halley halley.zhao at intel.com
Thu Sep 20 00:59:44 PDT 2012


See bugzilla here: https://bugzilla.gnome.org/show_bug.cgi?id=684341


Patch:

>From 89c2e93aaef107f503d40d2b545288f6cbebc9ff Mon Sep 17 00:00:00 2001
From: Zhao Halley <halley.zhao at intel.com>
Date: Wed, 19 Sep 2012 09:24:58 +0800
Subject: [PATCH] codecparsers: vc1: fix ttmbf when vstransform is not set

spec 8.3.6.2.1 Transform Type Selection
  If variable-sized transform coding is not enabled,
  then the 8x8 transform shall be used for all blocks.

I have to say the above spec isn't expressed clearly:
ttfrm is mentioned clearly, but not ttmbf.
anyway, since ttfrm is only specified when ttmbs is set,
we can deduce that ttmbf should set to 1.
it is also consistent with ffmpeg vc1 decoder and
hw behaviour (Intel GEN gfx)

https://bugzilla.gnome.org/show_bug.cgi?id=684341
---
gst-libs/gst/codecparsers/gstvc1parser.c |   16 ++++++++++++++++
1 file changed, 16 insertions(+)
mode change 100644 => 100755 gst-libs/gst/codecparsers/gstvc1parser.c

diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c
old mode 100644
new mode 100755
index bc94823..aa8cb4a
--- a/gst-libs/gst/codecparsers/gstvc1parser.c
+++ b/gst-libs/gst/codecparsers/gstvc1parser.c
@@ -1166,6 +1166,10 @@ parse_frame_header_advanced (GstBitReader * br, GstVC1FrameHdr * framehdr,
           READ_UINT8 (br, pic->ttfrm, 2);
         }
       }
+      else { // 8.3.6.2.1
+        pic->ttmbf = 1;
+        pic->ttfrm = 0;
+      }
       framehdr->transacfrm = get_unary (br, 0, 2);
       READ_UINT8 (br, framehdr->transdctab, 1);
@@ -1278,6 +1282,10 @@ parse_frame_header_advanced (GstBitReader * br, GstVC1FrameHdr * framehdr,
           READ_UINT8 (br, pic->ttfrm, 2);
         }
       }
+      else { // 8.3.6.2.1
+        pic->ttmbf = 1;
+        pic->ttfrm = 0;
+      }
       framehdr->transacfrm = get_unary (br, 0, 2);
       READ_UINT8 (br, framehdr->transdctab, 1);
@@ -1462,6 +1470,10 @@ parse_frame_header (GstBitReader * br, GstVC1FrameHdr * framehdr,
           GST_DEBUG ("ttfrm %u", pic->ttfrm);
         }
       }
+      else { // 8.3.6.2.1
+        pic->ttmbf = 1;
+        pic->ttfrm = 0;
+      }
       framehdr->transacfrm = get_unary (br, 0, 2);
       READ_UINT8 (br, framehdr->transdctab, 1);
@@ -1494,6 +1506,10 @@ parse_frame_header (GstBitReader * br, GstVC1FrameHdr * framehdr,
           READ_UINT8 (br, pic->ttfrm, 2);
         }
       }
+      else { // 8.3.6.2.1
+        pic->ttmbf = 1;
+        pic->ttfrm = 0;
+      }
       framehdr->transacfrm = get_unary (br, 0, 2);
       READ_UINT8 (br, framehdr->transdctab, 1);
--
1.7.9.5

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20120920/c57aab84/attachment-0001.html>


More information about the gstreamer-devel mailing list