lavc: update pkt_duration for skipped samples.
Also: factor the the computation of the timestamp difference.
This commit is contained in:
parent
d853ed46b1
commit
cd08900393
@ -1664,10 +1664,15 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
|
||||
av_samples_copy(frame->extended_data, frame->extended_data, 0, avctx->internal->skip_samples,
|
||||
frame->nb_samples - avctx->internal->skip_samples, avctx->channels, frame->format);
|
||||
if(avctx->pkt_timebase.num && avctx->sample_rate) {
|
||||
int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples,
|
||||
(AVRational){1, avctx->sample_rate},
|
||||
avctx->pkt_timebase);
|
||||
if(frame->pkt_pts!=AV_NOPTS_VALUE)
|
||||
frame->pkt_pts += av_rescale_q(avctx->internal->skip_samples,(AVRational){1, avctx->sample_rate}, avctx->pkt_timebase);
|
||||
frame->pkt_pts += diff_ts;
|
||||
if(frame->pkt_dts!=AV_NOPTS_VALUE)
|
||||
frame->pkt_dts += av_rescale_q(avctx->internal->skip_samples,(AVRational){1, avctx->sample_rate}, avctx->pkt_timebase);
|
||||
frame->pkt_dts += diff_ts;
|
||||
if (frame->pkt_duration >= diff_ts)
|
||||
frame->pkt_duration -= diff_ts;
|
||||
} else {
|
||||
av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user