int yuyvtoyuv420(unsigned char *src_buf, unsigned char *out_buf, int src_width, int src_height)
{
unsigned char *Y, *U, *V;
unsigned char * Y2, *U2, *V2;
int tem_size = (src_width * src_height) << 1; ///对于YUV 4:2:2
auto const tem_buf = std::unique_ptr<unsigned char[]>(new unsigned char[tem_size]);
unsigned char *p = src_buf;
Y = tem_buf.get();
U = Y + src_width*src_height;
V = U + (src_width*src_height >> 1);
Y2 = out_buf;
U2 = Y2 + src_width*src_height;
V2 = U2 + (src_width*src_height >> 2);
/*由打包YUYV变成平板YUV*/
int k, j;
for (k = 0; k < src_height; ++k)
{
for (j = 0; j < (src_width >> 1); ++j)
{
Y[j * 2] = p[4 * j];
U[j] = p[4 * j + 1];
Y[j * 2 + 1] = p[4 * j + 2];
V[j] = p[4 * j + 3];
}
p = p + src_width * 2;
Y = Y + src_width;
U = U + (src_width >> 1);
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余4页未读,立即下载