This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 37f5b5defed77c742ce053b7037b72f5eeb383e3 Author: Romain Beauxis <[email protected]> AuthorDate: Wed Nov 4 15:14:22 2026 -0600 Commit: Romain Beauxis <[email protected]> CommitDate: Sat Nov 7 15:02:36 2026 +0000 avcodec/aac_ac3_parser: derive the duration of spliced ADTS frames The parser sets the duration of an ADTS frame that does not match the probed stream from the sample count and sample rate in its header, including frames completed from buffered input. It warns when this happens, since the stream changed its frame duration mid-stream. The splice test reference now gives each section its own frame duration. --- libavcodec/aac_ac3_parser.c | 42 +++++++ libavcodec/aac_ac3_parser.h | 5 + tests/ref/fate/aac-adts-splice | 270 ++++++++++++++++++++--------------------- 3 files changed, 182 insertions(+), 135 deletions(-) diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c index 51c801214c..0cfb0bc075 100644 --- a/libavcodec/aac_ac3_parser.c +++ b/libavcodec/aac_ac3_parser.c @@ -29,6 +29,46 @@ #include "ac3_parser_internal.h" #include "adts_header.h" +#if CONFIG_AAC_PARSER +/// divisible by every ADTS sampling rate +#define ADTS_RATES_LCM 28224000 + +/** + * Set the duration of an ADTS frame that does not match the probed stream, + * as when two streams are spliced together. + * + * The ratio of the ADTS sample count to the ADTS sample rate is the frame + * duration even for HE-AAC, so it is expressed in units of + * avctx->sample_rate and the remainder carried to the next frame. + */ +static void set_spliced_adts_duration(AVCodecParserContext *s1, + AVCodecContext *avctx, + const AACADTSHeaderInfo *hdr) +{ + AACAC3ParseContext *s = s1->priv_data; + + if (avctx->frame_size <= 0 || avctx->sample_rate <= 0) + return; + + int64_t num = (int64_t)hdr->samples * avctx->sample_rate; + int mismatch = num / hdr->num_aac_frames != + (int64_t)avctx->frame_size * hdr->sample_rate; + + if (mismatch) { + if (!s->spliced) + av_log(avctx, AV_LOG_WARNING, + "ADTS frame duration changed mid-stream to " + "%d samples at %d Hz\n", hdr->samples, hdr->sample_rate); + num = num * (ADTS_RATES_LCM / hdr->sample_rate) + s->duration_rem; + s1->duration = num / ADTS_RATES_LCM; + s->duration_rem = num % ADTS_RATES_LCM; + } else { + s1->duration = 0; + } + s->spliced = mismatch; +} +#endif + int ff_aac_ac3_parse(AVCodecParserContext *s1, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, @@ -52,6 +92,7 @@ get_next: if(s->remaining_size && !s->need_next_header){ i= s->remaining_size; s->remaining_size = 0; + got_frame = avctx->codec_id == AV_CODEC_ID_AAC; }else{ //we need a header first len=0; for(i=s->remaining_size; i<buf_size; i++){ @@ -156,6 +197,7 @@ get_next: avctx->profile = hdr.object_type - 1; /* ADTS does not support USAC */ s1->key_frame = 1; + set_spliced_adts_duration(s1, avctx, &hdr); bit_rate = hdr.bit_rate; #endif } diff --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h index e3259d1841..027180129b 100644 --- a/libavcodec/aac_ac3_parser.h +++ b/libavcodec/aac_ac3_parser.h @@ -39,6 +39,11 @@ typedef struct AACAC3ParseContext { int need_next_header; int frame_number; + /// remainder of the spliced ADTS frame durations, in units of + /// 1 / 28224000 of an avctx->sample_rate sample + int64_t duration_rem; + /// whether the last ADTS frame did not match the probed stream + int spliced; } AACAC3ParseContext; int ff_aac_ac3_parse(AVCodecParserContext *s1, diff --git a/tests/ref/fate/aac-adts-splice b/tests/ref/fate/aac-adts-splice index 6bc6752fda..f566b92ec7 100644 --- a/tests/ref/fate/aac-adts-splice +++ b/tests/ref/fate/aac-adts-splice @@ -92,138 +92,138 @@ 0, 56360960, 56360960, 655360, 339, 0xeeb3a879 0, 57016320, 57016320, 655360, 263, 0xde7081c0 0, 57671680, 57671680, 655360, 102, 0x4e1c2de2 -0, 58327040, 58327040, 655360, 32, 0xb2a5083d -0, 58982400, 58982400, 655360, 250, 0xa3c47436 -0, 59637760, 59637760, 655360, 164, 0xb3a1472d -0, 60293120, 60293120, 655360, 127, 0x22a94206 -0, 60948480, 60948480, 655360, 121, 0x1f1437d1 -0, 61603840, 61603840, 655360, 291, 0xc1ce79c1 -0, 62259200, 62259200, 655360, 218, 0x765164b4 -0, 62914560, 62914560, 655360, 213, 0x8606661a -0, 63569920, 63569920, 655360, 209, 0x0ff95aff -0, 64225280, 64225280, 655360, 329, 0xf338a37b -0, 64880640, 64880640, 655360, 174, 0x5e3751b9 -0, 65536000, 65536000, 655360, 155, 0x90434d85 -0, 66191360, 66191360, 655360, 157, 0x29cb47d8 -0, 66846720, 66846720, 655360, 417, 0xccf5d3c4 -0, 67502080, 67502080, 655360, 286, 0xeb837e03 -0, 68157440, 68157440, 655360, 258, 0xab947983 -0, 68812800, 68812800, 655360, 188, 0xd7c44bb9 -0, 69468160, 69468160, 655360, 371, 0x5330af51 -0, 70123520, 70123520, 655360, 253, 0xab09751d -0, 70778880, 70778880, 655360, 190, 0x0cbf5062 -0, 71434240, 71434240, 655360, 228, 0xba71619e -0, 72089600, 72089600, 655360, 356, 0x0a1db3dd -0, 72744960, 72744960, 655360, 286, 0x8aa48ae0 -0, 73400320, 73400320, 655360, 282, 0x612d8310 -0, 74055680, 74055680, 655360, 310, 0xb9fc92d6 -0, 74711040, 74711040, 655360, 252, 0xaace78d6 -0, 75366400, 75366400, 655360, 225, 0xf2936ae1 -0, 76021760, 76021760, 655360, 218, 0x1a496cb8 -0, 76677120, 76677120, 655360, 230, 0x4d1f6f11 -0, 77332480, 77332480, 655360, 348, 0x4780a1fa -0, 77987840, 77987840, 655360, 289, 0x5399817b -0, 78643200, 78643200, 655360, 288, 0xc43483f2 -0, 79298560, 79298560, 655360, 378, 0x65c2b3f3 -0, 79953920, 79953920, 655360, 248, 0x5d047119 -0, 80609280, 80609280, 655360, 197, 0xb8c25412 -0, 81264640, 81264640, 655360, 205, 0xf8106336 -0, 81920000, 81920000, 655360, 251, 0x5805768f -0, 82575360, 82575360, 655360, 364, 0x08f3b150 -0, 83230720, 83230720, 655360, 287, 0x855e825a -0, 83886080, 83886080, 655360, 283, 0xd1d682f7 -0, 84541440, 84541440, 655360, 404, 0x88fcc0b8 -0, 85196800, 85196800, 655360, 290, 0x78468752 -0, 85852160, 85852160, 655360, 274, 0x1f5e7d1a -0, 86507520, 86507520, 655360, 228, 0x525069de -0, 87162880, 87162880, 655360, 288, 0x245b8192 -0, 87818240, 87818240, 655360, 123, 0x8396352b -0, 88473600, 88473600, 655360, 13, 0x2a760491 -0, 89128960, 89128960, 655360, 224, 0xda527385 -0, 89784320, 89784320, 655360, 155, 0xd0b04d7c -0, 90439680, 90439680, 655360, 180, 0xcd6e56d8 -0, 91095040, 91095040, 655360, 163, 0xd86649bc -0, 91750400, 91750400, 655360, 185, 0xbe51558b -0, 92405760, 92405760, 655360, 170, 0xce135016 -0, 93061120, 93061120, 655360, 150, 0x08c646de -0, 93716480, 93716480, 655360, 167, 0x4e78542c -0, 94371840, 94371840, 655360, 188, 0xe02a5fb8 -0, 95027200, 95027200, 655360, 264, 0x67717fc5 -0, 95682560, 95682560, 655360, 215, 0x3a376a73 -0, 96337920, 96337920, 655360, 212, 0x72fc6470 -0, 96993280, 96993280, 655360, 219, 0x0908638c -0, 97648640, 97648640, 655360, 220, 0x02616a55 -0, 98304000, 98304000, 655360, 235, 0x2e8d72f3 -0, 98959360, 98959360, 655360, 161, 0x292f495e -0, 99614720, 99614720, 655360, 362, 0xd7ecabb5 -0, 100270080, 100270080, 655360, 167, 0xf9f14f81 -0, 100925440, 100925440, 655360, 212, 0x0f9962a3 -0, 101580800, 101580800, 655360, 202, 0x33546313 -0, 102236160, 102236160, 655360, 222, 0xa849661e -0, 102891520, 102891520, 655360, 296, 0x78c78bb0 -0, 103546880, 103546880, 655360, 249, 0x4ea27a68 -0, 104202240, 104202240, 655360, 273, 0x8bfa83c9 -0, 104857600, 104857600, 655360, 417, 0xd22fc8c4 -0, 105512960, 105512960, 655360, 291, 0x45098fea -0, 106168320, 106168320, 655360, 275, 0x2ffe8800 -0, 106823680, 106823680, 655360, 283, 0x2de58c97 -0, 107479040, 107479040, 655360, 292, 0xc6898be1 -0, 108134400, 108134400, 655360, 271, 0x1b4680ae -0, 108789760, 108789760, 655360, 301, 0xbb1d8cac -0, 109445120, 109445120, 655360, 301, 0x52fd94f6 -0, 110100480, 110100480, 655360, 294, 0x73eb9af0 -0, 110755840, 110755840, 655360, 298, 0xd2009a01 -0, 111411200, 111411200, 655360, 298, 0xebde946c -0, 112066560, 112066560, 655360, 329, 0xf7989b97 -0, 112721920, 112721920, 655360, 288, 0xa28e8e9f -0, 113377280, 113377280, 655360, 326, 0xe03fac7d -0, 114032640, 114032640, 655360, 303, 0xad469175 -0, 114688000, 114688000, 655360, 308, 0x27768a57 -0, 115343360, 115343360, 655360, 400, 0xc27ec70c -0, 115998720, 115998720, 655360, 322, 0xdf3e9c47 -0, 116654080, 116654080, 655360, 289, 0x5ecd8fab -0, 117309440, 117309440, 655360, 309, 0x35d39dbe -0, 117964800, 117964800, 655360, 337, 0x54bba5c7 -0, 118620160, 118620160, 655360, 320, 0x51cba076 -0, 119275520, 119275520, 655360, 297, 0x960887b8 -0, 119930880, 119930880, 655360, 399, 0xf214c51d -0, 120586240, 120586240, 655360, 338, 0x7c38a5da -0, 121241600, 121241600, 655360, 323, 0x84289bd4 -0, 121896960, 121896960, 655360, 324, 0xbee693a1 -0, 122552320, 122552320, 655360, 315, 0x663d9c1d -0, 123207680, 123207680, 655360, 326, 0xcd979e4c -0, 123863040, 123863040, 655360, 309, 0x9d769cbf -0, 124518400, 124518400, 655360, 325, 0x0ca7a67c -0, 125173760, 125173760, 655360, 333, 0x8ac79e64 -0, 125829120, 125829120, 655360, 384, 0xf6bfb642 -0, 126484480, 126484480, 655360, 307, 0x98e490bd -0, 127139840, 127139840, 655360, 312, 0xcdde9437 -0, 127795200, 127795200, 655360, 341, 0x26f89e97 -0, 128450560, 128450560, 655360, 311, 0x6351929c -0, 129105920, 129105920, 655360, 308, 0x41bb950c -0, 129761280, 129761280, 655360, 336, 0x7440a7d4 -0, 130416640, 130416640, 655360, 282, 0xdaad83c0 -0, 131072000, 131072000, 655360, 317, 0xc4ff9d47 -0, 131727360, 131727360, 655360, 319, 0xab98a250 -0, 132382720, 132382720, 655360, 287, 0x01c1842e -0, 133038080, 133038080, 655360, 307, 0xf1c1930a -0, 133693440, 133693440, 655360, 309, 0x14e89fc2 -0, 134348800, 134348800, 655360, 272, 0xdebd7eb0 -0, 135004160, 135004160, 655360, 287, 0x4f77861e -0, 135659520, 135659520, 655360, 386, 0x9bfabb71 -0, 136314880, 136314880, 655360, 336, 0xb7749e9e -0, 136970240, 136970240, 655360, 306, 0xc1368ed3 -0, 137625600, 137625600, 655360, 316, 0xf4739a34 -0, 138280960, 138280960, 655360, 343, 0xfc12a2ea -0, 138936320, 138936320, 655360, 317, 0x3e8797c0 -0, 139591680, 139591680, 655360, 309, 0x4cf89c82 -0, 140247040, 140247040, 655360, 333, 0x64819d40 -0, 140902400, 140902400, 655360, 326, 0x38ad9a7c -0, 141557760, 141557760, 655360, 325, 0xbe1c95a7 -0, 142213120, 142213120, 655360, 296, 0xca1d960b -0, 142868480, 142868480, 655360, 308, 0xa29c9715 -0, 143523840, 143523840, 655360, 343, 0xd24da6cc -0, 144179200, 144179200, 655360, 318, 0xb0fb9ba3 -0, 144834560, 144834560, 655360, 339, 0xeeb3a879 -0, 145489920, 145489920, 655360, 263, 0xde7081c0 -0, 146145280, 146145280, 655360, 102, 0x4e1c2de2 +0, 58327040, 58327040, 1310720, 32, 0xb2a5083d +0, 59637760, 59637760, 1310720, 250, 0xa3c47436 +0, 60948480, 60948480, 1310720, 164, 0xb3a1472d +0, 62259200, 62259200, 1310720, 127, 0x22a94206 +0, 63569920, 63569920, 1310720, 121, 0x1f1437d1 +0, 64880640, 64880640, 1310720, 291, 0xc1ce79c1 +0, 66191360, 66191360, 1310720, 218, 0x765164b4 +0, 67502080, 67502080, 1310720, 213, 0x8606661a +0, 68812800, 68812800, 1310720, 209, 0x0ff95aff +0, 70123520, 70123520, 1310720, 329, 0xf338a37b +0, 71434240, 71434240, 1310720, 174, 0x5e3751b9 +0, 72744960, 72744960, 1310720, 155, 0x90434d85 +0, 74055680, 74055680, 1310720, 157, 0x29cb47d8 +0, 75366400, 75366400, 1310720, 417, 0xccf5d3c4 +0, 76677120, 76677120, 1310720, 286, 0xeb837e03 +0, 77987840, 77987840, 1310720, 258, 0xab947983 +0, 79298560, 79298560, 1310720, 188, 0xd7c44bb9 +0, 80609280, 80609280, 1310720, 371, 0x5330af51 +0, 81920000, 81920000, 1310720, 253, 0xab09751d +0, 83230720, 83230720, 1310720, 190, 0x0cbf5062 +0, 84541440, 84541440, 1310720, 228, 0xba71619e +0, 85852160, 85852160, 1310720, 356, 0x0a1db3dd +0, 87162880, 87162880, 1310720, 286, 0x8aa48ae0 +0, 88473600, 88473600, 1310720, 282, 0x612d8310 +0, 89784320, 89784320, 1310720, 310, 0xb9fc92d6 +0, 91095040, 91095040, 1310720, 252, 0xaace78d6 +0, 92405760, 92405760, 1310720, 225, 0xf2936ae1 +0, 93716480, 93716480, 1310720, 218, 0x1a496cb8 +0, 95027200, 95027200, 1310720, 230, 0x4d1f6f11 +0, 96337920, 96337920, 1310720, 348, 0x4780a1fa +0, 97648640, 97648640, 1310720, 289, 0x5399817b +0, 98959360, 98959360, 1310720, 288, 0xc43483f2 +0, 100270080, 100270080, 1310720, 378, 0x65c2b3f3 +0, 101580800, 101580800, 1310720, 248, 0x5d047119 +0, 102891520, 102891520, 1310720, 197, 0xb8c25412 +0, 104202240, 104202240, 1310720, 205, 0xf8106336 +0, 105512960, 105512960, 1310720, 251, 0x5805768f +0, 106823680, 106823680, 1310720, 364, 0x08f3b150 +0, 108134400, 108134400, 1310720, 287, 0x855e825a +0, 109445120, 109445120, 1310720, 283, 0xd1d682f7 +0, 110755840, 110755840, 1310720, 404, 0x88fcc0b8 +0, 112066560, 112066560, 1310720, 290, 0x78468752 +0, 113377280, 113377280, 1310720, 274, 0x1f5e7d1a +0, 114688000, 114688000, 1310720, 228, 0x525069de +0, 115998720, 115998720, 1310720, 288, 0x245b8192 +0, 117309440, 117309440, 1310720, 123, 0x8396352b +0, 118620160, 118620160, 655360, 13, 0x2a760491 +0, 119275520, 119275520, 655360, 224, 0xda527385 +0, 119930880, 119930880, 655360, 155, 0xd0b04d7c +0, 120586240, 120586240, 655360, 180, 0xcd6e56d8 +0, 121241600, 121241600, 655360, 163, 0xd86649bc +0, 121896960, 121896960, 655360, 185, 0xbe51558b +0, 122552320, 122552320, 655360, 170, 0xce135016 +0, 123207680, 123207680, 655360, 150, 0x08c646de +0, 123863040, 123863040, 655360, 167, 0x4e78542c +0, 124518400, 124518400, 655360, 188, 0xe02a5fb8 +0, 125173760, 125173760, 655360, 264, 0x67717fc5 +0, 125829120, 125829120, 655360, 215, 0x3a376a73 +0, 126484480, 126484480, 655360, 212, 0x72fc6470 +0, 127139840, 127139840, 655360, 219, 0x0908638c +0, 127795200, 127795200, 655360, 220, 0x02616a55 +0, 128450560, 128450560, 655360, 235, 0x2e8d72f3 +0, 129105920, 129105920, 655360, 161, 0x292f495e +0, 129761280, 129761280, 655360, 362, 0xd7ecabb5 +0, 130416640, 130416640, 655360, 167, 0xf9f14f81 +0, 131072000, 131072000, 655360, 212, 0x0f9962a3 +0, 131727360, 131727360, 655360, 202, 0x33546313 +0, 132382720, 132382720, 655360, 222, 0xa849661e +0, 133038080, 133038080, 655360, 296, 0x78c78bb0 +0, 133693440, 133693440, 655360, 249, 0x4ea27a68 +0, 134348800, 134348800, 655360, 273, 0x8bfa83c9 +0, 135004160, 135004160, 655360, 417, 0xd22fc8c4 +0, 135659520, 135659520, 655360, 291, 0x45098fea +0, 136314880, 136314880, 655360, 275, 0x2ffe8800 +0, 136970240, 136970240, 655360, 283, 0x2de58c97 +0, 137625600, 137625600, 655360, 292, 0xc6898be1 +0, 138280960, 138280960, 655360, 271, 0x1b4680ae +0, 138936320, 138936320, 655360, 301, 0xbb1d8cac +0, 139591680, 139591680, 655360, 301, 0x52fd94f6 +0, 140247040, 140247040, 655360, 294, 0x73eb9af0 +0, 140902400, 140902400, 655360, 298, 0xd2009a01 +0, 141557760, 141557760, 655360, 298, 0xebde946c +0, 142213120, 142213120, 655360, 329, 0xf7989b97 +0, 142868480, 142868480, 655360, 288, 0xa28e8e9f +0, 143523840, 143523840, 655360, 326, 0xe03fac7d +0, 144179200, 144179200, 655360, 303, 0xad469175 +0, 144834560, 144834560, 655360, 308, 0x27768a57 +0, 145489920, 145489920, 655360, 400, 0xc27ec70c +0, 146145280, 146145280, 655360, 322, 0xdf3e9c47 +0, 146800640, 146800640, 655360, 289, 0x5ecd8fab +0, 147456000, 147456000, 655360, 309, 0x35d39dbe +0, 148111360, 148111360, 655360, 337, 0x54bba5c7 +0, 148766720, 148766720, 655360, 320, 0x51cba076 +0, 149422080, 149422080, 655360, 297, 0x960887b8 +0, 150077440, 150077440, 655360, 399, 0xf214c51d +0, 150732800, 150732800, 655360, 338, 0x7c38a5da +0, 151388160, 151388160, 655360, 323, 0x84289bd4 +0, 152043520, 152043520, 655360, 324, 0xbee693a1 +0, 152698880, 152698880, 655360, 315, 0x663d9c1d +0, 153354240, 153354240, 655360, 326, 0xcd979e4c +0, 154009600, 154009600, 655360, 309, 0x9d769cbf +0, 154664960, 154664960, 655360, 325, 0x0ca7a67c +0, 155320320, 155320320, 655360, 333, 0x8ac79e64 +0, 155975680, 155975680, 655360, 384, 0xf6bfb642 +0, 156631040, 156631040, 655360, 307, 0x98e490bd +0, 157286400, 157286400, 655360, 312, 0xcdde9437 +0, 157941760, 157941760, 655360, 341, 0x26f89e97 +0, 158597120, 158597120, 655360, 311, 0x6351929c +0, 159252480, 159252480, 655360, 308, 0x41bb950c +0, 159907840, 159907840, 655360, 336, 0x7440a7d4 +0, 160563200, 160563200, 655360, 282, 0xdaad83c0 +0, 161218560, 161218560, 655360, 317, 0xc4ff9d47 +0, 161873920, 161873920, 655360, 319, 0xab98a250 +0, 162529280, 162529280, 655360, 287, 0x01c1842e +0, 163184640, 163184640, 655360, 307, 0xf1c1930a +0, 163840000, 163840000, 655360, 309, 0x14e89fc2 +0, 164495360, 164495360, 655360, 272, 0xdebd7eb0 +0, 165150720, 165150720, 655360, 287, 0x4f77861e +0, 165806080, 165806080, 655360, 386, 0x9bfabb71 +0, 166461440, 166461440, 655360, 336, 0xb7749e9e +0, 167116800, 167116800, 655360, 306, 0xc1368ed3 +0, 167772160, 167772160, 655360, 316, 0xf4739a34 +0, 168427520, 168427520, 655360, 343, 0xfc12a2ea +0, 169082880, 169082880, 655360, 317, 0x3e8797c0 +0, 169738240, 169738240, 655360, 309, 0x4cf89c82 +0, 170393600, 170393600, 655360, 333, 0x64819d40 +0, 171048960, 171048960, 655360, 326, 0x38ad9a7c +0, 171704320, 171704320, 655360, 325, 0xbe1c95a7 +0, 172359680, 172359680, 655360, 296, 0xca1d960b +0, 173015040, 173015040, 655360, 308, 0xa29c9715 +0, 173670400, 173670400, 655360, 343, 0xd24da6cc +0, 174325760, 174325760, 655360, 318, 0xb0fb9ba3 +0, 174981120, 174981120, 655360, 339, 0xeeb3a879 +0, 175636480, 175636480, 655360, 263, 0xde7081c0 +0, 176291840, 176291840, 655360, 102, 0x4e1c2de2 -- 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]
