mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
codecparsers: VC1: Implement bitplanes diff operator
This commit is contained in:
parent
8090627581
commit
ce71fdae1b
1 changed files with 26 additions and 2 deletions
|
@ -485,7 +485,7 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
|
||||||
|
|
||||||
GST_DEBUG ("Parsing IMODE_DIFF6 or IMODE_NORM6 biplane");
|
GST_DEBUG ("Parsing IMODE_DIFF6 or IMODE_NORM6 biplane");
|
||||||
|
|
||||||
if (!(height % 3) && (width % 3)) { /* decode 2x3 "vertical" tiles */
|
if (!(height % 3) && (width % 3)) { /* decode 2x3 "vertical" tiles */
|
||||||
for (y = 0; y < height; y += 3) {
|
for (y = 0; y < height; y += 3) {
|
||||||
for (x = width & 1; x < width; x += 2) {
|
for (x = width & 1; x < width; x += 2) {
|
||||||
if (!decode_vlc (br, &v, vc1_norm6_vlc_table,
|
if (!decode_vlc (br, &v, vc1_norm6_vlc_table,
|
||||||
|
@ -508,7 +508,7 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
|
||||||
|
|
||||||
x = width & 1;
|
x = width & 1;
|
||||||
y = 0;
|
y = 0;
|
||||||
} else { /* decode 3x2 "horizontal" tiles */
|
} else { /* decode 3x2 "horizontal" tiles */
|
||||||
|
|
||||||
if (pdata)
|
if (pdata)
|
||||||
pdata += (height & 1) * width;
|
pdata += (height & 1) * width;
|
||||||
|
@ -564,6 +564,30 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!data)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
/* Applying diff operator */
|
||||||
|
if (imode == IMODE_DIFF2 || imode == IMODE_DIFF6) {
|
||||||
|
pdata = data;
|
||||||
|
pdata[0] ^= invert;
|
||||||
|
|
||||||
|
for (x = 1; x < width; x++)
|
||||||
|
pdata[x] ^= pdata[x - 1];
|
||||||
|
|
||||||
|
for (y = 1; y < height; y++) {
|
||||||
|
pdata[stride] ^= pdata[0];
|
||||||
|
|
||||||
|
for (x = 1; x < width; x++) {
|
||||||
|
if (pdata[stride + x - 1] != pdata[x])
|
||||||
|
pdata[stride + x] ^= invert;
|
||||||
|
else
|
||||||
|
pdata[stride + x] ^= pdata[stride + x - 1];
|
||||||
|
}
|
||||||
|
pdata += stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
|
|
Loading…
Reference in a new issue