From 2fa019958b4f8d1412f0e021c0c0aa0645ec6c7a Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Tue, 4 Aug 2015 14:41:35 +0200 Subject: avfilter: add showfreqs filter --- libavutil/fifo.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'libavutil/fifo.c') diff --git a/libavutil/fifo.c b/libavutil/fifo.c index f2fe93de75..07fb4ec811 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -148,6 +148,32 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, return total - size; } +int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, + void (*func)(void *, void *, int)) +{ +// Read memory barrier needed for SMP here in theory + uint8_t *rptr = f->rptr; + uint32_t rndx = f->rndx; + + do { + int len = FFMIN(f->end - f->rptr, buf_size); + if (func) + func(dest, f->rptr, len); + else { + memcpy(dest, f->rptr, len); + dest = (uint8_t *)dest + len; + } +// memory barrier needed for SMP here in theory + av_fifo_drain(f, len); + buf_size -= len; + } while (buf_size > 0); + + f->rptr = rptr; + f->rndx = rndx; + + return 0; +} + int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void *, void *, int)) { -- cgit v1.2.3