annotate fifo.h @ 510:b7593ce78422 libavutil

Make av_fifo*_read() ignore the available amount of data. This is more efficient as in practice the check is redundant most of the time. Callers which do not know if enough data is available have to check it with av_fifo_size(). Doing the check in *read() means the caller has no choice to skip the check when its known to be redundant. Also the return value was never documented in a public header so changing it should not break the API. Besides this fixes the case where read() failed on a 100% full fifo.
author michael
date Sun, 25 May 2008 22:20:39 +0000
parents e3d6654d68f0
children 5accd0bccc76
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
263
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
1 /*
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
2 * This file is part of FFmpeg.
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
3 *
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
4 * FFmpeg is free software; you can redistribute it and/or
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
5 * modify it under the terms of the GNU Lesser General Public
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
6 * License as published by the Free Software Foundation; either
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
7 * version 2.1 of the License, or (at your option) any later version.
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
8 *
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
9 * FFmpeg is distributed in the hope that it will be useful,
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
12 * Lesser General Public License for more details.
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
13 *
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
14 * You should have received a copy of the GNU Lesser General Public
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
15 * License along with FFmpeg; if not, write to the Free Software
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
17 */
4a904af6d8f4 Add missing license headers.
diego
parents: 110
diff changeset
18
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
19 /**
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
20 * @file fifo.h
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
21 * A very simple circular buffer FIFO implementation.
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
22 */
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
23
392
d0f3bb6e367e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 343
diff changeset
24 #ifndef FFMPEG_FIFO_H
d0f3bb6e367e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 343
diff changeset
25 #define FFMPEG_FIFO_H
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
26
343
f21d1907d47c include all prerequisites in header files
mru
parents: 268
diff changeset
27 #include <stdint.h>
502
e3d6654d68f0 add necessary #includes in headers
mru
parents: 493
diff changeset
28 #include "common.h"
343
f21d1907d47c include all prerequisites in header files
mru
parents: 268
diff changeset
29
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
30 typedef struct AVFifoBuffer {
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
31 uint8_t *buffer;
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
32 uint8_t *rptr, *wptr, *end;
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
33 } AVFifoBuffer;
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
34
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
35 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
36 * Initializes an AVFifoBuffer.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
37 * @param *f AVFifoBuffer to initialize
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
38 * @param size of FIFO
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
39 * @return <0 for failure >=0 otherwise
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
40 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
41 int av_fifo_init(AVFifoBuffer *f, int size);
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
42
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
43 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
44 * Frees an AVFifoBuffer.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
45 * @param *f AVFifoBuffer to free
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
46 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
47 void av_fifo_free(AVFifoBuffer *f);
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
48
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
49 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
50 * Returns the amount of data in bytes in the AVFifoBuffer, that is the
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
51 * amount of data you can read from it.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
52 * @param *f AVFifoBuffer to read from
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
53 * @return size
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
54 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
55 int av_fifo_size(AVFifoBuffer *f);
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
56
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
57 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
58 * Reads data from an AVFifoBuffer.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
59 * @param *f AVFifoBuffer to read from
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
60 * @param *buf data destination
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
61 * @param buf_size number of bytes to read
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
62 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
63 int av_fifo_read(AVFifoBuffer *f, uint8_t *buf, int buf_size);
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
64
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
65 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
66 * Feeds data from an AVFifoBuffer to a user supplied callback.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
67 * @param *f AVFifoBuffer to read from
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
68 * @param buf_size number of bytes to read
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
69 * @param *func generic read function
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
70 * @param *dest data destination
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
71 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
72 int av_fifo_generic_read(AVFifoBuffer *f, int buf_size, void (*func)(void*, void*, int), void* dest);
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
73
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
74 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
75 * Writes data into an AVFifoBuffer.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
76 * @param *f AVFifoBuffer to write to
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
77 * @param *buf data source
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
78 * @param size data size
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
79 */
492
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
80 attribute_deprecated void av_fifo_write(AVFifoBuffer *f, const uint8_t *buf, int size);
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
81
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
82 /**
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
83 * Feeds data from a user supplied callback to an AVFifoBuffer.
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
84 * @param *f AVFifoBuffer to write to
493
97dd9756349c cosmetics (by Bj«Órn Axelsson)
benoit
parents: 492
diff changeset
85 * @param *src data source
492
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
86 * @param size number of bytes to write
493
97dd9756349c cosmetics (by Bj«Órn Axelsson)
benoit
parents: 492
diff changeset
87 * @param *func generic write function. First parameter is src,
492
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
88 * second is dest_buf, third is dest_buf_size.
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
89 * func must return the number of bytes written to dest_buf, or <= 0 to
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
90 * indicate no more data available to write.
493
97dd9756349c cosmetics (by Bj«Órn Axelsson)
benoit
parents: 492
diff changeset
91 * If func is NULL, src is interpreted as a simple byte array for source data.
492
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
92 * @return the number of bytes written to the fifo.
75f096258d14 Add a generic write function to av_fifo.
benoit
parents: 392
diff changeset
93 */
493
97dd9756349c cosmetics (by Bj«Órn Axelsson)
benoit
parents: 492
diff changeset
94 int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int));
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
95
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
96 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
97 * Resizes an AVFifoBuffer.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
98 * @param *f AVFifoBuffer to resize
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
99 * @param size new AVFifoBuffer size in bytes
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
100 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
101 void av_fifo_realloc(AVFifoBuffer *f, unsigned int size);
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
102
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
103 /**
268
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
104 * Reads and discards the specified amount of data from an AVFifoBuffer.
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
105 * @param *f AVFifoBuffer to read from
d64157d7a30f Improve Doxygen documentation, inspired by Michael's description.
diego
parents: 264
diff changeset
106 * @param size amount of data to read in bytes
264
73376a65f2e1 Doxygen documentation for all functions, patch by Dujardin Bernard,
diego
parents: 263
diff changeset
107 */
110
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
108 void av_fifo_drain(AVFifoBuffer *f, int size);
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
109
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
110 static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int offs)
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
111 {
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
112 uint8_t *ptr = f->rptr + offs;
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
113 if (ptr >= f->end)
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
114 ptr -= f->end - f->buffer;
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
115 return *ptr;
813b7366ac3f * Moving FifoBuffer out of libavformat/avformat.h and
romansh
parents:
diff changeset
116 }
392
d0f3bb6e367e Add FFMPEG_ prefix to all multiple inclusion guards.
diego
parents: 343
diff changeset
117 #endif /* FFMPEG_FIFO_H */