On Sun, Apr 10, 2016 at 5:50 AM, Rick Kern <ker...@gmail.com> wrote: > Now set by the encoder, not used as an input parameter. > > Signed-off-by: Rick Kern <ker...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel