From 392acaedcb052fa64386d5d0aea4931386f72d64 Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Fri, 1 Jul 2011 14:58:24 +0200 Subject: [PATCH] ALSA: fix use of period_size. period_size is in frames, while the demuxer assumed it was in bytes, resulting in short reads. --- libavdevice/alsa-audio-dec.c | 4 ++-- libavdevice/alsa-audio.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libavdevice/alsa-audio-dec.c b/libavdevice/alsa-audio-dec.c index 2424c022d3..e3ad98b7f3 100644 --- a/libavdevice/alsa-audio-dec.c +++ b/libavdevice/alsa-audio-dec.c @@ -127,11 +127,11 @@ static int audio_read_packet(AVFormatContext *s1, AVPacket *pkt) snd_htimestamp_t timestamp; snd_pcm_uframes_t ts_delay; - if (av_new_packet(pkt, s->period_size) < 0) { + if (av_new_packet(pkt, s->period_size * s->frame_size) < 0) { return AVERROR(EIO); } - while ((res = snd_pcm_readi(s->h, pkt->data, pkt->size / s->frame_size)) < 0) { + while ((res = snd_pcm_readi(s->h, pkt->data, s->period_size)) < 0) { if (res == -EAGAIN) { av_free_packet(pkt); diff --git a/libavdevice/alsa-audio.h b/libavdevice/alsa-audio.h index 0f467e34c9..9b1ecb1696 100644 --- a/libavdevice/alsa-audio.h +++ b/libavdevice/alsa-audio.h @@ -45,8 +45,8 @@ typedef void (*ff_reorder_func)(const void *, void *, int); typedef struct { AVClass *class; snd_pcm_t *h; - int frame_size; ///< preferred size for reads and writes - int period_size; ///< bytes per sample * channels + int frame_size; ///< bytes per sample * channels + int period_size; ///< preferred size for reads and writes, in frames int sample_rate; ///< sample rate set by user int channels; ///< number of channels set by user void (*reorder_func)(const void *, void *, int);