1 /* 2 * This file is part of FFmpeg. 3 * 4 * Copyright (c) 2015 Matthieu Bouron <matthieu.bouron stupeflix.com> 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVFILTER_FRAMEPOOL_H 22 #define AVFILTER_FRAMEPOOL_H 23 24 #include "libavutil/buffer.h" 25 #include "libavutil/frame.h" 26 #include "libavutil/internal.h" 27 28 /** 29 * Frame pool. This structure is opaque and not meant to be accessed 30 * directly. It is allocated with ff_frame_pool_init() and freed with 31 * ff_frame_pool_uninit(). 32 */ 33 typedef struct FFFramePool FFFramePool; 34 35 /** 36 * Allocate and initialize a video frame pool. 37 * 38 * @param alloc a function that will be used to allocate new frame buffers when 39 * the pool is empty. May be NULL, then the default allocator will be used 40 * (av_buffer_alloc()). 41 * @param width width of each frame in this pool 42 * @param height height of each frame in this pool 43 * @param format format of each frame in this pool 44 * @param align buffers alignement of each frame in this pool 45 * @return newly created video frame pool on success, NULL on error. 46 */ 47 FFFramePool *ff_frame_pool_video_init(AVBufferRef* (*alloc)(buffer_size_t size), 48 int width, 49 int height, 50 enum AVPixelFormat format, 51 int align); 52 53 /** 54 * Allocate and initialize an audio frame pool. 55 * 56 * @param alloc a function that will be used to allocate new frame buffers when 57 * the pool is empty. May be NULL, then the default allocator will be used 58 * (av_buffer_alloc()). 59 * @param channels channels of each frame in this pool 60 * @param nb_samples number of samples of each frame in this pool 61 * @param format format of each frame in this pool 62 * @param align buffers alignement of each frame in this pool 63 * @return newly created audio frame pool on success, NULL on error. 64 */ 65 FFFramePool *ff_frame_pool_audio_init(AVBufferRef* (*alloc)(buffer_size_t size), 66 int channels, 67 int samples, 68 enum AVSampleFormat format, 69 int align); 70 71 /** 72 * Deallocate the frame pool. It is safe to call this function while 73 * some of the allocated frame are still in use. 74 * 75 * @param pool pointer to the frame pool to be freed. It will be set to NULL. 76 */ 77 void ff_frame_pool_uninit(FFFramePool **pool); 78 79 /** 80 * Get the video frame pool configuration. 81 * 82 * @param width width of each frame in this pool 83 * @param height height of each frame in this pool 84 * @param format format of each frame in this pool 85 * @param align buffers alignement of each frame in this pool 86 * @return 0 on success, a negative AVERROR otherwise. 87 */ 88 int ff_frame_pool_get_video_config(FFFramePool *pool, 89 int *width, 90 int *height, 91 enum AVPixelFormat *format, 92 int *align); 93 94 /** 95 * Get the audio frame pool configuration. 96 * 97 * @param channels channels of each frame in this pool 98 * @param nb_samples number of samples of each frame in this pool 99 * @param format format of each frame in this pool 100 * @param align buffers alignement of each frame in this pool 101 * @return 0 on success, a negative AVERROR otherwise. 102 */ 103 int ff_frame_pool_get_audio_config(FFFramePool *pool, 104 int *channels, 105 int *nb_samples, 106 enum AVSampleFormat *format, 107 int *align); 108 109 110 /** 111 * Allocate a new AVFrame, reussing old buffers from the pool when available. 112 * This function may be called simultaneously from multiple threads. 113 * 114 * @return a new AVFrame on success, NULL on error. 115 */ 116 AVFrame *ff_frame_pool_get(FFFramePool *pool); 117 118 119 #endif /* AVFILTER_FRAMEPOOL_H */ 120