Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2015-08-04 15:41:35 +0300
committerPaul B Mahol <onemda@gmail.com>2015-08-19 19:15:13 +0300
commit2fa019958b4f8d1412f0e021c0c0aa0645ec6c7a (patch)
treef17f742e8043dfde6d6f39b066ac0bcac4e8920b /libavutil/fifo.c
parente6b8797b827ce3c5eb0608725db7e7e85d78864b (diff)
avfilter: add showfreqs filter
Diffstat (limited to 'libavutil/fifo.c')
-rw-r--r--libavutil/fifo.c26
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))
{