On Mon, Jul 04, 2011 at 04:13:31PM +0200, Stefano Sabatini wrote:
>
> Updated with changes:
>
> * extended documentation, clarify the meaning of offs and of the returned
> pointer
> * fix a bug (tested this time)
> * keep unchanged the av_fifo_peek() code for avoiding performance
> regressions
>
> >From 0e9763f0dc6f0ca5de4de3f055a37c566c755cb4 Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <[email protected]>
> Date: Wed, 29 Jun 2011 17:30:23 +0200
> Subject: [PATCH] fifo: add av_fifo_peek2()
>
> The new function provides a more generic interface than the one of by
> av_fifo_peek() for peeking at a FIFO buffer data.
s/than the one by//
> --- a/libavutil/fifo.h
> +++ b/libavutil/fifo.h
> @@ -113,4 +113,25 @@ static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int
> offs)
> +
> +/**
> + * Return a pointer to the data offset by offs stored in a FIFO
> + * buffer. The FIFO buffer is not modified.
Return a pointer to the data stored in a FIFO buffer at a certain offset.
The FIFO buffer is not modified.
> + * The FIFO buffer is treated like a circular buffer, so the returned
> + * value always points to the allocated buffer area.
> + *
> + * @param pointer to the the FIFO buffer to peek at, must be non-NULL
f
This should have generated a new doxygen warning.
> + * @param offs an offset in bytes
> + */
> +static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs)
> +{
> + uint8_t *ptr = f->rptr + offs;
> + if (ptr >= f->end)
> + ptr = f->buffer + (ptr - f->end) % (f->end - f->buffer);
> + else if (ptr < f->buffer)
> + ptr = f->buffer + (f->end - ptr) % (f->end - f->buffer);
> + return ptr;
alternative:
uint8_t *ptr = f->rptr + offs;
if (ptr >= f->end)
ptr = ptr - f->end;
else if (ptr < f->buffer)
ptr = f->end - ptr;
return f->buffer + ptr % (f->end - f->buffer);
> --- a/libavutil/Makefile
> +++ b/libavutil/Makefile
> @@ -77,7 +77,7 @@ OBJS-$(ARCH_ARM) += arm/cpu.o
>
> -TESTPROGS = adler32 aes base64 cpu crc des eval lls md5 pca sha tree
> +TESTPROGS = adler32 aes base64 cpu crc des eval fifo lls md5 pca sha tree
> TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo
Nowadays making FATE tests out of these is all the rage.
> --- a/libavutil/fifo.c
> +++ b/libavutil/fifo.c
> @@ -127,3 +127,35 @@ void av_fifo_drain(AVFifoBuffer *f, int size)
> +
> +#ifdef TEST
> +
> +#undef printf
> +
> +int main(void)
> +{
> + /* create a fifo buffer */
FIFO
> + /* peek at fifo */
FIFO
> + for (i = -50; i < 50; i++) {
> + int *v = (int *)av_fifo_peek2(fifo, i*sizeof(int *));
> + printf("%d: %d\n", i, *v);
This can be done without an ugly cast.
Diego
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel