91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FFmpeg av_image_fill_arrays填充AVFrame數據緩沖

發布時間:2020-07-19 22:33:02 來源:網絡 閱讀:2901 作者:fengyuzaitu 欄目:編程語言

說明FFmepg3.4版本

需求

????????創建一個BGR24的AVFrame幀,用于YUV420轉換BGR24幀


代碼

? AVFrame *pBGRFrame = NULL;
??pBGRFrame = av_frame_alloc();
??uint8_t *pszBGRBuffer = NULL;
??int nBGRFrameSize;
? nBGRFrameSize = av_image_get_buffer_size(AV_PIX_FMT_BGR24, pVideoc->m_pAVCodecContext->width, pVideoc->m_pAVCodecContext->height, 1);
? pszBGRBuffer = (uint8_t*)av_malloc(nBGRFrameSize);
? av_image_fill_arrays(pBGRFrame->data, pBGRFrame->linesize, pszBGRBuffer, AV_PIX_FMT_BGR24, pFrame->width, pFrame->height, 1);


舊版本函數
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
?????????????????? int pix_fmt, int width, int height);


這個函數的使用本質上是為已經分配的空間的結構體AVPicture掛上一段用于保存數據的空間,這個結構體中有一個指針數組data[4],掛在這個數組里。一般我們這么使用:
1) pFrameRGB=avcodec_alloc_frame();
2) numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,pCodecCtx->height);
??? buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t));
3) avpicture_fill((AVPicture *)pFrameRGB, buffer, PIX_FMT_RGB24,pCodecCtx->width, pCodecCtx-???????? >height);
以上就是為pFrameRGB掛上buffer。這個buffer是用于存緩沖數據的。
好,現在讓我們來看一下tutorials里常出現的pFrame為什么不用fill空間。主要是下面這句:
avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,packet.data, packet.size);


1.int avpicture_fill(AVPicture *picture, const uint8_t *ptr,enum AVPixelFormat pix_fmt, int width, int height);
這個函數的作用是給 picture掛上存放數據的代碼。在對幀數據進行scale之前,對于接受數據的picture(等同AVFrame)要用av_frame_alloc()初始化,但AVFrame::data需要手動初始化,即掛上內存,在scale的時候是直接在data里寫入數據的。但在接收解碼數據時,只需要av_frame_alloc(),不用手動掛內存
2.AVFrame的內存釋放問題
在用AVFrame循環接受視頻的幀數據的時候,或者批量讀取圖片量比較大的時候,不釋放AVFrame會報指針越界錯誤,在我添加了av_free()并釋放了AVFrame指針后,發現報錯時間延后了,但任然有指針越界導致的報錯,調試后發現,av_free()并沒有釋放AVFrame中data[x]指向的 數據,僅僅是把data本身指向的數據釋放了,但其作為二級指針指向的數據跳過了,需要手動釋放,添加 av_free(AVFrame->data[0])后問題解決。
總結???????
av_free( AVFrame* )????????????????????????????????????????????? 對應??? av_frame_alloc()???
av_free( AVFrame->data[0] )? 或者av_free( ptr* )? 對應?? avpicture_fill 函數或者 avcodec_encode_video2()
????


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定远县| 栖霞市| 郁南县| 房产| 武清区| 赞皇县| 周宁县| 长泰县| 万安县| 宁武县| 武威市| 黑水县| 天长市| 泾川县| 崇仁县| 开化县| 琼结县| 井冈山市| 西畴县| 宿迁市| 华蓥市| 凉山| 抚顺县| 宜昌市| 沙洋县| 高要市| 福泉市| 两当县| 阳曲县| 固安县| 马公市| 盐山县| 大姚县| 柳州市| 宜春市| 杨浦区| 江城| 长沙市| 葫芦岛市| 麻栗坡县| 佳木斯市|