1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #ifndef AVCODEC_CONTAINER_FIFO_H
- #define AVCODEC_CONTAINER_FIFO_H
- #include <stddef.h>
- /**
- * ContainerFifo is a FIFO for "containers" - dynamically allocated reusable
- * structs (e.g. AVFrame or AVPacket). ContainerFifo uses an internal pool of
- * such containers to avoid allocating and freeing them repeatedly.
- */
- typedef struct ContainerFifo ContainerFifo;
- /**
- * Allocate a new ContainerFifo for the container type defined by provided
- * callbacks.
- *
- * @param container_alloc allocate a new container instance and return a pointer
- * to it, or NULL on failure
- * @param container_reset reset the provided container instance to a clean state
- * @param container_free free the provided container instance
- * @param fifo_write transfer the contents of src to dst, where src is a
- * container instance provided to ff_container_fifo_write()
- * @param fifo_read transfer the contents of src to dst in other cases
- *
- * @note fifo_read() and fifo_write() are different parameters in order to allow
- * fifo_write() implementations that make a new reference in dst, leaving
- * src untouched (see e.g. ff_container_fifo_alloc_avframe())
- */
- ContainerFifo*
- ff_container_fifo_alloc(void* (*container_alloc)(void),
- void (*container_reset)(void *obj),
- void (*container_free) (void *obj),
- int (*fifo_write) (void *dst, void *src),
- int (*fifo_read) (void *dst, void *src));
- /**
- * Allocate a ContainerFifo instance for AVFrames.
- * Note that ff_container_fifo_write() will call av_frame_ref() on src, making a
- * new reference in dst and leaving src untouched.
- *
- * @param flags unused currently
- */
- ContainerFifo *ff_container_fifo_alloc_avframe(unsigned flags);
- /**
- * Free a ContainerFifo and everything in it.
- */
- void ff_container_fifo_free(ContainerFifo **pf);
- /**
- * Write the contents of obj to the FIFO.
- *
- * The fifo_write() callback previously provided to ff_container_fifo_alloc()
- * will be called with obj as src in order to perform the actual transfer.
- */
- int ff_container_fifo_write(ContainerFifo *pf, void *obj);
- /**
- * Read the next available object from the FIFO into obj.
- *
- * The fifo_read() callback previously provided to ff_container_fifo_alloc()
- * will be called with obj as dst in order to perform the actual transfer.
- */
- int ff_container_fifo_read(ContainerFifo *pf, void *obj);
- /**
- * @return number of objects available for reading
- */
- size_t ff_container_fifo_can_read(ContainerFifo *pf);
- #endif // AVCODEC_CONTAINER_FIFO_H
|