int width = 2560;
int height = 1600;
int ySize = width * height;
int uSize = ySize / 4;
int vSize = ySize / 4;
uint8_t* PY = new uint8_t[ySize]();//没采样前的uint8_t*相当于char*,new uint8_t[ySize]定义长度为ysize的数组
uint8_t* PU = new uint8_t[uSize]();
uint8_t* PV = new uint8_t[vSize]();
uint8_t* PS_Y = new uint8_t[ySize / 4]();//2倍下采样后的
uint8_t* PS_U = new uint8_t[uSize / 4]();
uint8_t* PS_V = new uint8_t[vSize / 4]();
for (int frame = 0; frame < 5; frame++)// 2倍下采样的帧数
{
fread(PY, 1, ySize, fin);//fin是原文件,每次读1字节,读ysize次,从fin中读到PY里 正好1帧
fread(PU, 1, uSize, fin);
fread(PV, 1, vSize, fin);
//YUV分量的起始位置
unsigned char* src_img_py = PY;
unsigned char* src_img_pu = PU;
unsigned char* src_img_pv = PV;
//YUV分量的目标位置
unsigned char* dst_img_py = PS_Y;
unsigned char* dst_img_pu = PS_U;
unsigned char* dst_img_pv = PS_V;
int i, j = 0;
for (i = 0; i < height / 2; i++) //Y分量采样
{
for (j = 0; j < width / 2; ++j) //Luma
{
*dst_img_py = *src_img_py;
dst_img_py++;
src_img_py += 2;//每两个像素取一个
}
src_img_py += width;
}
for (i = 0; i < height / 4; i++)//UV分量采样
{
for (j = 0; j < width / 4; ++j) //Chroma
{
*dst_img_pu = *src_img_pu;
dst_img_pu++;
src_img_pu += 2;
*dst_img_pv = *src_img_pv;
dst_img_pv++;
src_img_pv += 2;
}
src_img_pu += width / 2;
src_img_pv += width / 2;
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。