FFmpeg
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
fifo.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #include <stdio.h>
20 
21 #include "libavutil/fifo.h"
22 
23 int main(void)
24 {
25  /* create a FIFO buffer */
26  AVFifoBuffer *fifo = av_fifo_alloc(13 * sizeof(int));
27  int i, j, n;
28 
29  /* fill data */
30  for (i = 0; av_fifo_space(fifo) >= sizeof(int); i++)
31  av_fifo_generic_write(fifo, &i, sizeof(int), NULL);
32 
33  /* peek at FIFO */
34  n = av_fifo_size(fifo) / sizeof(int);
35  for (i = -n + 1; i < n; i++) {
36  int *v = (int *)av_fifo_peek2(fifo, i * sizeof(int));
37  printf("%d: %d\n", i, *v);
38  }
39  printf("\n");
40 
41  /* peek_at at FIFO */
42  n = av_fifo_size(fifo) / sizeof(int);
43  for (i = 0; i < n; i++) {
44  av_fifo_generic_peek_at(fifo, &j, i * sizeof(int), sizeof(j), NULL);
45  printf("%d: %d\n", i, j);
46  }
47  printf("\n");
48 
49  /* read data */
50  for (i = 0; av_fifo_size(fifo) >= sizeof(int); i++) {
51  av_fifo_generic_read(fifo, &j, sizeof(int), NULL);
52  printf("%d ", j);
53  }
54  printf("\n");
55 
56  /* test *ndx overflow */
57  av_fifo_reset(fifo);
58  fifo->rndx = fifo->wndx = ~(uint32_t)0 - 5;
59 
60  /* fill data */
61  for (i = 0; av_fifo_space(fifo) >= sizeof(int); i++)
62  av_fifo_generic_write(fifo, &i, sizeof(int), NULL);
63 
64  /* peek_at at FIFO */
65  n = av_fifo_size(fifo) / sizeof(int);
66  for (i = 0; i < n; i++) {
67  av_fifo_generic_peek_at(fifo, &j, i * sizeof(int), sizeof(j), NULL);
68  printf("%d: %d\n", i, j);
69  }
70 
71  av_fifo_free(fifo);
72 
73  return 0;
74 }
#define NULL
Definition: coverity.c:32
int main(void)
Definition: fifo.c:23
uint32_t rndx
Definition: fifo.h:34
int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int(*func)(void *, void *, int))
Feed data from a user-supplied callback to an AVFifoBuffer.
Definition: fifo.c:122
int av_fifo_space(const AVFifoBuffer *f)
Return the amount of space in bytes in the AVFifoBuffer, that is the amount of data you can write int...
Definition: fifo.c:82
void av_fifo_free(AVFifoBuffer *f)
Free an AVFifoBuffer.
Definition: fifo.c:55
static uint8_t * av_fifo_peek2(const AVFifoBuffer *f, int offs)
Return a pointer to the data stored in a FIFO buffer at a certain offset.
Definition: fifo.h:169
int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void(*func)(void *, void *, int))
Feed data from an AVFifoBuffer to a user-supplied callback.
Definition: fifo.c:213
int n
Definition: avisynth_c.h:547
int av_fifo_size(const AVFifoBuffer *f)
Return the amount of data in bytes in the AVFifoBuffer, that is the amount of data you can read from ...
Definition: fifo.c:77
int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void(*func)(void *, void *, int))
Feed data at specific position from an AVFifoBuffer to a user-supplied callback.
Definition: fifo.c:151
a very simple circular buffer FIFO implementation
uint32_t wndx
Definition: fifo.h:34
AVFifoBuffer * av_fifo_alloc(unsigned int size)
Initialize an AVFifoBuffer.
Definition: fifo.c:43
void av_fifo_reset(AVFifoBuffer *f)
Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied...
Definition: fifo.c:71