| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of FFmpeg. | 2 * This file is part of FFmpeg. |
| 3 * | 3 * |
| 4 * FFmpeg is free software; you can redistribute it and/or | 4 * FFmpeg is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Lesser General Public | 5 * modify it under the terms of the GNU Lesser General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2.1 of the License, or (at your option) any later version. | 7 * version 2.1 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * FFmpeg is distributed in the hope that it will be useful, | 9 * FFmpeg is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 * Lesser General Public License for more details. | 12 * Lesser General Public License for more details. |
| 13 * | 13 * |
| 14 * You should have received a copy of the GNU Lesser General Public | 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 | 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 | 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| 17 */ | 17 */ |
| 18 | 18 |
| 19 /** | 19 /** |
| 20 * @file fifo.h | 20 * @file libavutil/fifo.h |
| 21 * A very simple circular buffer FIFO implementation. | 21 * a very simple circular buffer FIFO implementation |
| 22 */ | 22 */ |
| 23 | 23 |
| 24 #ifndef AVUTIL_FIFO_H | 24 #ifndef AVUTIL_FIFO_H |
| 25 #define AVUTIL_FIFO_H | 25 #define AVUTIL_FIFO_H |
| 26 | 26 |
| 27 #include <stdint.h> | 27 #include <stdint.h> |
| 28 #include "avutil.h" | 28 #include "avutil.h" |
| 29 #include "common.h" | 29 #include "common.h" |
| 30 | 30 |
| 31 typedef struct AVFifoBuffer { | 31 typedef struct AVFifoBuffer { |
| 32 uint8_t *buffer; | 32 uint8_t *buffer; |
| 33 uint8_t *rptr, *wptr, *end; | 33 uint8_t *rptr, *wptr, *end; |
| 34 uint32_t rndx, wndx; |
| 34 } AVFifoBuffer; | 35 } AVFifoBuffer; |
| 35 | 36 |
| 36 /** | 37 /** |
| 37 * Initializes an AVFifoBuffer. | 38 * Initializes an AVFifoBuffer. |
| 38 * @param *f AVFifoBuffer to initialize | |
| 39 * @param size of FIFO | 39 * @param size of FIFO |
| 40 * @return <0 for failure >=0 otherwise | 40 * @return AVFifoBuffer or NULL if mem allocation failure |
| 41 */ | 41 */ |
| 42 int av_fifo_init(AVFifoBuffer *f, unsigned int size); | 42 AVFifoBuffer *av_fifo_alloc(unsigned int size); |
| 43 | 43 |
| 44 /** | 44 /** |
| 45 * Frees an AVFifoBuffer. | 45 * Frees an AVFifoBuffer. |
| 46 * @param *f AVFifoBuffer to free | 46 * @param *f AVFifoBuffer to free |
| 47 */ | 47 */ |
| 48 void av_fifo_free(AVFifoBuffer *f); | 48 void av_fifo_free(AVFifoBuffer *f); |
| 49 | 49 |
| 50 /** | 50 /** |
| 51 * Resets the AVFifoBuffer to the state right after av_fifo_alloc, in particular
it is emptied. |
| 52 * @param *f AVFifoBuffer to reset |
| 53 */ |
| 54 void av_fifo_reset(AVFifoBuffer *f); |
| 55 |
| 56 /** |
| 51 * Returns the amount of data in bytes in the AVFifoBuffer, that is the | 57 * Returns the amount of data in bytes in the AVFifoBuffer, that is the |
| 52 * amount of data you can read from it. | 58 * amount of data you can read from it. |
| 53 * @param *f AVFifoBuffer to read from | 59 * @param *f AVFifoBuffer to read from |
| 54 * @return size | 60 * @return size |
| 55 */ | 61 */ |
| 56 int av_fifo_size(AVFifoBuffer *f); | 62 int av_fifo_size(AVFifoBuffer *f); |
| 57 | 63 |
| 58 /** | 64 /** |
| 59 * Reads data from an AVFifoBuffer. | 65 * Feeds data from an AVFifoBuffer to a user-supplied callback. |
| 60 * @param *f AVFifoBuffer to read from | |
| 61 * @param *buf data destination | |
| 62 * @param buf_size number of bytes to read | |
| 63 */ | |
| 64 int av_fifo_read(AVFifoBuffer *f, uint8_t *buf, int buf_size); | |
| 65 | |
| 66 /** | |
| 67 * Feeds data from an AVFifoBuffer to a user supplied callback. | |
| 68 * @param *f AVFifoBuffer to read from | 66 * @param *f AVFifoBuffer to read from |
| 69 * @param buf_size number of bytes to read | 67 * @param buf_size number of bytes to read |
| 70 * @param *func generic read function | 68 * @param *func generic read function |
| 71 * @param *dest data destination | 69 * @param *dest data destination |
| 72 */ | 70 */ |
| 73 int av_fifo_generic_read(AVFifoBuffer *f, int buf_size, void (*func)(void*, void
*, int), void* dest); | 71 int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)
(void*, void*, int)); |
| 74 | 72 |
| 75 /** | 73 /** |
| 76 * Writes data into an AVFifoBuffer. | 74 * Feeds data from a user-supplied callback to an AVFifoBuffer. |
| 77 * @param *f AVFifoBuffer to write to | |
| 78 * @param *buf data source | |
| 79 * @param size data size | |
| 80 */ | |
| 81 attribute_deprecated void av_fifo_write(AVFifoBuffer *f, const uint8_t *buf, int
size); | |
| 82 | |
| 83 /** | |
| 84 * Feeds data from a user supplied callback to an AVFifoBuffer. | |
| 85 * @param *f AVFifoBuffer to write to | 75 * @param *f AVFifoBuffer to write to |
| 86 * @param *src data source | 76 * @param *src data source |
| 87 * @param size number of bytes to write | 77 * @param size number of bytes to write |
| 88 * @param *func generic write function. First parameter is src, | 78 * @param *func generic write function; the first parameter is src, |
| 89 * second is dest_buf, third is dest_buf_size. | 79 * the second is dest_buf, the third is dest_buf_size. |
| 90 * func must return the number of bytes written to dest_buf, or <= 0 to | 80 * func must return the number of bytes written to dest_buf, or <= 0 to |
| 91 * indicate no more data available to write. | 81 * indicate no more data available to write. |
| 92 * If func is NULL, src is interpreted as a simple byte array for source data. | 82 * If func is NULL, src is interpreted as a simple byte array for source data. |
| 93 * @return the number of bytes written to the fifo. | 83 * @return the number of bytes written to the FIFO |
| 94 */ | 84 */ |
| 95 int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void
*, void*, int)); | 85 int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void
*, void*, int)); |
| 96 | 86 |
| 97 #if LIBAVUTIL_VERSION_MAJOR < 50 | |
| 98 /** | |
| 99 * Resizes an AVFifoBuffer. | |
| 100 * @param *f AVFifoBuffer to resize | |
| 101 * @param size new AVFifoBuffer size in bytes | |
| 102 * @see av_fifo_realloc2() | |
| 103 */ | |
| 104 attribute_deprecated void av_fifo_realloc(AVFifoBuffer *f, unsigned int size); | |
| 105 #endif | |
| 106 | |
| 107 /** | 87 /** |
| 108 * Resizes an AVFifoBuffer. | 88 * Resizes an AVFifoBuffer. |
| 109 * @param *f AVFifoBuffer to resize | 89 * @param *f AVFifoBuffer to resize |
| 110 * @param size new AVFifoBuffer size in bytes | 90 * @param size new AVFifoBuffer size in bytes |
| 111 * @return <0 for failure >=0 otherwise | 91 * @return <0 for failure, >=0 otherwise |
| 112 */ | 92 */ |
| 113 int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); | 93 int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); |
| 114 | 94 |
| 115 /** | 95 /** |
| 116 * Reads and discards the specified amount of data from an AVFifoBuffer. | 96 * Reads and discards the specified amount of data from an AVFifoBuffer. |
| 117 * @param *f AVFifoBuffer to read from | 97 * @param *f AVFifoBuffer to read from |
| 118 * @param size amount of data to read in bytes | 98 * @param size amount of data to read in bytes |
| 119 */ | 99 */ |
| 120 void av_fifo_drain(AVFifoBuffer *f, int size); | 100 void av_fifo_drain(AVFifoBuffer *f, int size); |
| 121 | 101 |
| 122 static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int offs) | 102 static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int offs) |
| 123 { | 103 { |
| 124 uint8_t *ptr = f->rptr + offs; | 104 uint8_t *ptr = f->rptr + offs; |
| 125 if (ptr >= f->end) | 105 if (ptr >= f->end) |
| 126 ptr -= f->end - f->buffer; | 106 ptr -= f->end - f->buffer; |
| 127 return *ptr; | 107 return *ptr; |
| 128 } | 108 } |
| 129 #endif /* AVUTIL_FIFO_H */ | 109 #endif /* AVUTIL_FIFO_H */ |
| OLD | NEW |