summaryrefslogtreecommitdiff
path: root/libavcodec/zmbvenc.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-02-19 11:16:16 +0100
committerAnton Khirnov <anton@khirnov.net>2012-02-20 07:50:44 +0100
commit8c8c7b5e37a64df105100ef3d0e6722c991faa9b (patch)
tree39e19b46e752a8a2587750a09b3f8164dd7c7cb2 /libavcodec/zmbvenc.c
parent8fb26950ed3c4cd1e175c4439726884926cba022 (diff)
zmbvenc: move header writing to the end of encode_frame().
This makes switching to encode2() simpler, because it allows us to know exactly how large should the output buffer be before we start writing into it.
Diffstat (limited to 'libavcodec/zmbvenc.c')
-rw-r--r--libavcodec/zmbvenc.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/libavcodec/zmbvenc.c b/libavcodec/zmbvenc.c
index ebb6624cb8..6425353ff1 100644
--- a/libavcodec/zmbvenc.c
+++ b/libavcodec/zmbvenc.c
@@ -138,17 +138,6 @@ static int encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_size, void
p->key_frame= keyframe;
chpal = !keyframe && memcmp(p->data[1], c->pal2, 1024);
- fl = (keyframe ? ZMBV_KEYFRAME : 0) | (chpal ? ZMBV_DELTAPAL : 0);
- *buf++ = fl; len++;
- if(keyframe){
- deflateReset(&c->zstream);
- *buf++ = 0; len++; // hi ver
- *buf++ = 1; len++; // lo ver
- *buf++ = 1; len++; // comp
- *buf++ = 4; len++; // format - 8bpp
- *buf++ = ZMBV_BLOCK; len++; // block width
- *buf++ = ZMBV_BLOCK; len++; // block height
- }
palptr = (uint32_t*)p->data[1];
src = p->data[0];
prev = c->prev;
@@ -223,6 +212,9 @@ static int encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_size, void
src += p->linesize[0];
}
+ if (keyframe)
+ deflateReset(&c->zstream);
+
c->zstream.next_in = c->work_buf;
c->zstream.avail_in = work_size;
c->zstream.total_in = 0;
@@ -235,6 +227,16 @@ static int encode_frame(AVCodecContext *avctx, uint8_t *buf, int buf_size, void
return -1;
}
+ fl = (keyframe ? ZMBV_KEYFRAME : 0) | (chpal ? ZMBV_DELTAPAL : 0);
+ *buf++ = fl; len++;
+ if (keyframe) {
+ *buf++ = 0; len++; // hi ver
+ *buf++ = 1; len++; // lo ver
+ *buf++ = 1; len++; // comp
+ *buf++ = 4; len++; // format - 8bpp
+ *buf++ = ZMBV_BLOCK; len++; // block width
+ *buf++ = ZMBV_BLOCK; len++; // block height
+ }
memcpy(buf, c->comp_buf, c->zstream.total_out);
return len + c->zstream.total_out;
}