summaryrefslogtreecommitdiffstats
path: root/contrib/ffmpeg
diff options
context:
space:
mode:
authorBradley Sepos <[email protected]>2018-11-20 07:25:36 -0500
committerBradley Sepos <[email protected]>2018-11-26 17:46:43 -0500
commitda1f90d8427d444386b269a3ae21a7420e9d81cb (patch)
treedb2bb8f5b3a81c50113327093a5f58386526c3c7 /contrib/ffmpeg
parent58bccb7aed07ec9b866355bc2932c0ab1bbc5e1d (diff)
contrib: Update to FFmpeg 4.1.0.
Includes additional patches applied to the release branch shortly after tagging, including a patch that fixes #1595.
Diffstat (limited to 'contrib/ffmpeg')
-rw-r--r--contrib/ffmpeg/A03-mp4-pcm.patch64
-rw-r--r--contrib/ffmpeg/A05-hevc-nonref.patch35
-rw-r--r--contrib/ffmpeg/A06-cbs-av1-field-storage.patch31
-rw-r--r--contrib/ffmpeg/A07-cbs-av1-sint-parse.patch89
-rw-r--r--contrib/ffmpeg/A08-mpeg-er-clear-chroma.patch29
-rw-r--r--contrib/ffmpeg/A09-mov-eac3.patch75
-rw-r--r--contrib/ffmpeg/module.defs6
7 files changed, 262 insertions, 67 deletions
diff --git a/contrib/ffmpeg/A03-mp4-pcm.patch b/contrib/ffmpeg/A03-mp4-pcm.patch
deleted file mode 100644
index d9f4932f8..000000000
--- a/contrib/ffmpeg/A03-mp4-pcm.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From d2047c14c0789ce3059b840472fb96fd8bd854a9 Mon Sep 17 00:00:00 2001
-From: Justin Ruggles <[email protected]>
-Date: Wed, 5 Sep 2018 17:54:57 -0400
-Subject: [PATCH 1/2] Use QT format for audio sample descriptors depending on
- stsd version.
-
-ISOBMFF does not allow AudioSampleEntryV1 in stsd version 0, so
-assume the descriptor format is QTFF SoundDescriptionV1. ISOBMFF does
-not define a version 2.
-
-This fixes audio decoding for some MP4 files generated with Apple
-tools. The additional fields present in SoundDescriptionV1/V2 need to
-be read in order to correctly read additional boxes that contain
-information required for decoding the stream.
-
-Fixes #7376.
-
-Also see: https://github.com/HandBrake/HandBrake/issues/1555
-
-Signed-off-by: Derek Buitenhuis <[email protected]>
----
- libavformat/isom.h | 1 +
- libavformat/mov.c | 6 +++---
- 2 files changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/libavformat/isom.h b/libavformat/isom.h
-index f3a7a8633d..e629663949 100644
---- a/libavformat/isom.h
-+++ b/libavformat/isom.h
-@@ -218,6 +218,7 @@ typedef struct MOVStreamContext {
- int *extradata_size;
- int last_stsd_index;
- int stsd_count;
-+ int stsd_version;
-
- int32_t *display_matrix;
- AVStereo3D *stereo3d;
-diff --git a/libavformat/mov.c b/libavformat/mov.c
-index 02c8ec66ed..ec57a05803 100644
---- a/libavformat/mov.c
-+++ b/libavformat/mov.c
-@@ -2122,8 +2122,8 @@ static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb,
- // Read QT version 1 fields. In version 0 these do not exist.
- av_log(c->fc, AV_LOG_TRACE, "version =%d, isom =%d\n", version, c->isom);
- if (!c->isom ||
-- (compatible_brands && strstr(compatible_brands->value, "qt "))) {
--
-+ (compatible_brands && strstr(compatible_brands->value, "qt ")) ||
-+ (sc->stsd_version == 0 && version > 0)) {
- if (version == 1) {
- sc->samples_per_frame = avio_rb32(pb);
- avio_rb32(pb); /* bytes per packet */
-@@ -2554,7 +2554,7 @@ static int mov_read_stsd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
- st = c->fc->streams[c->fc->nb_streams - 1];
- sc = st->priv_data;
-
-- avio_r8(pb); /* version */
-+ sc->stsd_version = avio_r8(pb);
- avio_rb24(pb); /* flags */
- entries = avio_rb32(pb);
-
---
-2.17.1
-
diff --git a/contrib/ffmpeg/A05-hevc-nonref.patch b/contrib/ffmpeg/A05-hevc-nonref.patch
new file mode 100644
index 000000000..8f1c7f21c
--- /dev/null
+++ b/contrib/ffmpeg/A05-hevc-nonref.patch
@@ -0,0 +1,35 @@
+From 11dff170ef79d26d1de2bcd13b603a6c4c5c9815 Mon Sep 17 00:00:00 2001
+From: Mark Wu <[email protected]>
+Date: Tue, 23 Oct 2018 12:49:08 +0800
+Subject: [PATCH] avcodec/hevcdec: fix non-ref frame judgement
+
+After inspecting the source code of x265, mpv and ffmpeg, I've found that
+ffmpeg mistakenly regards EVC_NAL_BLA_N_LP and HEVC_NAL_IDR_N_LP as non-
+reference frames, which are acutally reference frames according to the
+specification in x265, and drops them.
+
+This patch should address the problem. I have tested it with mpv.
+
+Signed-off-by: Mark Wu <[email protected]>
+Signed-off-by: James Almer <[email protected]>
+(cherry picked from commit 10bc4c3a7df7bb26303067b97311b7eeedfd453e)
+---
+ libavcodec/hevcdec.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/libavcodec/hevcdec.h b/libavcodec/hevcdec.h
+index f0f588f..dd951aa 100644
+--- a/libavcodec/hevcdec.h
++++ b/libavcodec/hevcdec.h
+@@ -559,8 +559,6 @@ static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
+ case HEVC_NAL_VCL_N10:
+ case HEVC_NAL_VCL_N12:
+ case HEVC_NAL_VCL_N14:
+- case HEVC_NAL_BLA_N_LP:
+- case HEVC_NAL_IDR_N_LP:
+ return 1;
+ break;
+ default: break;
+--
+1.9.1
+
diff --git a/contrib/ffmpeg/A06-cbs-av1-field-storage.patch b/contrib/ffmpeg/A06-cbs-av1-field-storage.patch
new file mode 100644
index 000000000..55503ff7a
--- /dev/null
+++ b/contrib/ffmpeg/A06-cbs-av1-field-storage.patch
@@ -0,0 +1,31 @@
+From 49bc641e89f7c89648f28feafa2daa3756ba9c7d Mon Sep 17 00:00:00 2001
+From: James Almer <[email protected]>
+Date: Sat, 10 Nov 2018 22:51:18 -0300
+Subject: [PATCH] avcodec/cbs_av1: fix storage size for segmentation_params
+ feature_value fields
+
+The valid range is -255 to 255.
+
+Reviewed-by: Mark Thompson <[email protected]>
+Signed-off-by: James Almer <[email protected]>
+(cherry picked from commit 79831f4531d98c3c1eab96c10f1135d08abef5f3)
+---
+ libavcodec/cbs_av1.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h
+index f662265..84622ed 100644
+--- a/libavcodec/cbs_av1.h
++++ b/libavcodec/cbs_av1.h
+@@ -210,7 +210,7 @@ typedef struct AV1RawFrameHeader {
+ uint8_t segmentation_temporal_update;
+ uint8_t segmentation_update_data;
+ uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
+- uint8_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
++ int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
+
+ uint8_t delta_q_present;
+ uint8_t delta_q_res;
+--
+1.9.1
+
diff --git a/contrib/ffmpeg/A07-cbs-av1-sint-parse.patch b/contrib/ffmpeg/A07-cbs-av1-sint-parse.patch
new file mode 100644
index 000000000..ce09f2503
--- /dev/null
+++ b/contrib/ffmpeg/A07-cbs-av1-sint-parse.patch
@@ -0,0 +1,89 @@
+From a9e9303f26597b2a166374cd46b00adc0401e634 Mon Sep 17 00:00:00 2001
+From: James Almer <[email protected]>
+Date: Sat, 10 Nov 2018 22:52:12 -0300
+Subject: [PATCH] avcodec/cbs_av1: fix parsing signed integer values
+
+Reviewed-by: Mark Thompson <[email protected]>
+Signed-off-by: James Almer <[email protected]>
+(cherry picked from commit f0f2832a5ce93bad9b1d29f99df6bda2380fc41c)
+---
+ libavcodec/cbs_av1.c | 30 +++++++++---------------------
+ 1 file changed, 9 insertions(+), 21 deletions(-)
+
+diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c
+index ff32a6f..ed5211b 100644
+--- a/libavcodec/cbs_av1.c
++++ b/libavcodec/cbs_av1.c
+@@ -189,30 +189,26 @@ static int cbs_av1_read_su(CodedBitstreamContext *ctx, GetBitContext *gbc,
+ int width, const char *name,
+ const int *subscripts, int32_t *write_to)
+ {
+- uint32_t magnitude;
+- int position, sign;
++ int position;
+ int32_t value;
+
+ if (ctx->trace_enable)
+ position = get_bits_count(gbc);
+
+- if (get_bits_left(gbc) < width + 1) {
++ if (get_bits_left(gbc) < width) {
+ av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid signed value at "
+ "%s: bitstream ended.\n", name);
+ return AVERROR_INVALIDDATA;
+ }
+
+- magnitude = get_bits(gbc, width);
+- sign = get_bits1(gbc);
+- value = sign ? -(int32_t)magnitude : magnitude;
++ value = get_sbits(gbc, width);
+
+ if (ctx->trace_enable) {
+ char bits[33];
+ int i;
+ for (i = 0; i < width; i++)
+- bits[i] = magnitude >> (width - i - 1) & 1 ? '1' : '0';
+- bits[i] = sign ? '1' : '0';
+- bits[i + 1] = 0;
++ bits[i] = value & (1 << (width - i - 1)) ? '1' : '0';
++ bits[i] = 0;
+
+ ff_cbs_trace_syntax_element(ctx, position,
+ name, subscripts, bits, value);
+@@ -226,29 +222,21 @@ static int cbs_av1_write_su(CodedBitstreamContext *ctx, PutBitContext *pbc,
+ int width, const char *name,
+ const int *subscripts, int32_t value)
+ {
+- uint32_t magnitude;
+- int sign;
+-
+- if (put_bits_left(pbc) < width + 1)
++ if (put_bits_left(pbc) < width)
+ return AVERROR(ENOSPC);
+
+- sign = value < 0;
+- magnitude = sign ? -value : value;
+-
+ if (ctx->trace_enable) {
+ char bits[33];
+ int i;
+ for (i = 0; i < width; i++)
+- bits[i] = magnitude >> (width - i - 1) & 1 ? '1' : '0';
+- bits[i] = sign ? '1' : '0';
+- bits[i + 1] = 0;
++ bits[i] = value & (1 << (width - i - 1)) ? '1' : '0';
++ bits[i] = 0;
+
+ ff_cbs_trace_syntax_element(ctx, put_bits_count(pbc),
+ name, subscripts, bits, value);
+ }
+
+- put_bits(pbc, width, magnitude);
+- put_bits(pbc, 1, sign);
++ put_sbits(pbc, width, value);
+
+ return 0;
+ }
+--
+1.9.1
+
diff --git a/contrib/ffmpeg/A08-mpeg-er-clear-chroma.patch b/contrib/ffmpeg/A08-mpeg-er-clear-chroma.patch
new file mode 100644
index 000000000..8850421c4
--- /dev/null
+++ b/contrib/ffmpeg/A08-mpeg-er-clear-chroma.patch
@@ -0,0 +1,29 @@
+From d4c5f515f09076635bf5e1591e5ff9d21ac13572 Mon Sep 17 00:00:00 2001
+From: Marton Balint <[email protected]>
+Date: Sat, 17 Nov 2018 23:26:24 +0100
+Subject: [PATCH] avcodec/mpeg_er: fix clearing chroma blocks for 422 and 444
+
+Fixes ticket #7494.
+
+Signed-off-by: Marton Balint <[email protected]>
+(cherry picked from commit e3a96309826dd0ea33db0300f7c75414fdbea0a4)
+---
+ libavcodec/mpeg_er.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/libavcodec/mpeg_er.c b/libavcodec/mpeg_er.c
+index ada1a16..f54cb85 100644
+--- a/libavcodec/mpeg_er.c
++++ b/libavcodec/mpeg_er.c
+@@ -78,6 +78,8 @@ static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
+ ff_update_block_index(s);
+
+ s->bdsp.clear_blocks(s->block[0]);
++ if (!s->chroma_y_shift)
++ s->bdsp.clear_blocks(s->block[6]);
+
+ s->dest[0] = s->current_picture.f->data[0] +
+ s->mb_y * 16 * s->linesize +
+--
+1.9.1
+
diff --git a/contrib/ffmpeg/A09-mov-eac3.patch b/contrib/ffmpeg/A09-mov-eac3.patch
new file mode 100644
index 000000000..adf1e5f2c
--- /dev/null
+++ b/contrib/ffmpeg/A09-mov-eac3.patch
@@ -0,0 +1,75 @@
+From fcffed470a5236bc1799bc3022d588704d9ae5ef Mon Sep 17 00:00:00 2001
+From: Paul B Mahol <[email protected]>
+Date: Wed, 21 Nov 2018 11:45:02 +0100
+Subject: [PATCH] avformat/movenc: fix size calculation in mov_write_eac3_tag()
+
+Otherwise it would assert when flushing bits.
+
+(cherry picked from commit 027f032bbce9bdf7bbec40665b98590cade33416)
+---
+ libavformat/movenc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavformat/movenc.c b/libavformat/movenc.c
+index 33978ee..bee8e89 100644
+--- a/libavformat/movenc.c
++++ b/libavformat/movenc.c
+@@ -541,7 +541,7 @@ static int mov_write_eac3_tag(AVIOContext *pb, MOVTrack *track)
+ return AVERROR(EINVAL);
+
+ info = track->eac3_priv;
+- size = 2 + 4 * (info->num_ind_sub + 1);
++ size = 2 + ((34 * (info->num_ind_sub + 1) + 7) >> 3);
+ buf = av_malloc(size);
+ if (!buf) {
+ size = AVERROR(ENOMEM);
+--
+1.9.1
+
+From 59e30c05d74e59d28f2ec4ffd4dbf1822f921f06 Mon Sep 17 00:00:00 2001
+From: Paul B Mahol <[email protected]>
+Date: Thu, 22 Nov 2018 21:28:59 +0100
+Subject: [PATCH] avformat/movenc: get number of written bytes from bitstream
+ writer
+
+Update fate test.
+
+(cherry picked from commit 97d1ee437bbf67d7e3897bc73df4f7d9771ac309)
+---
+ libavformat/movenc.c | 2 +-
+ tests/ref/fate/copy-trac3074 | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libavformat/movenc.c b/libavformat/movenc.c
+index bee8e89..6dab519 100644
+--- a/libavformat/movenc.c
++++ b/libavformat/movenc.c
+@@ -563,12 +563,12 @@ static int mov_write_eac3_tag(AVIOContext *pb, MOVTrack *track)
+ put_bits(&pbc, 4, info->substream[i].num_dep_sub);
+ if (!info->substream[i].num_dep_sub) {
+ put_bits(&pbc, 1, 0); /* reserved */
+- size--;
+ } else {
+ put_bits(&pbc, 9, info->substream[i].chan_loc);
+ }
+ }
+ flush_put_bits(&pbc);
++ size = put_bits_count(&pbc) >> 3;
+
+ avio_wb32(pb, size + 8);
+ ffio_wfourcc(pb, "dec3");
+diff --git a/tests/ref/fate/copy-trac3074 b/tests/ref/fate/copy-trac3074
+index 5ce5694..ff66900 100644
+--- a/tests/ref/fate/copy-trac3074
++++ b/tests/ref/fate/copy-trac3074
+@@ -1,5 +1,5 @@
+-39aef1afff761d673fd1be07182941d1 *tests/data/fate/copy-trac3074.mp4
+-333991 tests/data/fate/copy-trac3074.mp4
++f92a201033712bda262f1e071e25544a *tests/data/fate/copy-trac3074.mp4
++333992 tests/data/fate/copy-trac3074.mp4
+ #tb 0: 1/48000
+ #media_type 0: audio
+ #codec_id 0: eac3
+--
+1.9.1
+
diff --git a/contrib/ffmpeg/module.defs b/contrib/ffmpeg/module.defs
index d2b41be0c..0065859c8 100644
--- a/contrib/ffmpeg/module.defs
+++ b/contrib/ffmpeg/module.defs
@@ -12,9 +12,9 @@ endif
$(eval $(call import.MODULE.defs,FFMPEG,ffmpeg,$(__deps__)))
$(eval $(call import.CONTRIB.defs,FFMPEG))
-FFMPEG.FETCH.url = https://download.handbrake.fr/handbrake/contrib/ffmpeg-4.0.1.tar.bz2
-FFMPEG.FETCH.url += https://www.ffmpeg.org/releases/ffmpeg-4.0.1.tar.bz2
-FFMPEG.FETCH.sha256 = 7ee591b1e7fb66f055fa514fbd5d98e092ddb3dbe37d2e50ea5c16ab51c21670
+FFMPEG.FETCH.url = https://download.handbrake.fr/handbrake/contrib/ffmpeg-4.1.tar.bz2
+FFMPEG.FETCH.url += https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
+FFMPEG.FETCH.sha256 = b684fb43244a5c4caae652af9022ed5d85ce15210835bce054a33fb26033a1a5
FFMPEG.CONFIGURE.deps =
FFMPEG.CONFIGURE.host =