From 7feb950a80c4d1769aa8611d010581e2bc712794 Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Tue, 19 Nov 2002 18:30:03 +0000 Subject: [PATCH] fixed output pts computation in case of pcm audio (fixes ffplay status display) Originally committed as revision 1231 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libav/utils.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/libav/utils.c b/libav/utils.c index bc706f6823..492b3c52b8 100644 --- a/libav/utils.c +++ b/libav/utils.c @@ -751,7 +751,7 @@ int av_write_frame(AVFormatContext *s, int stream_index, const uint8_t *buf, { AVStream *st; INT64 pts_mask; - int ret; + int ret, frame_size; st = s->streams[stream_index]; pts_mask = (1LL << s->pts_wrap_bits) - 1; @@ -763,8 +763,24 @@ int av_write_frame(AVFormatContext *s, int stream_index, const uint8_t *buf, /* update pts */ switch (st->codec.codec_type) { case CODEC_TYPE_AUDIO: + if (st->codec.frame_size <= 1) { + frame_size = size / st->codec.channels; + /* specific hack for pcm codecs because no frame size is provided */ + switch(st->codec.codec->id) { + case CODEC_ID_PCM_S16LE: + case CODEC_ID_PCM_S16BE: + case CODEC_ID_PCM_U16LE: + case CODEC_ID_PCM_U16BE: + frame_size >>= 1; + break; + default: + break; + } + } else { + frame_size = st->codec.frame_size; + } av_frac_add(&st->pts, - (INT64)s->pts_den * st->codec.frame_size); + (INT64)s->pts_den * frame_size); break; case CODEC_TYPE_VIDEO: av_frac_add(&st->pts,