From 2625b621ce7eb2d5f2f42d2a6dff37bffce3c726 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Mon, 14 Nov 2011 15:53:59 +0100 Subject: 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 for pointing the issue and providing an initial fix. --- libavdevice/pulse.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'libavdevice/pulse.c') diff --git a/libavdevice/pulse.c b/libavdevice/pulse.c index 1edd24fdd9..41f88b541f 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; } -- cgit v1.2.3