From 7feb950a80c4d1769aa8611d010581e2bc712794 Mon Sep 17 00:00:00 2001
From: Fabrice Bellard <fabrice@bellard.org>
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 bc706f68230..492b3c52b82 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, 
-- 
GitLab