From e3c0fb1aee806758b1de8c148696afe5b0333701 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 21 Jun 2013 21:14:38 +0200 Subject: demux_lavf: use stream_peek() instead of read/unread Simpler, reduces the amount of copying. We still have to malloc+memcpy the probe buffer though, because padding with FF_INPUT_BUFFER_PADDING_SIZE is required by libavformat. --- demux/demux_lavf.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index d8e8109c93..48e79e949b 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -267,12 +267,11 @@ static int lavf_check_file(demuxer_t *demuxer) while (avpd.buf_size < PROBE_BUF_SIZE) { int nsize = av_clip(avpd.buf_size * 2, INITIAL_PROBE_SIZE, PROBE_BUF_SIZE); - int read_size = stream_read(s, avpd.buf + avpd.buf_size, - nsize - avpd.buf_size); - if (read_size <= 0) + bstr buf = stream_peek(s, nsize); + if (buf.len <= avpd.buf_size) break; - - avpd.buf_size += read_size; + memcpy(avpd.buf, buf.start, buf.len); + avpd.buf_size = buf.len; int score = 0; priv->avif = av_probe_input_format2(&avpd, avpd.buf_size > 0, &score); @@ -294,7 +293,6 @@ static int lavf_check_file(demuxer_t *demuxer) priv->avif = NULL; } - stream_unread_buffer(s, avpd.buf, avpd.buf_size); av_free(avpd.buf); if (!priv->avif) { -- cgit v1.2.3