mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-23 07:38:16 +00:00
codecparsers: vc1: fix bitplanes decoding.
Fix decoding of DIFF2 or NORM2 bitplanes with an odd number of macroblocks. In particular, account for the first bit that was already parsed so that to avoid a buffer overflow after all pairs are parsed. This fixes SA00040.vc1 conformance test. https://bugzilla.gnome.org/show_bug.cgi?id=692312 Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
This commit is contained in:
parent
1bf59acad8
commit
82200d75ae
1 changed files with 4 additions and 3 deletions
|
@ -435,7 +435,7 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
|
|||
const guint height = seqhdr->mb_height;
|
||||
const guint stride = seqhdr->mb_stride;
|
||||
guint imode, invert, invert_mask;
|
||||
guint x, y, v;
|
||||
guint x, y, v, o;
|
||||
guint8 *pdata = data;
|
||||
|
||||
*is_raw = FALSE;
|
||||
|
@ -464,7 +464,8 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
|
|||
GST_DEBUG ("Parsing IMODE_DIFF2 or IMODE_NORM2 biplane");
|
||||
|
||||
x = 0;
|
||||
if ((height * width) & 1) {
|
||||
o = (height * width) & 1;
|
||||
if (o) {
|
||||
GET_BITS (br, 1, &v);
|
||||
if (pdata) {
|
||||
*pdata++ = (v ^ invert_mask) & 1;
|
||||
|
@ -475,7 +476,7 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
|
|||
}
|
||||
}
|
||||
|
||||
for (y = 0; y < height * width; y += 2) {
|
||||
for (y = o; y < height * width; y += 2) {
|
||||
if (!decode_vlc (br, &v, vc1_norm2_vlc_table,
|
||||
G_N_ELEMENTS (vc1_norm2_vlc_table)))
|
||||
goto failed;
|
||||
|
|
Loading…
Reference in a new issue