| 170 | } |
| 171 | |
| 172 | static 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; |
| 212 | fail: |
| 213 | av_frame_unref(frame); |
| 214 | return AVERROR(ENOMEM); |
| 215 | } |
| 216 | |
| 217 | static int video_get_buffer(AVCodecContext *s, AVFrame *pic) |
| 218 | { |
no test coverage detected