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 27 /** 28 * Frame pool. This structure is opaque and not meant to be accessed 29 * directly. It is allocated with ff_frame_pool_init() and freed with 30 * ff_frame_pool_uninit(). 31 */ 32 typedef struct FFFramePool FFFramePool; 33 34 /** 35 * Allocate and initialize a video frame pool. 36 * 37 * @param alloc a function that will be used to allocate new frame buffers when 38 * the pool is empty. May be NULL, then the default allocator will be used 39 * (av_buffer_alloc()). 40 * @param width width of each frame in this pool 41 * @param height height of each frame in this pool 42 * @param format format of each frame in this pool 43 * @param align buffers alignement of each frame in this pool 44 * @return newly created video frame pool on success, NULL on error. 45 */ 46 FFFramePool *ff_frame_pool_video_init(AVBufferRef* (*alloc)(int size), 47 int width, 48 int height, 49 enum AVPixelFormat format, 50 int align); 51 52 /** 53 * Allocate and initialize an audio frame pool. 54 * 55 * @param alloc a function that will be used to allocate new frame buffers when 56 * the pool is empty. May be NULL, then the default allocator will be used 57 * (av_buffer_alloc()). 58 * @param channels channels of each frame in this pool 59 * @param nb_samples number of samples of each frame in this pool 60 * @param format format of each frame in this pool 61 * @param align buffers alignement of each frame in this pool 62 * @return newly created audio frame pool on success, NULL on error. 63 */ 64 FFFramePool *ff_frame_pool_audio_init(AVBufferRef* (*alloc)(int size), 65 int channels, 66 int samples, 67 enum AVSampleFormat format, 68 int align); 69 70 /** 71 * Deallocate the frame pool. It is safe to call this function while 72 * some of the allocated frame are still in use. 73 * 74 * @param pool pointer to the frame pool to be freed. It will be set to NULL. 75 */ 76 void ff_frame_pool_uninit(FFFramePool **pool); 77 78 /** 79 * Get the video frame pool configuration. 80 * 81 * @param width width of each frame in this pool 82 * @param height height of each frame in this pool 83 * @param format format of each frame in this pool 84 * @param align buffers alignement of each frame in this pool 85 * @return 0 on success, a negative AVERROR otherwise. 86 */ 87 int ff_frame_pool_get_video_config(FFFramePool *pool, 88 int *width, 89 int *height, 90 enum AVPixelFormat *format, 91 int *align); 92 93 /** 94 * Get the audio frame pool configuration. 95 * 96 * @param channels channels of each frame in this pool 97 * @param nb_samples number of samples of each frame in this pool 98 * @param format format of each frame in this pool 99 * @param align buffers alignement of each frame in this pool 100 * @return 0 on success, a negative AVERROR otherwise. 101 */ 102 int ff_frame_pool_get_audio_config(FFFramePool *pool, 103 int *channels, 104 int *nb_samples, 105 enum AVSampleFormat *format, 106 int *align); 107 108 109 /** 110 * Allocate a new AVFrame, reussing old buffers from the pool when available. 111 * This function may be called simultaneously from multiple threads. 112 * 113 * @return a new AVFrame on success, NULL on error. 114 */ 115 AVFrame *ff_frame_pool_get(FFFramePool *pool); 116 117 118 #endif /* AVFILTER_FRAMEPOOL_H */ 119