2019-01-14 20:02 GMT+01:00, Michael Fabian 'Xaymar' Dirks <i...@xaymar.com>: > Adds support for the pict_type field in AVFrame to amf_h264 and amf_h265 > simultaneously. This field is needed in cases where the application wishes > to override the frame type with another one, such as forcefully inserting a > key frame for chapter markers or similar. > > Additionally this abuses AV_PICTURE_TYPE_S for marking Skip frames, a > special type of frame in AVC, SVC and HEVC which is a flag for the decoder > to repeat the last frame. > > Signed-off-by: Michael Fabian 'Xaymar' Dirks <i...@xaymar.com> > --- > libavcodec/amfenc.c | 46 +++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > > diff --git a/libavcodec/amfenc.c b/libavcodec/amfenc.c > index 384d8efc92..eb4b65e4f2 100644 > --- a/libavcodec/amfenc.c > +++ b/libavcodec/amfenc.c > @@ -680,6 +680,52 @@ int ff_amf_send_frame(AVCodecContext *avctx, const > AVFrame *frame) > break; > } > > + // Override Picture Type for Frame > + if (avctx->codec->id) { > + switch (frame->pict_type) { > + case AV_PICTURE_TYPE_I: > + AMF_ASSIGN_PROPERTY_INT64(res, surface, > AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_PICTURE_TYPE_I); > + break; > + case AV_PICTURE_TYPE_P: > + AMF_ASSIGN_PROPERTY_INT64(res, surface, > AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_PICTURE_TYPE_P); > + break; > + case AV_PICTURE_TYPE_B: > + AMF_ASSIGN_PROPERTY_INT64(res, surface, > AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_PICTURE_TYPE_B); > + break; > + case AV_PICTURE_TYPE_S: > + AMF_ASSIGN_PROPERTY_INT64(res, surface, > AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_PICTURE_TYPE_SKIP); > + break; > + default: > + AMF_ASSIGN_PROPERTY_INT64(res, surface, > AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_PICTURE_TYPE_NONE); > + break; > + } > + // Keyframe overrides previous assignment. > + if (frame->key_frame) { > + AMF_ASSIGN_PROPERTY_INT64(res, surface, > AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_PICTURE_TYPE_IDR); > + }
> + } else if (avctx->codec->id == AV_CODEC_ID_HEVC) { How can this be reached? (Assuming you tested your patch, is the block unneeded?) Carl Eugen _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel