This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit c37ebc8d98ca6952e6b54e6ce3bdbdd15a6abba0 Author: Rainbaby <[email protected]> AuthorDate: Fri Aug 28 16:18:10 2026 +0900 Commit: Peter Ross <[email protected]> CommitDate: Mon Nov 2 22:18:06 2026 +0000 avcodec/cavsdec: accept the AVS1-P16 Broadcasting profile Until now decode_seq_header() refused profile_id 0x48, so nothing the preceding commits added was reachable. The annex A de-emulation and the field decoding among them deliberately apply to JiZhun as well. A Broadcasting sequence that is not 8 bit 4:2:0 is refused rather than decoded with the wrong macroblock layer. The SD AVS+ mux attached to trac ticket 6948 decodes with this: both video streams, frame coded AEC pictures throughout. Fixes: https://trac.ffmpeg.org/ticket/6948 Signed-off-by: Rainbaby <[email protected]> --- Changelog | 1 + doc/general_contents.texi | 3 ++- libavcodec/cavs.c | 4 ++-- libavcodec/cavs.h | 2 +- libavcodec/cavs_parser.c | 4 ++-- libavcodec/cavsdata.c | 2 +- libavcodec/cavsdec.c | 32 ++++++++++++++++++++++++++------ libavcodec/cavsdsp.c | 2 +- libavcodec/cavsdsp.h | 2 +- libavcodec/codec_desc.c | 2 +- 10 files changed, 38 insertions(+), 16 deletions(-) diff --git a/Changelog b/Changelog index 6bb1201481..bcfc9b3b40 100644 --- a/Changelog +++ b/Changelog @@ -4,6 +4,7 @@ releases are sorted from youngest to oldest. version <next>: - DTS:X height channels in the DCA decoder - LCEVC raw demuxer and muxer +- AVS+ (AVS1-P16, Broadcasting profile) support in the Chinese AVS decoder version 9.1: - ASTC image encoding and decoding via libastcenc, with .astc and KTX 1.0 muxers and demuxers diff --git a/doc/general_contents.texi b/doc/general_contents.texi index 778f433015..573107a579 100644 --- a/doc/general_contents.texi +++ b/doc/general_contents.texi @@ -1058,7 +1058,8 @@ following image formats are supported: @item CDXL @tab @tab X @tab Amiga CD video codec @item Chinese AVS video @tab E @tab X - @tab AVS1-P2, JiZhun profile, encoding through external library libxavs + @tab AVS1-P2/P16 (JiZhun and Broadcasting) decoding, + AVS1-P2 encoding through external library libxavs @item Delphine Software International CIN video @tab @tab X @tab Codec used in Delphine Software International games. @item Discworld II BMV Video @tab @tab X diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c index 4f90178fc4..05117a098c 100644 --- a/libavcodec/cavs.c +++ b/libavcodec/cavs.c @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. * Copyright (c) 2006 Stefan Gehrer <[email protected]> * * This file is part of FFmpeg. @@ -21,7 +21,7 @@ /** * @file - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder * @author Stefan Gehrer <[email protected]> */ diff --git a/libavcodec/cavs.h b/libavcodec/cavs.h index 8c3dac34ca..b51a5e6c19 100644 --- a/libavcodec/cavs.h +++ b/libavcodec/cavs.h @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. * Copyright (c) 2006 Stefan Gehrer <[email protected]> * * This file is part of FFmpeg. diff --git a/libavcodec/cavs_parser.c b/libavcodec/cavs_parser.c index bada0b2a71..a3e1d48537 100644 --- a/libavcodec/cavs_parser.c +++ b/libavcodec/cavs_parser.c @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) parser. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) parser. * Copyright (c) 2006 Stefan Gehrer <[email protected]> * * This file is part of FFmpeg. @@ -21,7 +21,7 @@ /** * @file - * Chinese AVS video (AVS1-P2, JiZhun profile) parser + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) parser * @author Stefan Gehrer <[email protected]> */ diff --git a/libavcodec/cavsdata.c b/libavcodec/cavsdata.c index 85434906ad..a42c9ac5c8 100644 --- a/libavcodec/cavsdata.c +++ b/libavcodec/cavsdata.c @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. * Copyright (c) 2006 Stefan Gehrer <[email protected]> * * This file is part of FFmpeg. diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c index ae82bece5c..efcd156d76 100644 --- a/libavcodec/cavsdec.c +++ b/libavcodec/cavsdec.c @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. * Copyright (c) 2006 Stefan Gehrer <[email protected]> * * This file is part of FFmpeg. @@ -21,7 +21,7 @@ /** * @file - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder * @author Stefan Gehrer <[email protected]> * * Clause, table and figure numbers refer to GY/T 257.1-2012. @@ -2051,10 +2051,13 @@ static int decode_seq_header(AVSContext *h) int width, height; int mb_width, mb_height; int progressive_seq, low_delay; + int chroma_format, sample_precision; int ret; profile = get_bits(&h->gb, 8); - if (profile != AV_PROFILE_CAVS_JIZHUN) { + /* the sequence header is the same for both profiles (table 14) */ + if (profile != AV_PROFILE_CAVS_JIZHUN && + profile != AV_PROFILE_CAVS_BROADCASTING) { avpriv_report_missing_feature(h->avctx, "Profile %#x", profile); return AVERROR_PATCHWELCOME; } @@ -2072,8 +2075,25 @@ static int decode_seq_header(AVSContext *h) av_log(h->avctx, AV_LOG_ERROR, "Dimensions invalid\n"); return AVERROR_INVALIDDATA; } - skip_bits(&h->gb, 2); //chroma format - skip_bits(&h->gb, 3); //sample_precision + chroma_format = get_bits(&h->gb, 2); + sample_precision = get_bits(&h->gb, 3); + /* the Broadcasting macroblock layer is written for 8 bit 4:2:0 */ + if (profile == AV_PROFILE_CAVS_BROADCASTING) { + if (sample_precision != 1) { + av_log(h->avctx, AV_LOG_ERROR, + "sample_precision %d is not 8 bit\n", sample_precision); + return AVERROR_INVALIDDATA; + } + if (chroma_format == 2) { + avpriv_request_sample(h->avctx, "4:2:2 chroma"); + return AVERROR_PATCHWELCOME; + } + if (chroma_format != 1) { + av_log(h->avctx, AV_LOG_ERROR, + "chroma_format %d is reserved\n", chroma_format); + return AVERROR_INVALIDDATA; + } + } aspect_ratio = get_bits(&h->gb, 4); frame_rate_code = get_bits(&h->gb, 4); if (frame_rate_code == 0 || frame_rate_code > 13) { @@ -2365,7 +2385,7 @@ static int cavs_decode_frame(AVCodecContext *avctx, AVFrame *rframe, const FFCodec ff_cavs_decoder = { .p.name = "cavs", - CODEC_LONG_NAME("Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)"), + CODEC_LONG_NAME("Chinese AVS (Audio Video Standard) (AVS1-P2/P16)"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_CAVS, .priv_data_size = sizeof(AVSContext), diff --git a/libavcodec/cavsdsp.c b/libavcodec/cavsdsp.c index f807ae201a..8b2fa2dde9 100644 --- a/libavcodec/cavsdsp.c +++ b/libavcodec/cavsdsp.c @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. * * DSP functions * diff --git a/libavcodec/cavsdsp.h b/libavcodec/cavsdsp.h index 2cd9298963..57cee4939f 100644 --- a/libavcodec/cavsdsp.h +++ b/libavcodec/cavsdsp.h @@ -1,5 +1,5 @@ /* - * Chinese AVS video (AVS1-P2, JiZhun profile) decoder. + * Chinese AVS video (AVS1-P2/P16, JiZhun and Broadcasting profiles) decoder. * Copyright (c) 2006 Stefan Gehrer <[email protected]> * * This file is part of FFmpeg. diff --git a/libavcodec/codec_desc.c b/libavcodec/codec_desc.c index e117b81f0c..fab1cd01b6 100644 --- a/libavcodec/codec_desc.c +++ b/libavcodec/codec_desc.c @@ -658,7 +658,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .id = AV_CODEC_ID_CAVS, .type = AVMEDIA_TYPE_VIDEO, .name = "cavs", - .long_name = NULL_IF_CONFIG_SMALL("Chinese AVS (Audio Video Standard) (AVS1-P2, JiZhun profile)"), + .long_name = NULL_IF_CONFIG_SMALL("Chinese AVS (Audio Video Standard) (AVS1-P2/P16)"), .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER, .profiles = NULL_IF_CONFIG_SMALL(ff_cavs_profiles), }, -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
