avcodec/j2kenc: Properly flush the end of the truncated AC stream
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -612,7 +612,7 @@ static void encode_cblk(Jpeg2000EncoderContext *s, Jpeg2000T1Context *t1, Jpeg20
|
||||
break;
|
||||
}
|
||||
|
||||
cblk->passes[passno].rate = 3 + ff_mqc_length(&t1->mqc);
|
||||
cblk->passes[passno].rate = ff_mqc_flush_to(&t1->mqc, cblk->passes[passno].flushed, &cblk->passes[passno].flushed_len);
|
||||
wmsedec += (int64_t)nmsedec << (2*bpno);
|
||||
cblk->passes[passno].disto = wmsedec;
|
||||
|
||||
@@ -624,8 +624,7 @@ static void encode_cblk(Jpeg2000EncoderContext *s, Jpeg2000T1Context *t1, Jpeg20
|
||||
cblk->npasses = passno;
|
||||
cblk->ninclpasses = passno;
|
||||
|
||||
// TODO: optional flush on each pass
|
||||
cblk->passes[passno-1].rate = ff_mqc_flush(&t1->mqc);
|
||||
cblk->passes[passno-1].rate = ff_mqc_flush_to(&t1->mqc, cblk->passes[passno-1].flushed, &cblk->passes[passno-1].flushed_len);
|
||||
}
|
||||
|
||||
/* tier-2 routines: */
|
||||
@@ -732,7 +731,10 @@ static int encode_packet(Jpeg2000EncoderContext *s, Jpeg2000ResLevel *rlevel, in
|
||||
if (cblk->ninclpasses){
|
||||
if (s->buf_end - s->buf < cblk->passes[cblk->ninclpasses-1].rate)
|
||||
return -1;
|
||||
bytestream_put_buffer(&s->buf, cblk->data, cblk->passes[cblk->ninclpasses-1].rate);
|
||||
bytestream_put_buffer(&s->buf, cblk->data, cblk->passes[cblk->ninclpasses-1].rate
|
||||
- cblk->passes[cblk->ninclpasses-1].flushed_len);
|
||||
bytestream_put_buffer(&s->buf, cblk->passes[cblk->ninclpasses-1].flushed,
|
||||
cblk->passes[cblk->ninclpasses-1].flushed_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user