r34328 - trunk/libmpcodecs/vd_ffmpeg.c
Author: reimar Date: Tue Nov 8 21:24:35 2011 New Revision: 34328 Log: Detect codecs requiring too many references for DR also when they use buffer_hints. Modified: trunk/libmpcodecs/vd_ffmpeg.c Modified: trunk/libmpcodecs/vd_ffmpeg.c ============================================================================== --- trunk/libmpcodecs/vd_ffmpeg.c Mon Nov 7 20:54:49 2011 (r34327) +++ trunk/libmpcodecs/vd_ffmpeg.c Tue Nov 8 21:24:35 2011 (r34328) @@ -540,11 +540,9 @@ static int get_buffer(AVCodecContext *av type = MP_IMGTYPE_TEMP; if (pic->buffer_hints & FF_BUFFER_HINTS_READABLE) flags |= MP_IMGFLAG_READABLE; - if (pic->buffer_hints & FF_BUFFER_HINTS_PRESERVE) { - type = MP_IMGTYPE_IP; - flags |= MP_IMGFLAG_PRESERVE; - } - if (pic->buffer_hints & FF_BUFFER_HINTS_REUSABLE) { + if (pic->buffer_hints & FF_BUFFER_HINTS_PRESERVE || + pic->buffer_hints & FF_BUFFER_HINTS_REUSABLE) { + ctx->ip_count++; type = MP_IMGTYPE_IP; flags |= MP_IMGFLAG_PRESERVE; } @@ -561,6 +559,11 @@ static int get_buffer(AVCodecContext *av flags|= MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE | (ctx->do_slices ? MP_IMGFLAG_DRAW_CALLBACK : 0); } + if(avctx->has_b_frames || ctx->b_count){ + type= MP_IMGTYPE_IPB; + }else{ + type= MP_IMGTYPE_IP; + } } if(init_vo(sh, avctx->pix_fmt) < 0){ @@ -575,7 +578,7 @@ static int get_buffer(AVCodecContext *av if (IMGFMT_IS_HWACCEL(ctx->best_csp)) { type = MP_IMGTYPE_NUMBERED | (0xffff << 16); } else - if (!pic->buffer_hints) { + if (type == MP_IMGTYPE_IP || type == MP_IMGTYPE_IPB) { if(ctx->b_count>1 || ctx->ip_count>2){ mp_msg(MSGT_DECVIDEO, MSGL_WARN, MSGTR_MPCODECS_DRIFailure); @@ -591,11 +594,6 @@ static int get_buffer(AVCodecContext *av return avctx->get_buffer(avctx, pic); } - if(avctx->has_b_frames || ctx->b_count){ - type= MP_IMGTYPE_IPB; - }else{ - type= MP_IMGTYPE_IP; - } mp_msg(MSGT_DECVIDEO, MSGL_DBG2, type== MP_IMGTYPE_IPB ? "using IPB\n" : "using IP\n"); }
participants (1)
-
reimar