[ffmpeg] branch master updated (e869426a8c -> 2559f263ea)
This is an automated email from the git hooks/post-receive script. Git pushed a change to branch master in repository ffmpeg. from e869426a8c avcodec/bsf/extract_extradata: remove dead code new 9ceb932c36 avformat/flvenc: support mux vvc in enhanced flv new 0de45f556c avformat/flvdec: support demux vvc in enhanced flv new 93be3e37db avformat/rtmpproto: add vvc1 string into enhanced_codecs list new 2559f263ea tests/fate/flvenc: add vvc in enhanced flv test case The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference. Summary of changes: libavformat/flvdec.c | 12 +++++++++++- libavformat/flvenc.c | 38 ++++++++++++++++++++++++++++---------- libavformat/rtmpproto.c | 3 ++- tests/fate/flvenc.mak | 4 ++++ tests/ref/fate/enhanced-flv-vvc | 25 +++++++++++++++++++++++++ 5 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 tests/ref/fate/enhanced-flv-vvc
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg. commit 9ceb932c36b1be5ee34bc11dfb4bf673f758e0c4 Author: Steven Liu <lq@chinaffmpeg.org> AuthorDate: Wed Feb 4 18:09:06 2026 +0800 Commit: stevenliu <lingjiujianke@gmail.com> CommitDate: Sun Mar 1 04:21:45 2026 +0000 avformat/flvenc: support mux vvc in enhanced flv Signed-off-by: Steven Liu <lq@chinaffmpeg.org> --- libavformat/flvenc.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index a0503c1799..6ed71aa6b5 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -33,6 +33,7 @@ #include "av1.h" #include "vpcc.h" #include "hevc.h" +#include "vvc.h" #include "avformat.h" #include "flv.h" #include "internal.h" @@ -53,6 +54,7 @@ static const AVCodecTag flv_video_codec_ids[] = { { AV_CODEC_ID_VP6A, FLV_CODECID_VP6A }, { AV_CODEC_ID_H264, FLV_CODECID_H264 }, { AV_CODEC_ID_HEVC, MKBETAG('h', 'v', 'c', '1') }, + { AV_CODEC_ID_VVC, MKBETAG('v', 'v', 'c', '1') }, { AV_CODEC_ID_AV1, MKBETAG('a', 'v', '0', '1') }, { AV_CODEC_ID_VP9, MKBETAG('v', 'p', '0', '9') }, { AV_CODEC_ID_NONE, 0 } @@ -520,6 +522,9 @@ static void write_codec_fourcc(AVIOContext *pb, enum AVCodecID codec_id) case AV_CODEC_ID_HEVC: avio_write(pb, "hvc1", 4); return; + case AV_CODEC_ID_VVC: + avio_write(pb, "vvc1", 4); + return; case AV_CODEC_ID_AV1: avio_write(pb, "av01", 4); return; @@ -546,7 +551,7 @@ static void flv_write_metadata_packet(AVFormatContext *s, AVCodecParameters *par return; if (par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_AV1 || - par->codec_id == AV_CODEC_ID_VP9) { + par->codec_id == AV_CODEC_ID_VP9 || par->codec_id == AV_CODEC_ID_VVC) { int flags_size = 5; side_data = av_packet_side_data_get(par->coded_side_data, par->nb_coded_side_data, AV_PKT_DATA_CONTENT_LIGHT_LEVEL); @@ -807,6 +812,7 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id == AV_CODEC_ID_VP9 + || par->codec_id == AV_CODEC_ID_VVC || (par->codec_id == AV_CODEC_ID_MP3 && track_idx) || par->codec_id == AV_CODEC_ID_OPUS || par->codec_id == AV_CODEC_ID_FLAC || par->codec_id == AV_CODEC_ID_AC3 || par->codec_id == AV_CODEC_ID_EAC3) { @@ -855,6 +861,7 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i // If video stream has track_idx > 0 we need to send H.264 as extended video packet extended_flv = (par->codec_id == AV_CODEC_ID_H264 && track_idx) || par->codec_id == AV_CODEC_ID_HEVC || + par->codec_id == AV_CODEC_ID_VVC || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id == AV_CODEC_ID_VP9; @@ -878,6 +885,8 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i if (par->codec_id == AV_CODEC_ID_HEVC) ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0, s); + else if (par->codec_id == AV_CODEC_ID_VVC) + ff_isom_write_vvcc(pb, par->extradata, par->extradata_size, 1); else if (par->codec_id == AV_CODEC_ID_AV1) ff_isom_write_av1c(pb, par->extradata, par->extradata_size, 1); else if (par->codec_id == AV_CODEC_ID_VP9) @@ -980,7 +989,8 @@ static int flv_init(struct AVFormatContext *s) par->codec_id != AV_CODEC_ID_VP9 && par->codec_id != AV_CODEC_ID_AV1 && par->codec_id != AV_CODEC_ID_H264 && - par->codec_id != AV_CODEC_ID_HEVC) { + par->codec_id != AV_CODEC_ID_HEVC && + par->codec_id != AV_CODEC_ID_VVC) { av_log(s, AV_LOG_ERROR, "Unsupported multi-track video codec.\n"); return AVERROR(EINVAL); } @@ -1222,7 +1232,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) flags_size = 2; else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_AV1 || - par->codec_id == AV_CODEC_ID_VP9) + par->codec_id == AV_CODEC_ID_VP9 || par->codec_id == AV_CODEC_ID_VVC) flags_size = 5; else flags_size = 1; @@ -1230,13 +1240,14 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) if ((par->codec_type == AVMEDIA_TYPE_VIDEO || par->codec_type == AVMEDIA_TYPE_AUDIO) && track_idx) flags_size += 2; // additional header bytes for multi-track flv - if ((par->codec_id == AV_CODEC_ID_HEVC || + if ((par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_VVC || (par->codec_id == AV_CODEC_ID_H264 && track_idx)) && pkt->pts != pkt->dts) flags_size += 3; if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC + || par->codec_id == AV_CODEC_ID_VVC || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id == AV_CODEC_ID_VP9 || par->codec_id == AV_CODEC_ID_OPUS || par->codec_id == AV_CODEC_ID_FLAC) { size_t side_size; @@ -1260,8 +1271,8 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) return AVERROR(EINVAL); } if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || - par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_AV1 || - par->codec_id == AV_CODEC_ID_VP9) { + par->codec_id == AV_CODEC_ID_HEVC || par->codec_id == AV_CODEC_ID_AV1 || + par->codec_id == AV_CODEC_ID_VP9 || par->codec_id == AV_CODEC_ID_VVC) { if (pkt->pts == AV_NOPTS_VALUE) { av_log(s, AV_LOG_ERROR, "Packet is missing PTS\n"); return AVERROR(EINVAL); @@ -1308,6 +1319,10 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) if ((ret = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) return ret; + } else if (par->codec_id == AV_CODEC_ID_VVC) { + if (par->extradata_size > 0 && (*(uint8_t*)par->extradata & 0xF8) != 0xF8) + if ((ret = ff_vvc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) + return ret; } else if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) { if (!s->streams[pkt->stream_index]->nb_frames) { @@ -1370,15 +1385,17 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) } else { int extended_video = (par->codec_id == AV_CODEC_ID_H264 && track_idx) || par->codec_id == AV_CODEC_ID_HEVC || + par->codec_id == AV_CODEC_ID_VVC || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id == AV_CODEC_ID_VP9; if (extended_video) { - int h2645 = par->codec_id == AV_CODEC_ID_H264 || + int h26456 = par->codec_id == AV_CODEC_ID_H264 || + par->codec_id == AV_CODEC_ID_VVC || par->codec_id == AV_CODEC_ID_HEVC; int pkttype = PacketTypeCodedFrames; - // Optimisation for HEVC/H264: Do not send composition time if DTS == PTS - if (h2645 && pkt->pts == pkt->dts) + // Optimisation for VVC/HEVC/H264: Do not send composition time if DTS == PTS + if (h26456 && pkt->pts == pkt->dts) pkttype = PacketTypeCodedFramesX; if (track_idx) { @@ -1392,7 +1409,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) if (track_idx) avio_w8(pb, track_idx); - if (h2645 && pkttype == PacketTypeCodedFrames) + if (h26456 && pkttype == PacketTypeCodedFrames) avio_wb24(pb, pkt->pts - pkt->dts); } else if (extended_audio) { if (track_idx) { @@ -1476,6 +1493,7 @@ static int flv_check_bitstream(AVFormatContext *s, AVStream *st, if (!st->codecpar->extradata_size && (st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC || + st->codecpar->codec_id == AV_CODEC_ID_VVC || st->codecpar->codec_id == AV_CODEC_ID_AV1 || st->codecpar->codec_id == AV_CODEC_ID_MPEG4)) return ff_stream_add_bitstream_filter(st, "extract_extradata", NULL);
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg. commit 0de45f556cd8d86830f4b525a6e8097113f53da1 Author: Steven Liu <lq@chinaffmpeg.org> AuthorDate: Thu Feb 26 17:30:18 2026 +0800 Commit: stevenliu <lingjiujianke@gmail.com> CommitDate: Sun Mar 1 04:21:45 2026 +0000 avformat/flvdec: support demux vvc in enhanced flv Signed-off-by: Steven Liu <lq@chinaffmpeg.org> --- libavformat/flvdec.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 18bdbd18bd..6d6c541931 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -396,6 +396,8 @@ static int flv_same_video_codec(AVCodecParameters *vpar, uint32_t flv_codecid) return 1; switch (flv_codecid) { + case MKBETAG('v', 'v', 'c', '1'): + return vpar->codec_id == AV_CODEC_ID_VVC; case FLV_CODECID_X_HEVC: case MKBETAG('h', 'v', 'c', '1'): return vpar->codec_id == AV_CODEC_ID_HEVC; @@ -430,6 +432,10 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, enum AVCodecID old_codec_id = vstream->codecpar->codec_id; switch (flv_codecid) { + case MKBETAG('v', 'v', 'c', '1'): + par->codec_id = AV_CODEC_ID_VVC; + vstreami->need_parsing = AVSTREAM_PARSE_HEADERS; + break; case FLV_CODECID_X_HEVC: case MKBETAG('h', 'v', 'c', '1'): par->codec_id = AV_CODEC_ID_HEVC; @@ -1750,6 +1756,7 @@ retry_duration: st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_MPEG4 || st->codecpar->codec_id == AV_CODEC_ID_HEVC || + st->codecpar->codec_id == AV_CODEC_ID_VVC || st->codecpar->codec_id == AV_CODEC_ID_AV1 || st->codecpar->codec_id == AV_CODEC_ID_VP9) { int type = 0; @@ -1773,7 +1780,9 @@ retry_duration: } if (st->codecpar->codec_id == AV_CODEC_ID_MPEG4 || - ((st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC) && + ((st->codecpar->codec_id == AV_CODEC_ID_H264 || + st->codecpar->codec_id == AV_CODEC_ID_VVC || + st->codecpar->codec_id == AV_CODEC_ID_HEVC) && (!enhanced_flv || type == PacketTypeCodedFrames))) { if (size < 3 || track_size < 3) { ret = AVERROR_INVALIDDATA; @@ -1798,6 +1807,7 @@ retry_duration: if (type == 0 && (!st->codecpar->extradata || st->codecpar->codec_id == AV_CODEC_ID_AAC || st->codecpar->codec_id == AV_CODEC_ID_OPUS || st->codecpar->codec_id == AV_CODEC_ID_FLAC || st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_HEVC || + st->codecpar->codec_id == AV_CODEC_ID_VVC || st->codecpar->codec_id == AV_CODEC_ID_AV1 || st->codecpar->codec_id == AV_CODEC_ID_VP9)) { AVDictionaryEntry *t;
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg. commit 93be3e37db24ccf8e6ccbc143d581eefd4851a50 Author: Steven Liu <lq@chinaffmpeg.org> AuthorDate: Wed Feb 4 18:14:53 2026 +0800 Commit: stevenliu <lingjiujianke@gmail.com> CommitDate: Sun Mar 1 04:21:45 2026 +0000 avformat/rtmpproto: add vvc1 string into enhanced_codecs list Signed-off-by: Steven Liu <lq@chinaffmpeg.org> --- libavformat/rtmpproto.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c index b029c57621..d4c9047266 100644 --- a/libavformat/rtmpproto.c +++ b/libavformat/rtmpproto.c @@ -362,7 +362,7 @@ static int gen_connect(URLContext *s, RTMPContext *rt) // check the string, fourcc + ',' + ... + end fourcc correct length should be (4+1)*n+4 if ((fourcc_str_len + 1) % 5 != 0) { av_log(s, AV_LOG_ERROR, "Malformed rtmp_enhanched_codecs, " - "should be of the form hvc1[,av01][,vp09][,...]\n"); + "should be of the form hvc1[,av01][,vp09][,vvc1][,...]\n"); ff_rtmp_packet_destroy(&pkt); return AVERROR(EINVAL); } @@ -379,6 +379,7 @@ static int gen_connect(URLContext *s, RTMPContext *rt) !strncmp(fourcc_data, "ec-3", 4) || !strncmp(fourcc_data, "fLaC", 4) || !strncmp(fourcc_data, "hvc1", 4) || + !strncmp(fourcc_data, "vvc1", 4) || !strncmp(fourcc_data, ".mp3", 4) || !strncmp(fourcc_data, "mp4a", 4) || !strncmp(fourcc_data, "Opus", 4) ||
This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg. commit 2559f263ea9617d98f885ca03cc52d62b450fbe4 Author: Steven Liu <lq@chinaffmpeg.org> AuthorDate: Sat Feb 28 22:33:22 2026 +0800 Commit: stevenliu <lingjiujianke@gmail.com> CommitDate: Sun Mar 1 04:21:45 2026 +0000 tests/fate/flvenc: add vvc in enhanced flv test case --- tests/fate/flvenc.mak | 4 ++++ tests/ref/fate/enhanced-flv-vvc | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/tests/fate/flvenc.mak b/tests/fate/flvenc.mak index 86f0482378..1cc8e1f160 100644 --- a/tests/fate/flvenc.mak +++ b/tests/fate/flvenc.mak @@ -5,6 +5,10 @@ FATE_ENHANCED_FLVENC_FFMPEG-$(call REMUX, FLV MOV, FLV_DEMUXER HEVC_PARSER) += f fate-enhanced-flv-hevc: CMD = transcode mov $(TARGET_SAMPLES)/hevc/dv84.mov\ flv "-c copy" "-c copy" +FATE_ENHANCED_FLVENC_FFMPEG-$(call REMUX, FLV VVC, FLV_DEMUXER VVC_PARSER SETTS_BSF) += fate-enhanced-flv-vvc +fate-enhanced-flv-vvc: CMD = transcode vvc $(TARGET_SAMPLES)/vvc-conformance/10b422_L_5.bit\ + flv "-c copy -bsf:0 setts=pts=DTS" "-c copy" + FATE_ENHANCED_FLVENC_FFMPEG-$(call REMUX, FLV IVF, FLV_DEMUXER VP9_PARSER) += fate-enhanced-flv-vp9 fate-enhanced-flv-vp9: CMD = transcode ivf $(TARGET_SAMPLES)/vp9-test-vectors/vp90-2-05-resize.ivf\ flv "-c copy" "-c copy" diff --git a/tests/ref/fate/enhanced-flv-vvc b/tests/ref/fate/enhanced-flv-vvc new file mode 100644 index 0000000000..329728037d --- /dev/null +++ b/tests/ref/fate/enhanced-flv-vvc @@ -0,0 +1,25 @@ +b4074094cb8c5152361a9fab71dca9e9 *tests/data/fate/enhanced-flv-vvc.flv +90620 tests/data/fate/enhanced-flv-vvc.flv +#extradata 0: 161, 0x98c53408 +#tb 0: 1/1000 +#media_type 0: video +#codec_id 0: vvc +#dimensions 0: 1920x1080 +#sar 0: 0/1 +0, 0, 0, 40, 66674, 0x2355e48b +0, 40, 40, 40, 4032, 0xcf27cb12, F=0x0 +0, 80, 80, 40, 1704, 0x76e74113, F=0x0 +0, 120, 120, 40, 1793, 0xca098d19, F=0x0 +0, 160, 160, 40, 1181, 0x0bd63dc5, F=0x0 +0, 200, 200, 40, 943, 0xae1ec812, F=0x0 +0, 240, 240, 40, 879, 0x2f34a4f5, F=0x0 +0, 280, 280, 40, 1282, 0x99727f95, F=0x0 +0, 320, 320, 40, 834, 0x57f09b37, F=0x0 +0, 360, 360, 40, 879, 0x9df3b028, F=0x0 +0, 400, 400, 40, 1238, 0x261764ae, F=0x0 +0, 440, 440, 40, 1236, 0x02075ca9, F=0x0 +0, 480, 480, 40, 904, 0x22b3a9d4, F=0x0 +0, 520, 520, 40, 2584, 0xd35bfe72, F=0x0 +0, 560, 560, 40, 1380, 0x6721af09, F=0x0 +0, 600, 600, 40, 950, 0x78f2c394, F=0x0 +0, 640, 640, 40, 1366, 0xd52c996a, F=0x0
participants (2)
-
ffmpeg-git -
Steven Liu