diff options
author | Thibault Saunier <thibault.saunier@collabora.com> | 2011-10-04 17:39:42 -0300 |
---|---|---|
committer | Thibault Saunier <thibault.saunier@collabora.com> | 2011-10-05 16:43:16 -0300 |
commit | 8710de5412985a0a735443e94691c42a12523bae (patch) | |
tree | d1a35753edeb89cc41061d9e20ab0a6862babb73 | |
parent | 1cde2c6e623d147d057b9d006b4c35353810a4c9 (diff) |
codecparsers: VC1: Implement bitplanes diff operator
-rw-r--r-- | gst-libs/gst/codecparsers/gstvc1parser.c | 24 |
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: |