【FFMPEG源码终极解析】void av_packet_unref(AVPacket *pkt)
生活随笔
收集整理的這篇文章主要介紹了
【FFMPEG源码终极解析】void av_packet_unref(AVPacket *pkt)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
av_packet_unref
該接口使用了如下調用,該接口主要作用是清理AVPacket中的所有空間數據,清理完畢后進行初始化操作,并且將 data 與 size 置為0,方便下次調用。
void av_packet_unref(AVPacket *pkt) {av_packet_free_side_data(pkt);av_buffer_unref(&pkt->buf);av_init_packet(pkt);pkt->data = NULL;pkt->size = 0; }?
void av_packet_free_side_data(AVPacket *pkt)
接口解析:根據AVPacket中side_data_elems來使用for循環逐個清理其中的數據,最后將side_data_elems置為0
void av_packet_free_side_data(AVPacket *pkt) {int i;for (i = 0; i < pkt->side_data_elems; i++)av_freep(&pkt->side_data[i].data);av_freep(&pkt->side_data);pkt->side_data_elems = 0; }av_freep??
void av_freep(void *arg) {void *val;memcpy(&val, arg, sizeof(val));memcpy(arg, &(void *){ NULL }, sizeof(val));av_free(val); }av_buffer_unref
void av_buffer_unref(AVBufferRef **buf) {if (!buf || !*buf)return;buffer_replace(buf, NULL); }buffer_replace
static void buffer_replace(AVBufferRef **dst, AVBufferRef **src) {AVBuffer *b;b = (*dst)->buffer;if (src) {**dst = **src;av_freep(src);} elseav_freep(dst);if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) {b->free(b->opaque, b->data);av_freep(&b);} }av_free參考av_free
?
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【FFMPEG源码终极解析】void av_packet_unref(AVPacket *pkt)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 警察局备案有什么影响吗(警察局备案有什么
- 下一篇: 【Makefile】