uint8_t *AVFrame2Img(AVFrame *pFrame) {
int frameHeight = pFrame->height;
int frameWidth = pFrame->width;
int channels = 3;
//反轉(zhuǎn)圖像
pFrame->data[0] += pFrame->linesize[0] * (frameHeight - 1);
pFrame->linesize[0] *= -1;
pFrame->data[1] += pFrame->linesize[1] * (frameHeight / 2 - 1);
pFrame->linesize[1] *= -1;
pFrame->data[2] += pFrame->linesize[2] * (frameHeight / 2 - 1);
pFrame->linesize[2] *= -1;
//創(chuàng)建保存yuv數(shù)據(jù)的buffer
uint8_t *pDecodedBuffer = (uint8_t *) malloc(
frameHeight * frameWidth * sizeof(uint8_t) * channels);
//從AVFrame中獲取yuv420p數(shù)據(jù),并保存到buffer
int i, j, k;
//拷貝y分量
for (i = 0; i < frameHeight; i++) {
memcpy(pDecodedBuffer + frameWidth * i,
pFrame->data[0] + pFrame->linesize[0] * i,
frameWidth);
}
//拷貝u分量
for (j = 0; j < frameHeight / 2; j++) {
memcpy(pDecodedBuffer + frameWidth * i + frameWidth / 2 * j,
pFrame->data[1] + pFrame->linesize[1] * j,
frameWidth / 2);
}
//拷貝v分量
for (k = 0; k < frameHeight / 2; k++) {
memcpy(pDecodedBuffer + frameWidth * i + frameWidth / 2 * j + frameWidth / 2 * k,
pFrame->data[2] + pFrame->linesize[2] * k,
frameWidth / 2);
}
return pDecodedBuffer;
}
AVFrame轉(zhuǎn)換yuv420p
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。