knowledge_map/android 使用ffmpeg 转yuv成rgb.md
2022-01-23 17:09:35 +08:00

1.5 KiB

android 使用ffmpeg 将avframe yuv 成avframe rgb

设置视频转换参数

img_convert_ctx = sws_getContext(
    1440,                            //源视频宽度
    1088,                            //源视频高度
    AV_PIX_FMT_YUV420P,              //源视频格式
    720,                             //输出视频宽度
    540,                             //输出视频高度
    AV_PIX_FMT_RGB24,                //输出视频格式
    SWS_POINT,                       //视频转码算法
    null,                            //额外参数1
    null,                            //额外参数2
    (DoublePointer) null             //额外参数3
);

转换数据

sws_scale(
	img_convert_ctx,         
    //SwsContext *swsContext 转换上下文
	m_pFrame.data(),                   
    //源视频数据
	m_pFrame.linesize(),               
    //源视频每行数据长度
	0,                                 
    //源图像数据数组处理的索引值 , 从 0 开始计数 , 一般是 0
	m_pCodecCtx.height(),              
    //源视频高度即有多少行数据
	m_pFrameRGB.data(),                
    //目标视频数据
	m_pFrameRGB.linesize()             
    //目标视频每行有多少数据
);

avframe rgb 转 mat

Mat mat = new Mat(1080,            //图片高度
1440,                              //图片宽度 
CvType.CV_8UC3,                    //图片格式
m_pFrameRGB.data(0).asBuffer(),    //avframe 数据
m_pFrameRGB.linesize(0)            //数据每行长度
);