55 lines
1.5 KiB
Markdown
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) //数据每行长度
|
|
);
|
|
|
|
```
|
|
|