37 #define ZMBV_KEYFRAME 1
38 #define ZMBV_DELTAPAL 2
84 int d, dx, dy, bw2, bh2;
93 for (i = 0; i < 768; i++)
98 src += ((c->
bx * c->
by * 2 + 3) & ~3);
101 for (y = 0; y < c->
height; y += c->
bh) {
103 for (x = 0; x < c->
width; x += c->
bw) {
107 dx = mvec[
block] >> 1;
108 dy = mvec[block + 1] >> 1;
115 tprev = prev + x + dx + dy * c->
width;
118 for (j = 0; j < bh2; j++) {
119 if (my + j < 0 || my + j >= c->
height) {
122 for (i = 0; i < bw2; i++) {
123 if (mx + i < 0 || mx + i >= c->
width)
135 for (j = 0; j < bh2; j++) {
136 for (i = 0; i < bw2; i++)
158 uint16_t *output, *
prev;
161 int d, dx, dy, bw2, bh2;
166 output = (uint16_t*)c->
cur;
167 prev = (uint16_t*)c->
prev;
170 src += ((c->
bx * c->
by * 2 + 3) & ~3);
173 for (y = 0; y < c->
height; y += c->
bh) {
175 for (x = 0; x < c->
width; x += c->
bw) {
176 uint16_t *
out, *tprev;
179 dx = mvec[
block] >> 1;
180 dy = mvec[block + 1] >> 1;
187 tprev = prev + x + dx + dy * c->
width;
190 for (j = 0; j < bh2; j++) {
191 if (my + j < 0 || my + j >= c->
height) {
192 memset(out, 0, bw2 * 2);
194 for (i = 0; i < bw2; i++) {
195 if (mx + i < 0 || mx + i >= c->
width)
207 for (j = 0; j < bh2; j++){
208 for (i = 0; i < bw2; i++) {
209 out[i] ^= *((uint16_t*)src);
225 #ifdef ZMBV_ENABLE_24BPP
236 int d, dx, dy, bw2, bh2;
245 stride = c->
width * 3;
247 src += ((c->
bx * c->
by * 2 + 3) & ~3);
250 for (y = 0; y < c->
height; y += c->
bh) {
252 for (x = 0; x < c->
width; x += c->
bw) {
256 dx = mvec[
block] >> 1;
257 dy = mvec[block + 1] >> 1;
263 out = output + x * 3;
264 tprev = prev + (x + dx) * 3 + dy * stride;
267 for (j = 0; j < bh2; j++) {
268 if (my + j < 0 || my + j >= c->
height) {
269 memset(out, 0, bw2 * 3);
271 for (i = 0; i < bw2; i++){
272 if (mx + i < 0 || mx + i >= c->
width) {
277 out[i * 3 + 0] = tprev[i * 3 + 0];
278 out[i * 3 + 1] = tprev[i * 3 + 1];
279 out[i * 3 + 2] = tprev[i * 3 + 2];
288 out = output + x * 3;
289 for (j = 0; j < bh2; j++) {
290 for (i = 0; i < bw2; i++) {
291 out[i * 3 + 0] ^= *src++;
292 out[i * 3 + 1] ^= *src++;
293 out[i * 3 + 2] ^= *src++;
299 output += stride * c->
bh;
300 prev += stride * c->
bh;
307 #endif //ZMBV_ENABLE_24BPP
316 uint32_t *output, *
prev;
319 int d, dx, dy, bw2, bh2;
324 output = (uint32_t*)c->
cur;
325 prev = (uint32_t*)c->
prev;
328 src += ((c->
bx * c->
by * 2 + 3) & ~3);
331 for (y = 0; y < c->
height; y += c->
bh) {
333 for (x = 0; x < c->
width; x += c->
bw) {
334 uint32_t *
out, *tprev;
337 dx = mvec[
block] >> 1;
338 dy = mvec[block + 1] >> 1;
345 tprev = prev + x + dx + dy * c->
width;
348 for (j = 0; j < bh2; j++) {
349 if (my + j < 0 || my + j >= c->
height) {
350 memset(out, 0, bw2 * 4);
352 for (i = 0; i < bw2; i++){
353 if (mx + i < 0 || mx + i >= c->
width)
365 for (j = 0; j < bh2; j++){
366 for (i = 0; i < bw2; i++) {
367 out[i] ^= *((uint32_t *) src);
392 memcpy(c->
pal, src, 768);
404 int buf_size = avpkt->
size;
408 int hi_ver, lo_ver, ret;
432 "Flags=%X ver=%i.%i comp=%i fmt=%i blk=%ix%i\n",
434 if (hi_ver != 0 || lo_ver != 1) {
438 if (c->
bw == 0 || c->
bh == 0) {
459 #ifdef ZMBV_ENABLE_24BPP
465 #endif //ZMBV_ENABLE_24BPP
478 zret = inflateReset(&c->
zstream);
513 zret = inflate(&c->
zstream, Z_SYNC_FLUSH);
514 if (zret != Z_OK && zret != Z_STREAM_END) {
536 out = frame->
data[0];
540 for (j = 0; j < c->
height; j++) {
541 for (i = 0; i < c->
width; i++) {
542 out[i * 3 + 0] = c->
pal[(*src) * 3 + 0];
543 out[i * 3 + 1] = c->
pal[(*src) * 3 + 1];
544 out[i * 3 + 2] = c->
pal[(*src) * 3 + 2];
551 for (j = 0; j < c->
height; j++) {
552 for (i = 0; i < c->
width; i++) {
555 out[i * 3 + 0] = (tmp & 0x7C00) >> 7;
556 out[i * 3 + 1] = (tmp & 0x03E0) >> 2;
557 out[i * 3 + 2] = (tmp & 0x001F) << 3;
563 for (j = 0; j < c->
height; j++) {
564 for (i = 0; i < c->
width; i++) {
567 out[i * 3 + 0] = (tmp & 0xF800) >> 8;
568 out[i * 3 + 1] = (tmp & 0x07E0) >> 3;
569 out[i * 3 + 2] = (tmp & 0x001F) << 3;
574 #ifdef ZMBV_ENABLE_24BPP
576 for (j = 0; j < c->
height; j++) {
577 memcpy(out, src, c->
width * 3);
582 #endif //ZMBV_ENABLE_24BPP
584 for (j = 0; j < c->
height; j++) {
585 for (i = 0; i < c->
width; i++) {
617 memset(&c->
zstream, 0,
sizeof(z_stream));
626 "Can't allocate decompression buffer.\n");
634 zret = inflateInit(&c->
zstream);