ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ffmpeg - FFMPEG: 將YUV數據轉儲到AVFrame結構中

2021-07-23 12:04:15  阅读:566  来源: 互联网

标签:AVFrame ffmpeg 轉儲到 linesize frame height width YUV data


VFrame可以被解釋為一個AVPicture來填充 data 和 linesize 欄位。 填充這些欄位最簡單的方法是使用 avpicture_fill 函數。

要填充AVFrame和V 緩衝區的Y,它取決於輸入數據和想要使用框架( 要寫入 AVFrame ) 。 或者保留副本) 。

如果緩衝區足夠大( 至少為 linesize[0] * height 數據,則為), linesize[1 or 2] * height/2 對於u/v 數據,可以直接使用輸入緩衝區:


//Initialize the AVFrame


AVFrame* frame = avcodec_alloc_frame();


frame->width = width;


frame->height = height;


frame->format = AV_PIX_FMT_YUV420P;



//Initialize frame->linesize


avpicture_fill((AVPicture*)frame, NULL, frame->format, frame->width, frame->height);



//Set frame->data pointers manually


frame->data[0] = inputBufferY;


frame->data[1] = inputBufferU;


frame->data[2] = inputBufferV;



//Or if your Y, U, V buffers are contiguous and have the correct size, simply use:


//avpicture_fill((AVPicture*)frame, inputBufferYUV, frame->format, frame->width, frame->height);



如果需要操作輸入數據,則需要計算所需的緩衝區大小,並在其中複製輸入數據。


//Initialize the AVFrame


AVFrame* frame = avcodec_alloc_frame();


frame->width = width;


frame->height = height;


frame->format = AV_PIX_FMT_YUV420P;



//Allocate a buffer large enough for all data


int size = avpicture_get_size(frame->format, frame->width, frame->height);


uint8_t* buffer = (uint8_t*)av_malloc(size);



//Initialize frame->linesize and frame->data pointers


avpicture_fill((AVPicture*)frame, buffer, frame->format, frame->width, frame->height);



//Copy data from the 3 input buffers


memcpy(frame->data[0], inputBufferY, frame->linesize[0] * frame->height);


memcpy(frame->data[1], inputBufferU, frame->linesize[1] * frame->height/2);


memcpy(frame->data[2], inputBufferV, frame->linesize[2] * frame->height/2);



完成AVFrame之後,不要忘了用 av_frame_free ( 以及 av_malloc 分配的任何緩衝區) 釋放它。

标签:AVFrame,ffmpeg,轉儲到,linesize,frame,height,width,YUV,data
来源: https://www.cnblogs.com/lidabo/p/15048236.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有