diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-02-19 11:16:16 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-02-20 07:50:44 +0100 |
commit | 8c8c7b5e37a64df105100ef3d0e6722c991faa9b (patch) | |
tree | 39e19b46e752a8a2587750a09b3f8164dd7c7cb2 | |
parent | 8fb26950ed3c4cd1e175c4439726884926cba022 (diff) | |
download | ffmpeg-8c8c7b5e37a64df105100ef3d0e6722c991faa9b.tar.gz |
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.
-rw-r--r-- | libavcodec/zmbvenc.c | 24 |
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; } |