aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabrice Bellard <fabrice@bellard.org>2002-11-19 18:30:03 +0000
committerFabrice Bellard <fabrice@bellard.org>2002-11-19 18:30:03 +0000
commit7feb950a80c4d1769aa8611d010581e2bc712794 (patch)
tree3957dd8d6d6efda9ba2702d40d45aba1858439bd
parent4364a3e01657021646aba65b45341a00dff489ce (diff)
downloadffmpeg-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
-rw-r--r--libav/utils.c20
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,