MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / audio_get_buffer

Function audio_get_buffer

libavcodec/get_buffer.c:172–215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

170}
171
172static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame)
173{
174 FramePool *pool = avctx->internal->pool;
175 int planes = pool->planes;
176 int i;
177
178 frame->linesize[0] = pool->linesize[0];
179
180 if (planes > AV_NUM_DATA_POINTERS) {
181 frame->extended_data = av_calloc(planes, sizeof(*frame->extended_data));
182 frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS;
183 frame->extended_buf = av_calloc(frame->nb_extended_buf,
184 sizeof(*frame->extended_buf));
185 if (!frame->extended_data || !frame->extended_buf) {
186 av_freep(&frame->extended_data);
187 av_freep(&frame->extended_buf);
188 return AVERROR(ENOMEM);
189 }
190 } else {
191 frame->extended_data = frame->data;
192 av_assert0(frame->nb_extended_buf == 0);
193 }
194
195 for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) {
196 frame->buf[i] = av_buffer_pool_get(pool->pools[0]);
197 if (!frame->buf[i])
198 goto fail;
199 frame->extended_data[i] = frame->data[i] = frame->buf[i]->data;
200 }
201 for (i = 0; i < frame->nb_extended_buf; i++) {
202 frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]);
203 if (!frame->extended_buf[i])
204 goto fail;
205 frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data;
206 }
207
208 if (avctx->debug & FF_DEBUG_BUFFERS)
209 av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame);
210
211 return 0;
212fail:
213 av_frame_unref(frame);
214 return AVERROR(ENOMEM);
215}
216
217static int video_get_buffer(AVCodecContext *s, AVFrame *pic)
218{

Callers 1

Calls 5

av_callocFunction · 0.85
av_freepFunction · 0.85
av_buffer_pool_getFunction · 0.85
av_logFunction · 0.85
av_frame_unrefFunction · 0.85

Tested by

no test coverage detected