[FFmpeg-cvslog] lavc: update pkt_duration for skipped samples.
Nicolas George
git at videolan.org
Thu Jul 19 23:56:00 CEST 2012
ffmpeg | branch: master | Nicolas George <nicolas.george at normalesup.org> | Sun Jul 15 16:24:59 2012 +0200| [cd089003936030c506fb7a28e9a26e028b1aece0] | committer: Nicolas George
lavc: update pkt_duration for skipped samples.
Also: factor the the computation of the timestamp difference.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cd089003936030c506fb7a28e9a26e028b1aece0
---
libavcodec/utils.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index dd9c0d1..63aa862 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -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");
}
More information about the ffmpeg-cvslog
mailing list