yuvi420转nv12用c怎么实现?
时间: 2023-08-17 12:09:31 浏览: 160
我们可以使用libyuv库进行转换,具体实现参考以下代码:
```c
#include <libyuv.h>
// 输入为YUV420数据,输出为NV12数据
void yuv420_to_nv12(const uint8_t* src_y, const uint8_t* src_u, const uint8_t* src_v,
uint8_t* dst_y, uint8_t* dst_uv,
int width, int height) {
const int src_y_stride = width;
const int src_u_stride = width / 2;
const int src_v_stride = width / 2;
const int dst_y_stride = width;
const int dst_uv_stride = width;
const int half_height = height / 2;
const int half_width = width / 2;
// Y
libyuv::CopyPlane(src_y, src_y_stride, dst_y, dst_y_stride, width, height);
// U
libyuv::ShrinkPlane(src_u, src_u_stride, half_width, half_height, dst_uv, dst_uv_stride, half_width, half_height, libyuv::kFilterBox);
// V
libyuv::ShrinkPlane(src_v, src_v_stride, half_width, half_height, dst_uv + 1, dst_uv_stride, half_width, half_height, libyuv::kFilterBox);
}
```
需要注意的是,进行转换需要保证输入和输出数据的内存地址不同,并且输入数据的宽和高必须是2的倍数。
阅读全文