ffmpeg7.0.2 unreference

部署运行你感兴趣的模型镜像

void av_frame_unref(AVFrame *frame)

{

if (!frame)

return;

frame_side_data_wipe(frame);

for (int i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++)

av_buffer_unref(&frame->buf[i]);

for (int 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);

av_buffer_unref(&frame->hw_frames_ctx);

av_buffer_unref(&frame->opaque_ref);

av_buffer_unref(&frame->private_ref);

if (frame->extended_data != frame->data)

av_freep(&frame->extended_data);

av_channel_layout_uninit(&frame->ch_layout);

get_frame_defaults(frame);

}

void av_frame_move_ref(AVFrame *dst, AVFrame *src)

{

av_assert1(dst->width == 0 && dst->height == 0);

av_assert1(dst->ch_layout.nb_channels == 0 &&

dst->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC);

*dst = *src;

if (src->extended_data == src->data)

dst->extended_data = dst->data;

get_frame_defaults(src);

}

static void buffer_replace(AVBufferRef **dst, AVBufferRef **src)

{

AVBuffer *b;

b = (*dst)->buffer;

if (src) {

**dst = **src;

av_freep(src);

} else

av_freep(dst);

if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) {

/* b->free below might already free the structure containing *b,

* so we have to read the flag now to avoid use-after-free. */

int free_avbuffer = !(b->flags_internal & BUFFER_FLAG_NO_FREE);

b->free(b->opaque, b->data);

if (free_avbuffer)

av_free(b);

}

}

void av_buffer_unref(AVBufferRef **buf)

{

if (!buf || !*buf)

return;

buffer_replace(buf, NULL);

}

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值