summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/ffmpeg/A01-hevc-matroska.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/contrib/ffmpeg/A01-hevc-matroska.patch b/contrib/ffmpeg/A01-hevc-matroska.patch
new file mode 100644
index 000000000..1c22d6cc6
--- /dev/null
+++ b/contrib/ffmpeg/A01-hevc-matroska.patch
@@ -0,0 +1,45 @@
+diff --git a/libavformat/Makefile b/libavformat/Makefile
+index a3cd504..5694314 100644
+--- a/libavformat/Makefile
++++ b/libavformat/Makefile
+@@ -168,7 +168,7 @@ OBJS-$(CONFIG_M4V_MUXER) += rawenc.o
+ OBJS-$(CONFIG_MATROSKA_DEMUXER) += matroskadec.o matroska.o \
+ isom.o rmsipr.o
+ OBJS-$(CONFIG_MATROSKA_MUXER) += matroskaenc.o matroska.o \
+- isom.o avc.o \
++ isom.o avc.o hevc.o \
+ flacenc_header.o avlanguage.o wv.o
+ OBJS-$(CONFIG_MD5_MUXER) += md5enc.o
+ OBJS-$(CONFIG_MJPEG_DEMUXER) += rawdec.o
+diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
+index 3ab3139..fad1ec4 100644
+--- a/libavformat/matroskaenc.c
++++ b/libavformat/matroskaenc.c
+@@ -22,6 +22,7 @@
+ #include <stdint.h>
+
+ #include "avc.h"
++#include "hevc.h"
+ #include "avformat.h"
+ #include "avlanguage.h"
+ #include "flacenc.h"
+@@ -500,6 +501,8 @@ static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, AVCodecCo
+ ret = put_wv_codecpriv(dyn_cp, codec);
+ else if (codec->codec_id == AV_CODEC_ID_H264)
+ ret = ff_isom_write_avcc(dyn_cp, codec->extradata, codec->extradata_size);
++ else if (codec->codec_id == AV_CODEC_ID_HEVC)
++ ret = ff_isom_write_hvcc(dyn_cp, codec->extradata, codec->extradata_size, 0);
+ else if (codec->codec_id == AV_CODEC_ID_ALAC) {
+ if (codec->extradata_size < 36) {
+ av_log(s, AV_LOG_ERROR,
+@@ -1164,6 +1167,10 @@ static void mkv_write_block(AVFormatContext *s, AVIOContext *pb,
+ if (codec->codec_id == AV_CODEC_ID_H264 && codec->extradata_size > 0 &&
+ (AV_RB24(codec->extradata) == 1 || AV_RB32(codec->extradata) == 1))
+ ff_avc_parse_nal_units_buf(pkt->data, &data, &size);
++ else if (codec->codec_id == AV_CODEC_ID_HEVC && codec->extradata_size > 6 &&
++ (AV_RB24(codec->extradata) == 1 || AV_RB32(codec->extradata) == 1))
++ /* extradata is Annex B, assume the bitstream is too and convert it */
++ ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL);
+ else if (codec->codec_id == AV_CODEC_ID_WAVPACK) {
+ int ret = mkv_strip_wavpack(pkt->data, &data, &size);
+ if (ret < 0) {