diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2002-11-19 18:30:03 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2002-11-19 18:30:03 +0000 |
commit | 7feb950a80c4d1769aa8611d010581e2bc712794 (patch) | |
tree | 3957dd8d6d6efda9ba2702d40d45aba1858439bd /libav/utils.c | |
parent | 4364a3e01657021646aba65b45341a00dff489ce (diff) | |
download | ffmpeg-7feb950a80c4d1769aa8611d010581e2bc712794.tar.gz |
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
Diffstat (limited to 'libav/utils.c')
-rw-r--r-- | libav/utils.c | 20 |
1 files 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, |