[FFmpeg-devel] [PATCH 05/13] lavc/videotoolboxenc: Fix AVCodecContext.has_b_frames usage.
Hendrik Leppkes
h.leppkes at gmail.com
Sun Apr 10 09:51:48 CEST 2016
On Sun, Apr 10, 2016 at 5:50 AM, Rick Kern <kernrj at gmail.com> wrote:
> Now set by the encoder, not used as an input parameter.
>
> Signed-off-by: Rick Kern <kernrj at gmail.com>
> ---
> libavcodec/videotoolboxenc.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c
> index 6586ca7..8352ba9 100644
> --- a/libavcodec/videotoolboxenc.c
> +++ b/libavcodec/videotoolboxenc.c
> @@ -617,6 +617,7 @@ static av_cold int vtenc_init(AVCodecContext *avctx)
> CFStringRef profile_level;
> SInt32 bit_rate = avctx->bit_rate;
> CFNumberRef bit_rate_num;
> + CFBooleanRef has_b_frames_cfbool;
> int status;
>
> codec_type = get_cm_codec_type(avctx->codec_id);
> @@ -625,7 +626,7 @@ static av_cold int vtenc_init(AVCodecContext *avctx)
> return AVERROR(EINVAL);
> }
>
> - vtctx->has_b_frames = avctx->has_b_frames || avctx->max_b_frames > 0;
> + vtctx->has_b_frames = avctx->max_b_frames > 0;
> if(vtctx->has_b_frames && vtctx->profile == H264_PROF_BASELINE){
> av_log(avctx, AV_LOG_WARNING, "Cannot use B-frames with baseline profile. Output will not contain B-frames.\n");
> vtctx->has_b_frames = false;
> @@ -759,6 +760,18 @@ static av_cold int vtenc_init(AVCodecContext *avctx)
> pthread_cond_init(&vtctx->cv_sample_sent, NULL);
> vtctx->dts_delta = vtctx->has_b_frames ? -1 : 0;
>
> + status = VTSessionCopyProperty(vtctx->session,
> + kVTCompressionPropertyKey_AllowFrameReordering,
> + kCFAllocatorDefault,
> + &has_b_frames_cfbool);
> +
> + if (!status) {
> + //Some devices don't output B-frames for main profile, even if requested.
> + vtctx->has_b_frames = CFBooleanGetValue(has_b_frames_cfbool);
> + CFRelease(has_b_frames_cfbool);
> + }
> + avctx->has_b_frames = vtctx->has_b_frames;
> +
> return 0;
> }
>
LGTM, max_b_frames is the appropriate property to check if b frames
are requested.
- Hendrik
More information about the ffmpeg-devel
mailing list