summaryrefslogtreecommitdiff
path: root/libavdevice
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2011-07-01 14:58:24 +0200
committerNicolas George <nicolas.george@normalesup.org>2011-07-01 18:18:53 +0200
commit392acaedcb052fa64386d5d0aea4931386f72d64 (patch)
treed9d9496b59806b2e5a92d7c5bea589d60662104b /libavdevice
parent46edd3a01b68f7a1ca833510bef39f599a5055c9 (diff)
ALSA: fix use of period_size.
period_size is in frames, while the demuxer assumed it was in bytes, resulting in short reads.
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/alsa-audio-dec.c4
-rw-r--r--libavdevice/alsa-audio.h4
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);