mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-14 03:04:53 +00:00
fix corner case when qscale 1 bits < frame bits but max bits with worst padding > frame bits
Originally committed as revision 11131 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
79cf2c7e86
commit
78532b052d
@ -671,7 +671,7 @@ static int dnxhd_find_qscale(DNXHDEncContext *ctx)
|
||||
// ctx->m.avctx->frame_number, qscale, bits, ctx->frame_bits, last_higher, last_lower);
|
||||
if (bits < ctx->frame_bits) {
|
||||
if (qscale == 1)
|
||||
break;
|
||||
return 1;
|
||||
if (last_higher == qscale - 1) {
|
||||
qscale = last_higher;
|
||||
break;
|
||||
@ -710,8 +710,8 @@ static int dnxhd_rc_cmp(const void *a, const void *b)
|
||||
static int dnxhd_encode_variance(AVCodecContext *avctx, DNXHDEncContext *ctx)
|
||||
{
|
||||
int max_bits = 0;
|
||||
int x, y;
|
||||
if (dnxhd_find_qscale(ctx) < 0)
|
||||
int ret, x, y;
|
||||
if ((ret = dnxhd_find_qscale(ctx)) < 0)
|
||||
return -1;
|
||||
for (y = 0; y < ctx->m.mb_height; y++) {
|
||||
for (x = 0; x < ctx->m.mb_width; x++) {
|
||||
@ -730,7 +730,7 @@ static int dnxhd_encode_variance(AVCodecContext *avctx, DNXHDEncContext *ctx)
|
||||
}
|
||||
max_bits += 31; //worst padding
|
||||
}
|
||||
if (max_bits > ctx->frame_bits) {
|
||||
if (!ret) {
|
||||
if (RC_VARIANCE)
|
||||
avctx->execute(avctx, dnxhd_mb_var_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);
|
||||
qsort(ctx->mb_cmp, ctx->m.mb_num, sizeof(RCEntry), dnxhd_rc_cmp);
|
||||
|
Loading…
Reference in New Issue
Block a user