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

55 lines
1.5 KiB
Markdown

# android 使用ffmpeg 将avframe yuv 成avframe rgb
## 设置视频转换参数
```java
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
);
```
## 转换数据
```java
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
```java
Mat mat = new Mat(1080, //图片高度
1440, //图片宽度
CvType.CV_8UC3, //图片格式
m_pFrameRGB.data(0).asBuffer(), //avframe 数据
m_pFrameRGB.linesize(0) //数据每行长度
);
```