[FFmpeg-cvslog] pulse: compute frame_duration once and fix it

Luca Barbato git at videolan.org
Tue Nov 15 03:27:19 CET 2011


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Mon Nov 14 15:53:59 2011 +0100| [2625b621ce7eb2d5f2f42d2a6dff37bffce3c726] | committer: Luca Barbato

pulse: compute frame_duration once and fix it

The frame duration was calculated without taking in account the
bytes per sample.

Thanks to Lorenzo Pistone <blaffablaffa at gmail.com> for pointing
the issue and providing an initial fix.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2625b621ce7eb2d5f2f42d2a6dff37bffce3c726
---

 libavdevice/pulse.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavdevice/pulse.c b/libavdevice/pulse.c
index 1edd24f..41f88b5 100644
--- a/libavdevice/pulse.c
+++ b/libavdevice/pulse.c
@@ -46,6 +46,7 @@ typedef struct PulseData {
     int  fragment_size;
     pa_simple *s;
     int64_t pts;
+    int64_t frame_duration;
 } PulseData;
 
 static pa_sample_format_t codec_id_to_pulse_format(int codec_id) {
@@ -110,6 +111,8 @@ static av_cold int pulse_read_header(AVFormatContext *s,
     av_set_pts_info(st, 64, 1, 1000000);  /* 64 bits pts in us */
 
     pd->pts = AV_NOPTS_VALUE;
+    pd->frame_duration = (pd->frame_size * 1000000LL * 8) /
+        (pd->sample_rate * pd->channels * av_get_bits_per_sample(codec_id));
 
     return 0;
 }
@@ -119,8 +122,6 @@ static int pulse_read_packet(AVFormatContext *s, AVPacket *pkt)
     PulseData *pd  = s->priv_data;
     int res;
     pa_usec_t latency;
-    uint64_t frame_duration =
-        (pd->frame_size*1000000LL) / (pd->sample_rate * pd->channels);
 
     if (av_new_packet(pkt, pd->frame_size) < 0) {
         return AVERROR(ENOMEM);
@@ -145,7 +146,7 @@ static int pulse_read_packet(AVFormatContext *s, AVPacket *pkt)
 
     pkt->pts = pd->pts;
 
-    pd->pts += frame_duration;
+    pd->pts += pd->frame_duration;
 
     return 0;
 }



More information about the ffmpeg-cvslog mailing list