看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《SocketAM2 (AM2)》之銘言: : 第二個問題: : avcodec_decode_video2()成功解碼,把畫面存在AVFrame pFrame裡面之後, : 若我想要把這個解好的畫面"長寬大小不變"的依據Y、U、V取出存在另一塊記憶體中, : 我需要知道這個解完的frame的編碼方式(YUV420、422或其他等等) : 和在AVFrame pFrame中存放排列的方法, : 請問有人知道要怎麼獲取這段解好的原始資料嗎? : 現在暫時可行的做法是使用sws_scale(),因為它的output是我知道排列方式的。 : 但我擔心即使是透過sws_scale()做"原尺寸、原編碼方式"的輸出, : 實際上仍然需要相當的計算effort, : 也就是這一步造成了多於計算資源的浪費。 : 小弟希望在有限的電腦上盡可能的快速處理大量高解析度影像, : 故對效率性希望能做一些提高。 單純要取 yuv data 可以這麼做: AVFrame *pFrame = ... uint8_t *data = .... int y_size = pFrame->linesize[0] * height; int u_size = pFrame->linesize[1] * height; int v_size = pFrame->linesize[2] * height; data = malloc .... memcpy(data, pFrame->data[0], sizeof(uint8_t) * y_size); memcpy(data + y_size, pFrame->data[1], sizeof(uint8_t) * u_size); memcpy(data + y_size + v_size, pFrame->data[2], sizeof(uint8_t) * v_size); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.248.248
qrtt1:不過不確定你想做什麼最佳化,但 arm 跟 mips 部分的最佳化 03/24 11:21
qrtt1:應該會比 x86 還需要,印象中那邊好像沒有正式的 code !? 03/24 11:22