From 2625b621ce7eb2d5f2f42d2a6dff37bffce3c726 Mon Sep 17 00:00:00 2001 From: Luca Barbato <lu_zero@gentoo.org> Date: Mon, 14 Nov 2011 15:53:59 +0100 Subject: [PATCH] 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@gmail.com> for pointing the issue and providing an initial fix. --- libavdevice/pulse.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavdevice/pulse.c b/libavdevice/pulse.c index 1edd24fdd9d..41f88b541f3 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; } -- GitLab