forked from FFmpeg/FFmpeg
avformat/matroska: add support for VVC streams
As defined in https://github.com/ietf-wg-cellar/matroska-specification/blob/master/codec_specs.md#v_mpegiisovvc Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
8bd66a8c95
commit
df50370e1b
7 changed files with 29 additions and 16 deletions
|
@ -10,6 +10,7 @@ version <next>:
|
|||
- ADPCM IMA Xbox decoder
|
||||
- Enhanced FLV v2: Multitrack audio/video, modern codec support
|
||||
- Animated JPEG XL encoding (via libjxl)
|
||||
- VVC in Matroska
|
||||
|
||||
version 7.1:
|
||||
- Raw Captions with Time (RCWT) closed caption demuxer
|
||||
|
|
|
@ -90,6 +90,7 @@ const CodecTags ff_mkv_codec_tags[]={
|
|||
{"V_MPEG4/ISO/SP" , AV_CODEC_ID_MPEG4},
|
||||
{"V_MPEG4/ISO/AVC" , AV_CODEC_ID_H264},
|
||||
{"V_MPEGH/ISO/HEVC" , AV_CODEC_ID_HEVC},
|
||||
{"V_MPEGI/ISO/VVC" , AV_CODEC_ID_VVC},
|
||||
{"V_MPEG4/MS/V3" , AV_CODEC_ID_MSMPEG4V3},
|
||||
{"V_PRORES" , AV_CODEC_ID_PRORES},
|
||||
{"V_REAL/RV10" , AV_CODEC_ID_RV10},
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "riff.h"
|
||||
#include "version.h"
|
||||
#include "vorbiscomment.h"
|
||||
#include "vvc.h"
|
||||
#include "wv.h"
|
||||
|
||||
#include "libavutil/avstring.h"
|
||||
|
@ -1141,6 +1142,9 @@ static int mkv_assemble_native_codecprivate(AVFormatContext *s, AVIOContext *dyn
|
|||
case AV_CODEC_ID_HEVC:
|
||||
return ff_isom_write_hvcc(dyn_cp, extradata,
|
||||
extradata_size, 0, s);
|
||||
case AV_CODEC_ID_VVC:
|
||||
return ff_isom_write_vvcc(dyn_cp, extradata,
|
||||
extradata_size, 0);
|
||||
case AV_CODEC_ID_ALAC:
|
||||
if (extradata_size < 36) {
|
||||
av_log(s, AV_LOG_ERROR,
|
||||
|
@ -3441,8 +3445,10 @@ static int mkv_init(struct AVFormatContext *s)
|
|||
break;
|
||||
case AV_CODEC_ID_H264:
|
||||
case AV_CODEC_ID_HEVC:
|
||||
if ((par->codec_id == AV_CODEC_ID_H264 && par->extradata_size > 0 ||
|
||||
par->codec_id == AV_CODEC_ID_HEVC && par->extradata_size > 6) &&
|
||||
case AV_CODEC_ID_VVC:
|
||||
if (((par->codec_id == AV_CODEC_ID_H264 && par->extradata_size > 0) ||
|
||||
(par->codec_id == AV_CODEC_ID_HEVC && par->extradata_size > 6) ||
|
||||
(par->codec_id == AV_CODEC_ID_VVC && par->extradata_size >= 6)) &&
|
||||
(AV_RB24(par->extradata) == 1 || AV_RB32(par->extradata) == 1))
|
||||
track->reformat = mkv_reformat_h2645;
|
||||
break;
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include "version_major.h"
|
||||
|
||||
#define LIBAVFORMAT_VERSION_MINOR 9
|
||||
#define LIBAVFORMAT_VERSION_MICRO 105
|
||||
#define LIBAVFORMAT_VERSION_MICRO 106
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||
LIBAVFORMAT_VERSION_MINOR, \
|
||||
|
|
|
@ -402,8 +402,8 @@ lavf_container_fate()
|
|||
cleanfiles="$cleanfiles $file"
|
||||
input="${target_samples}/$1"
|
||||
do_avconv $file -auto_conversion_filters $DEC_OPTS $2 -i "$input" \
|
||||
"$ENC_OPTS -metadata title=lavftest" -vcodec copy -acodec copy || return
|
||||
do_avconv_crc $file -auto_conversion_filters $DEC_OPTS -i $target_path/$file $3
|
||||
"$ENC_OPTS -metadata title=lavftest" $3 -vcodec copy -acodec copy || return
|
||||
do_avconv_crc $file -auto_conversion_filters $DEC_OPTS -i $target_path/$file $4
|
||||
}
|
||||
|
||||
lavf_image(){
|
||||
|
|
|
@ -77,6 +77,7 @@ FATE_LAVF_CONTAINER_FATE-$(call ALLYES, EVC_DEMUXER EVC_PARSER MOV_MUXER) +
|
|||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, H264_DEMUXER H264_PARSER MOV_MUXER) += h264.mp4
|
||||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, HEVC_DEMUXER HEVC_PARSER EXTRACT_EXTRADATA_BSF MOV_MUXER) += hevc.mp4
|
||||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, MOV_DEMUXER MOV_MUXER) += mv_hevc.mov
|
||||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, VVC_DEMUXER VVC_PARSER SETTS_BSF MATROSKA_MUXER) += vvc.mkv
|
||||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, VVC_DEMUXER VVC_PARSER MOV_MUXER) += vvc.mp4
|
||||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, MATROSKA_DEMUXER OGG_MUXER) += vp3.ogg
|
||||
FATE_LAVF_CONTAINER_FATE-$(call ALLYES, MATROSKA_DEMUXER OGV_MUXER) += vp8.ogg
|
||||
|
@ -91,20 +92,21 @@ FATE_LAVF_CONTAINER_FATE = $(FATE_LAVF_CONTAINER_FATE-yes:%=fate-lavf-fate-%)
|
|||
$(FATE_LAVF_CONTAINER_FATE): REF = $(SRC_PATH)/tests/ref/lavf-fate/$(@:fate-lavf-fate-%=%)
|
||||
$(FATE_LAVF_CONTAINER_FATE): $(AREF) $(VREF)
|
||||
|
||||
fate-lavf-fate-av1.mp4: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "-c:v av1" "-c:v copy"
|
||||
fate-lavf-fate-av1.mkv: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "-c:v av1" "-c:v copy"
|
||||
fate-lavf-fate-evc.mp4: CMD = lavf_container_fate "evc/akiyo_cif.evc" "" "-c:v copy"
|
||||
fate-lavf-fate-h264.mp4: CMD = lavf_container_fate "h264/intra_refresh.h264" "" "-c:v copy"
|
||||
fate-lavf-fate-hevc.mp4: CMD = lavf_container_fate "hevc-conformance/HRD_A_Fujitsu_2.bit" "" "-c:v copy"
|
||||
fate-lavf-fate-vvc.mp4: CMD = lavf_container_fate "vvc-conformance/VPS_A_3.bit" "" "-c:v copy"
|
||||
fate-lavf-fate-av1.mp4: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "-c:v av1" "" "-c:v copy"
|
||||
fate-lavf-fate-av1.mkv: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "-c:v av1" "" "-c:v copy"
|
||||
fate-lavf-fate-evc.mp4: CMD = lavf_container_fate "evc/akiyo_cif.evc" "" "" "-c:v copy"
|
||||
fate-lavf-fate-h264.mp4: CMD = lavf_container_fate "h264/intra_refresh.h264" "" "" "-c:v copy"
|
||||
fate-lavf-fate-hevc.mp4: CMD = lavf_container_fate "hevc-conformance/HRD_A_Fujitsu_2.bit" "" "" "-c:v copy"
|
||||
fate-lavf-fate-vvc.mkv: CMD = lavf_container_fate "vvc-conformance/VPS_A_3.bit" "" "-bsf:v setts=pts=DTS" "-c:v copy"
|
||||
fate-lavf-fate-vvc.mp4: CMD = lavf_container_fate "vvc-conformance/VPS_A_3.bit" "" "" "-c:v copy"
|
||||
fate-lavf-fate-vp3.ogg: CMD = lavf_container_fate "vp3/coeff_level64.mkv" "-idct auto"
|
||||
fate-lavf-fate-vp8.ogg: CMD = lavf_container_fate "vp8/RRSF49-short.webm" "" "-acodec copy"
|
||||
fate-lavf-fate-latm: CMD = lavf_container_fate "aac/al04_44.mp4" "" "-acodec copy"
|
||||
fate-lavf-fate-mv_hevc.mov: CMD = lavf_container_fate "hevc/multiview.mov" "" "-c:v copy"
|
||||
fate-lavf-fate-mp3: CMD = lavf_container_fate "mp3-conformance/he_32khz.bit" "" "-acodec copy"
|
||||
fate-lavf-fate-vp8.ogg: CMD = lavf_container_fate "vp8/RRSF49-short.webm" "" "" "-c:a copy"
|
||||
fate-lavf-fate-latm: CMD = lavf_container_fate "aac/al04_44.mp4" "" "" "-c:a copy"
|
||||
fate-lavf-fate-mv_hevc.mov: CMD = lavf_container_fate "hevc/multiview.mov" "" "" "-c:v copy"
|
||||
fate-lavf-fate-mp3: CMD = lavf_container_fate "mp3-conformance/he_32khz.bit" "" "" "-c:a copy"
|
||||
fate-lavf-fate-qtrle_mace6.mov: CMD = lavf_container_fate "qtrle/Animation-16Greys.mov" "-idct auto"
|
||||
fate-lavf-fate-cram.avi: CMD = lavf_container_fate "cram/toon.avi" "-idct auto"
|
||||
fate-lavf-fate-hevc.flv: CMD = lavf_container_fate "mkv/hdr10tags-both.mkv" "" "-c:v copy"
|
||||
fate-lavf-fate-hevc.flv: CMD = lavf_container_fate "mkv/hdr10tags-both.mkv" "" "" "-c:v copy"
|
||||
|
||||
FATE_SAMPLES_FFMPEG += $(FATE_LAVF_CONTAINER_FATE)
|
||||
fate-lavf-fate fate-lavf: $(FATE_LAVF_CONTAINER_FATE)
|
||||
|
|
3
tests/ref/lavf-fate/vvc.mkv
Normal file
3
tests/ref/lavf-fate/vvc.mkv
Normal file
|
@ -0,0 +1,3 @@
|
|||
088fe4756b99c28031ba41d1a841a1cb *tests/data/lavf-fate/lavf.vvc.mkv
|
||||
16351 tests/data/lavf-fate/lavf.vvc.mkv
|
||||
tests/data/lavf-fate/lavf.vvc.mkv CRC=0x895790b1
|
Loading…
Add table
Reference in a new issue