Commit 0cdc6d4223 for ffmpeg
commit 0cdc6d42235e0c0599b04646d21d71a816b9b1a0
Author: James Almer <jamrial@gmail.com>
Date: Wed Nov 4 10:25:27 2026 -0300
avcodec/decode: use frame sample rate for calculations related to discarded samples
Signed-off-by: James Almer <jamrial@gmail.com>
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index c9ec6a49e2..2696f8f916 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -333,9 +333,9 @@ static int discard_samples(AVCodecContext *avctx, AVFrame *frame, int64_t *disca
if (side && side->size >= 10) {
int skip_samples = AV_RL32(side->data);
if (skip_samples)
- avci->skip_samples = skip_samples;
+ avci->skip_samples = av_rescale(skip_samples, frame->sample_rate, avctx->sample_rate);
avci->skip_samples = FFMAX(0, avci->skip_samples);
- discard_padding = AV_RL32(side->data + 4);
+ discard_padding = av_rescale(AV_RL32(side->data + 4), frame->sample_rate, avctx->sample_rate);
av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n",
avci->skip_samples, (int)discard_padding);
skip_reason = AV_RL8(side->data + 8);
@@ -374,9 +374,9 @@ static int discard_samples(AVCodecContext *avctx, AVFrame *frame, int64_t *disca
} else {
av_samples_copy(frame->extended_data, frame->extended_data, 0, avci->skip_samples,
frame->nb_samples - avci->skip_samples, avctx->ch_layout.nb_channels, frame->format);
- if (avctx->pkt_timebase.num && avctx->sample_rate) {
+ if (avctx->pkt_timebase.num && frame->sample_rate) {
int64_t diff_ts = av_rescale_q(avci->skip_samples,
- (AVRational){1, avctx->sample_rate},
+ (AVRational){1, frame->sample_rate},
avctx->pkt_timebase);
if (diff_ts != AV_NOPTS_VALUE) {
if (frame->pts != AV_NOPTS_VALUE)
@@ -411,7 +411,7 @@ static int discard_samples(AVCodecContext *avctx, AVFrame *frame, int64_t *disca
} else {
if (avctx->pkt_timebase.num && avctx->sample_rate) {
int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding,
- (AVRational){1, avctx->sample_rate},
+ (AVRational){1, frame->sample_rate},
avctx->pkt_timebase);
frame->duration = diff_ts == AV_NOPTS_VALUE ? 0 : diff_ts;
} else