From: Markham Date: Sun, 30 Jun 2019 12:23:50 +0000 (+0200) Subject: ffmpeg.mk: add patche for 4.1.3 X-Git-Url: https://git.webhop.me/?a=commitdiff_plain;h=01470abaa236c8edd069f7e4d79cecf64f371995;p=bs-cst-neutrino-hd.git ffmpeg.mk: add patche for 4.1.3 --- diff --git a/archive-patches/ffmpeg/ffmpeg-4.1.3-FFmpeg-devel-amfenc-Add-support-for-pict_type-field.patch b/archive-patches/ffmpeg/ffmpeg-4.1.3-FFmpeg-devel-amfenc-Add-support-for-pict_type-field.patch new file mode 100644 index 0000000..77f1375 --- /dev/null +++ b/archive-patches/ffmpeg/ffmpeg-4.1.3-FFmpeg-devel-amfenc-Add-support-for-pict_type-field.patch @@ -0,0 +1,55 @@ +--- 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 == AV_CODEC_ID_H264) { ++ 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) { ++ switch (frame->pict_type) { ++ case AV_PICTURE_TYPE_I: ++ AMF_ASSIGN_PROPERTY_INT64(res, surface, AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_I); ++ break; ++ case AV_PICTURE_TYPE_P: ++ AMF_ASSIGN_PROPERTY_INT64(res, surface, AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_P); ++ break; ++ case AV_PICTURE_TYPE_B: ++ av_log(ctx, AV_LOG_WARNING, "Ignoring B-Frame, unsupported by AMD AMF H.265 Encoder."); ++ break; ++ case AV_PICTURE_TYPE_S: ++ AMF_ASSIGN_PROPERTY_INT64(res, surface, AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_SKIP); ++ break; ++ default: ++ AMF_ASSIGN_PROPERTY_INT64(res, surface, AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE); ++ break; ++ } ++ // Keyframe overrides previous assignment. ++ if (frame->key_frame) { ++ AMF_ASSIGN_PROPERTY_INT64(res, surface, AMF_VIDEO_ENCODER_HEVC_FORCE_PICTURE_TYPE, AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_IDR); ++ } ++ } + + // submit surface + res = ctx->encoder->pVtbl->SubmitInput(ctx->encoder, (AMFData*)surface); diff --git a/archive-patches/ffmpeg/ffmpeg-4.1.3-corrupt-h264-frames.patch b/archive-patches/ffmpeg/ffmpeg-4.1.3-corrupt-h264-frames.patch new file mode 100644 index 0000000..acc3854 --- /dev/null +++ b/archive-patches/ffmpeg/ffmpeg-4.1.3-corrupt-h264-frames.patch @@ -0,0 +1,14 @@ +--- a/libavcodec/h264_slice.c ++++ b/libavcodec/h264_slice.c +@@ -1463,6 +1463,11 @@ + h->avctx->has_b_frames = sps->num_reorder_frames; + } + ++ if (sps && sps->bitstream_restriction_flag && ++ h->avctx->has_b_frames < sps->num_reorder_frames) { ++ h->avctx->has_b_frames = FFMAX(h->avctx->has_b_frames, sps->num_reorder_frames); ++ } ++ + last_pic_droppable = h->droppable; + last_pic_structure = h->picture_structure; + h->droppable = (nal->ref_idc == 0); diff --git a/archive-patches/ffmpeg/ffmpeg-4.1.3-mpeg-quarter-sample.patch b/archive-patches/ffmpeg/ffmpeg-4.1.3-mpeg-quarter-sample.patch new file mode 100644 index 0000000..aa74c54 --- /dev/null +++ b/archive-patches/ffmpeg/ffmpeg-4.1.3-mpeg-quarter-sample.patch @@ -0,0 +1,10 @@ +--- a/libavcodec/mpegvideo.c ++++ b/libavcodec/mpegvideo.c +@@ -538,6 +538,8 @@ + s->avctx->width = s1->avctx->width; + s->avctx->height = s1->avctx->height; + ++ s->quarter_sample = s1->quarter_sample; ++ + s->coded_picture_number = s1->coded_picture_number; + s->picture_number = s1->picture_number; diff --git a/make/ffmpeg.mk b/make/ffmpeg.mk index 31ce7b9..2ce647a 100644 --- a/make/ffmpeg.mk +++ b/make/ffmpeg.mk @@ -447,7 +447,10 @@ FFMPEG_PATCHES = \ ffmpeg-$(FFMPEG_VER)-fix_edit_list_parsing.patch \ ffmpeg-$(FFMPEG_VER)-fix_mpegts.patch \ ffmpeg-$(FFMPEG_VER)-allow_to_choose_rtmp_impl_at_runtime.patch \ - ffmpeg-$(FFMPEG_VER)-hls_replace_key_uri.patch + ffmpeg-$(FFMPEG_VER)-hls_replace_key_uri.patch \ + ffmpeg-$(FFMPEG_VER)-corrupt-h264-frames.patch \ + ffmpeg-$(FFMPEG_VER)-FFmpeg-devel-amfenc-Add-support-for-pict_type-field.patch \ + ffmpeg-$(FFMPEG_VER)-mpeg-quarter-sample.patch ffmpeg-armbox: $(ARCHIVE)/ffmpeg-$(FFMPEG_VER).tar.xz | $(TARGETPREFIX) $(START_BUILD)