void av_frame_unref(AVFrame *frame) { int i; if (!frame) return; wipe_side_data(frame); for (i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++) av_buffer_unref(&frame->buf[i]); for (i = 0; i < frame->nb_extended_buf; i++) av_buffer_unref(&frame->extended_buf[i]); av_freep(&frame->extended_buf); av_dict_free(&frame->metadata); #if FF_API_FRAME_QP av_buffer_unref(&frame->qp_table_buf); #endif av_buffer_unref(&frame->hw_frames_ctx); av_buffer_unref(&frame->opaque_ref); get_frame_defaults(frame); }
void av_frame_move_ref(AVFrame *dst, AVFrame *src) { *dst = *src; if (src->extended_data == src->data) dst->extended_data = dst->data; memset(src, 0, sizeof(*src)); get_frame_defaults(src); }
void av_frame_move_ref(AVFrame *dst, AVFrame *src) { av_assert1(dst->width == 0 && dst->height == 0); av_assert1(dst->channels == 0); *dst = *src; if (src->extended_data == src->data) dst->extended_data = dst->data; memset(src, 0, sizeof(*src)); get_frame_defaults(src); }
AVFrame *av_frame_alloc(void) { AVFrame *frame = (AVFrame *)av_mallocz(sizeof(*frame)); if (!frame) return NULL; get_frame_defaults(frame); return frame; }
AVFrame *av_frame_alloc(void) { AVFrame *frame = av_mallocz(sizeof(*frame)); if (!frame) return NULL; frame->extended_data = NULL; get_frame_defaults(frame); return frame; }
//Since https://github.com/FFmpeg/FFmpeg/commit/7ecc2d403ce5c7b6ea3b1f368dccefd105209c7e static void get_frame_defaults(AVFrame *frame) { if (frame->extended_data != frame->data) { av_freep(&frame->extended_data); return; } frame->extended_data = NULL; get_frame_defaults(frame); return; }
void av_frame_unref(AVFrame *frame) { int i; for (i = 0; i < frame->nb_side_data; i++) { av_freep(&frame->side_data[i]->data); av_dict_free(&frame->side_data[i]->metadata); av_freep(&frame->side_data[i]); } av_freep(&frame->side_data); for (i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++) av_buffer_unref(&frame->buf[i]); for (i = 0; i < frame->nb_extended_buf; i++) av_buffer_unref(&frame->extended_buf[i]); av_freep(&frame->extended_buf); get_frame_defaults(frame); }