diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/ffmpeg/A01-hevc-matroska.patch | 45 |
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) { |