summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <thibault.saunier@collabora.com>2011-10-04 17:39:42 -0300
committerThibault Saunier <thibault.saunier@collabora.com>2011-10-05 16:43:16 -0300
commit8710de5412985a0a735443e94691c42a12523bae (patch)
treed1a35753edeb89cc41061d9e20ab0a6862babb73
parent1cde2c6e623d147d057b9d006b4c35353810a4c9 (diff)
codecparsers: VC1: Implement bitplanes diff operator
-rw-r--r--gst-libs/gst/codecparsers/gstvc1parser.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c
index 8b123cdf1..1da4b1879 100644
--- a/gst-libs/gst/codecparsers/gstvc1parser.c
+++ b/gst-libs/gst/codecparsers/gstvc1parser.c
@@ -547,6 +547,30 @@ bitplane_decoding (GstBitReader * br, guint8 * data,
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[x] ^= invert;
+ else
+ pdata[x] ^= pdata[stride + x - 1];
+ }
+ pdata += stride;
+ }
+ }
+
return TRUE;
failed: