]> git.webhop.me Git - bs-cst-neutrino-hd.git/commitdiff
ffmpeg.mk: add patche for 4.1.3
authorMarkham <markham001@gmx.de>
Sun, 30 Jun 2019 12:23:50 +0000 (14:23 +0200)
committerMarkham <markham001@gmx.de>
Sun, 30 Jun 2019 12:23:50 +0000 (14:23 +0200)
archive-patches/ffmpeg/ffmpeg-4.1.3-FFmpeg-devel-amfenc-Add-support-for-pict_type-field.patch [new file with mode: 0644]
archive-patches/ffmpeg/ffmpeg-4.1.3-corrupt-h264-frames.patch [new file with mode: 0644]
archive-patches/ffmpeg/ffmpeg-4.1.3-mpeg-quarter-sample.patch [new file with mode: 0644]
make/ffmpeg.mk

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 (file)
index 0000000..77f1375
--- /dev/null
@@ -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 (file)
index 0000000..acc3854
--- /dev/null
@@ -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 (file)
index 0000000..aa74c54
--- /dev/null
@@ -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;
index 31ce7b96eb6d65a68e1cdcf6c11a9d3bf4fbbb55..2ce647afbfd82b108a75c38f9e0cc5152c5853b5 100644 (file)
@@ -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)