|
|
|
@ -91,6 +91,7 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void |
|
|
|
|
memcpy(f->wptr, src, len); |
|
|
|
|
src = (uint8_t*)src + len; |
|
|
|
|
} |
|
|
|
|
// Write memory barrier needed for SMP here in theory
|
|
|
|
|
f->wptr += len; |
|
|
|
|
if (f->wptr >= f->end) |
|
|
|
|
f->wptr = f->buffer; |
|
|
|
@ -103,6 +104,7 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void |
|
|
|
|
|
|
|
|
|
int av_fifo_generic_read(AVFifoBuffer *f, int buf_size, void (*func)(void*, void*, int), void* dest) |
|
|
|
|
{ |
|
|
|
|
// Read memory barrier needed for SMP here in theory
|
|
|
|
|
do { |
|
|
|
|
int len = FFMIN(f->end - f->rptr, buf_size); |
|
|
|
|
if(func) func(dest, f->rptr, len); |
|
|
|
@ -110,6 +112,7 @@ int av_fifo_generic_read(AVFifoBuffer *f, int buf_size, void (*func)(void*, void |
|
|
|
|
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); |
|
|
|
|