使用ffmepg解码视频一般都是生成AVFrame。然后再转换成RGB或YUV。一直不明白它们之间的转换关系。其实很简单:
AVFrame 转RGB:
AVFrame ---> RGB
data[0] --- RGG数据
linesize[0] ---- width*pixel_size for RGB
AVFrame 转YUV:
AVFrame --->YUV
data[0] ---- Y
data[1] ---- Udata[2] ---- V
linesize[0] ------ Y 的长度
linesize[1] (linesize[0]/2) ------ U 或V 的长度.
代码:
- (UIImage *)convertFrameToRGB:(float)with Height:(float)height {
/* float with = pCodecCtx->width;
float height = pCodecCtx->height;*/
if (pFrame->data[0]) {
struct SwsContext * scxt =sws_getContext(with,height,PIX_FMT_YUV420P,with,height,PIX_FMT_RGBA,SWS_POINT,NULL,NULL,NULL);
if</