日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【FFMPEG源码终极解析】void av_packet_unref(AVPacket *pkt)

發布時間:2023/12/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。