diff options
author | Paul B Mahol <onemda@gmail.com> | 2015-08-04 14:41:35 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2015-08-19 16:15:13 +0000 |
commit | 2fa019958b4f8d1412f0e021c0c0aa0645ec6c7a (patch) | |
tree | f17f742e8043dfde6d6f39b066ac0bcac4e8920b /libavutil/fifo.c | |
parent | e6b8797b827ce3c5eb0608725db7e7e85d78864b (diff) | |
download | ffmpeg-2fa019958b4f8d1412f0e021c0c0aa0645ec6c7a.tar.gz |
avfilter: add showfreqs filter
Diffstat (limited to 'libavutil/fifo.c')
-rw-r--r-- | libavutil/fifo.c | 26 |
1 files changed, 26 insertions, 0 deletions
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)) { |