summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-08-22 18:56:19 +0200
committerwm4 <wm4@nowhere>2013-08-22 19:14:26 +0200
commit6f86affef533e9ac861aa60be49c032d5c23d41a (patch)
treebc2364bde79e0ad6f811c9b94c4bf98c10c92ff9 /demux
parentcd7ec016e79c5e521c80045c6cf04fedbe6e64fc (diff)
downloadmpv-6f86affef533e9ac861aa60be49c032d5c23d41a.tar.bz2
mpv-6f86affef533e9ac861aa60be49c032d5c23d41a.tar.xz
demux_raw: read multiple frames per packet
The rawaudio demuxer read one frame per packet, basically a few bytes, which caused insane overhead. (I found this when I couldn't play raw audio without dropouts when using -v, which printed a line per packet read.) Fix this and read 1 second of audio per packet. This is a regression since cfa5712 (merging of demux_rawaudio and demux_rawvideo).
Diffstat (limited to 'demux')
-rw-r--r--demux/demux_raw.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/demux/demux_raw.c b/demux/demux_raw.c
index 532a2b5cce..c00723a290 100644
--- a/demux/demux_raw.c
+++ b/demux/demux_raw.c
@@ -35,6 +35,7 @@
struct priv {
int frame_size;
+ int read_frames;
double frame_rate;
};
@@ -107,6 +108,7 @@ static int demux_rawaudio_open(demuxer_t *demuxer, enum demux_check check)
*p = (struct priv) {
.frame_size = samplesize * sh_audio->channels.num,
.frame_rate = samplerate,
+ .read_frames = samplerate,
};
return 0;
@@ -191,6 +193,7 @@ static int demux_rawvideo_open(demuxer_t *demuxer, enum demux_check check)
*p = (struct priv) {
.frame_size = imgsize,
.frame_rate = fps,
+ .read_frames = 1,
};
return 0;
@@ -203,7 +206,7 @@ static int raw_fill_buffer(demuxer_t *demuxer)
if (demuxer->stream->eof)
return 0;
- struct demux_packet *dp = new_demux_packet(p->frame_size);
+ struct demux_packet *dp = new_demux_packet(p->frame_size * p->read_frames);
dp->pos = stream_tell(demuxer->stream) - demuxer->movi_start;
dp->pts = (dp->pos / p->frame_size) / p->frame_rate;