⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 convert.c

📁 yuv422->yuv420 非常好用
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "string.h"
#include "stdlib.h"
#include "convert.h"



static void plane_copy( uint8 *dst, int i_dst,
                        uint8 *src, int i_src, int w, int h)
{
    while( h-- )
    {
        memcpy( dst, src, w );
        dst += i_dst;
        src += i_src;
    }
}



static void plane_subsamplev2( uint8 *dst, int i_dst,
                                      uint8 *src, int i_src, int w, int h)
{

    for( ; h > 0; h-- )
    {
		uint8 *d = dst;
        uint8 *s = src;

        int     i;
        for( i = 0; i < w; i++ )
        {
            *d++ = ( s[0] + s[i_src] + 1 ) >> 1;
            s++;
        }
        dst += i_dst;
        src += i_src*2;
    }
}


void yuv422_to_yuv420(Picture* dst, Picture* src, int height, int width)
{
	plane_copy(dst->plane[0], dst->stride[0], 
		       src->plane[0], src->stride[0], 
		       width, height);
	plane_subsamplev2(dst->plane[1], dst->stride[1], 
		              src->plane[1], src->stride[1], 
		              width/2, height/2);
	plane_subsamplev2(dst->plane[2], dst->stride[2], 
		              src->plane[2], src->stride[2], 
		              width/2, height/2);

}

void input_to_plane(uint8* input, Picture* src)
{
	uint8* yuv_buf;
	int sum;
	yuv_buf = input;

	sum = HEIGHT*WIDTH;
	memcpy(src->plane[0], yuv_buf, sum);
	yuv_buf += sum;
	sum /= 2;
	memcpy(src->plane[1], yuv_buf, sum);
	yuv_buf += sum;
	memcpy(src->plane[2], yuv_buf, sum);

}

void plane_to_output(uint8* output, Picture* src)
{
	int sum;
	int i;
	sum = HEIGHT*WIDTH;
/*	for(i=0;i<HEIGHT;i++)
	memcpy(output+i*WIDTH, src->plane[0]+i*src->stride[0], WIDTH);
	output += sum;
	for(i=0;i<HEIGHT/2;i++)
	memcpy(output+i*WIDTH/2, src->plane[1]+i*src->stride[1], WIDTH/2);
	output += sum/4;
    for(i=0;i<HEIGHT/2;i++)
    memcpy(output+i*WIDTH/2, src->plane[2]+i*src->stride[2], WIDTH/2);*/

	//two ways have the same effect
	memcpy(output, src->plane[0],sum);   
	output += sum;
	sum /= 4;
	memcpy(output, src->plane[1], sum);
	output += sum;
	memcpy(output, src->plane[2], sum);
}

void plane_to_output_o(uint8* output, Picture* src)
{
	int sum;
	int i;
	sum = HEIGHT*WIDTH;
/*	for(i=0;i<HEIGHT;i++)
	memcpy(output+i*WIDTH, src->plane[0]+i*src->stride[0], WIDTH);
	output += sum;
	for(i=0;i<HEIGHT/2;i++)
	memcpy(output+i*WIDTH/2, src->plane[1]+i*src->stride[1], WIDTH/2);
	output += sum/4;
    for(i=0;i<HEIGHT/2;i++)
    memcpy(output+i*WIDTH/2, src->plane[2]+i*src->stride[2], WIDTH/2);*/

	//two ways have the same effect
	memcpy(output, src->plane[0],sum);   
	output += sum;
	sum /= 2;
	memcpy(output, src->plane[1], sum);
	output += sum;
	memcpy(output, src->plane[2], sum);
}



void init_src(Picture* pic)
{
    pic->stride[0] = WIDTH;
	pic->stride[1] = WIDTH/2;
	pic->stride[2] = WIDTH/2;

	pic->plane[0] = (uint8*)malloc(HEIGHT*WIDTH);
	pic->plane[1] = (uint8*)malloc(HEIGHT*WIDTH/2);
	pic->plane[2] = (uint8*)malloc(HEIGHT*WIDTH/2);

}

void init_des(Picture* pic)
{
    pic->stride[0] = WIDTH;
	pic->stride[1] = WIDTH/2;
	pic->stride[2] = WIDTH/2;

	pic->plane[0] = (uint8*)malloc(HEIGHT*WIDTH);
	pic->plane[1] = (uint8*)malloc(HEIGHT*WIDTH/4);
	pic->plane[2] = (uint8*)malloc(HEIGHT*WIDTH/4);

}

static const long int crv_tab[256] = {
  0xFF33B580,0xFF354E15,0xFF36E6AA,0xFF387F3F, 
  0xFF3A17D4,0xFF3BB069,0xFF3D48FE,0xFF3EE193, 
  0xFF407A28,0xFF4212BD,0xFF43AB52,0xFF4543E7, 
  0xFF46DC7C,0xFF487511,0xFF4A0DA6,0xFF4BA63B, 
  0xFF4D3ED0,0xFF4ED765,0xFF506FFA,0xFF52088F, 
  0xFF53A124,0xFF5539B9,0xFF56D24E,0xFF586AE3, 
  0xFF5A0378,0xFF5B9C0D,0xFF5D34A2,0xFF5ECD37, 
  0xFF6065CC,0xFF61FE61,0xFF6396F6,0xFF652F8B, 
  0xFF66C820,0xFF6860B5,0xFF69F94A,0xFF6B91DF, 
  0xFF6D2A74,0xFF6EC309,0xFF705B9E,0xFF71F433, 
  0xFF738CC8,0xFF75255D,0xFF76BDF2,0xFF785687, 
  0xFF79EF1C,0xFF7B87B1,0xFF7D2046,0xFF7EB8DB, 
  0xFF805170,0xFF81EA05,0xFF83829A,0xFF851B2F, 
  0xFF86B3C4,0xFF884C59,0xFF89E4EE,0xFF8B7D83, 
  0xFF8D1618,0xFF8EAEAD,0xFF904742,0xFF91DFD7, 
  0xFF93786C,0xFF951101,0xFF96A996,0xFF98422B, 
  0xFF99DAC0,0xFF9B7355,0xFF9D0BEA,0xFF9EA47F, 
  0xFFA03D14,0xFFA1D5A9,0xFFA36E3E,0xFFA506D3, 
  0xFFA69F68,0xFFA837FD,0xFFA9D092,0xFFAB6927, 
  0xFFAD01BC,0xFFAE9A51,0xFFB032E6,0xFFB1CB7B, 
  0xFFB36410,0xFFB4FCA5,0xFFB6953A,0xFFB82DCF, 
  0xFFB9C664,0xFFBB5EF9,0xFFBCF78E,0xFFBE9023, 
  0xFFC028B8,0xFFC1C14D,0xFFC359E2,0xFFC4F277, 
  0xFFC68B0C,0xFFC823A1,0xFFC9BC36,0xFFCB54CB, 
  0xFFCCED60,0xFFCE85F5,0xFFD01E8A,0xFFD1B71F, 
  0xFFD34FB4,0xFFD4E849,0xFFD680DE,0xFFD81973, 
  0xFFD9B208,0xFFDB4A9D,0xFFDCE332,0xFFDE7BC7, 
  0xFFE0145C,0xFFE1ACF1,0xFFE34586,0xFFE4DE1B, 
  0xFFE676B0,0xFFE80F45,0xFFE9A7DA,0xFFEB406F, 
  0xFFECD904,0xFFEE7199,0xFFF00A2E,0xFFF1A2C3, 
  0xFFF33B58,0xFFF4D3ED,0xFFF66C82,0xFFF80517, 
  0xFFF99DAC,0xFFFB3641,0xFFFCCED6,0xFFFE676B, 
  0x00000000,0x00019895,0x0003312A,0x0004C9BF, 
  0x00066254,0x0007FAE9,0x0009937E,0x000B2C13, 
  0x000CC4A8,0x000E5D3D,0x000FF5D2,0x00118E67, 
  0x001326FC,0x0014BF91,0x00165826,0x0017F0BB, 
  0x00198950,0x001B21E5,0x001CBA7A,0x001E530F, 
  0x001FEBA4,0x00218439,0x00231CCE,0x0024B563, 
  0x00264DF8,0x0027E68D,0x00297F22,0x002B17B7, 
  0x002CB04C,0x002E48E1,0x002FE176,0x00317A0B, 
  0x003312A0,0x0034AB35,0x003643CA,0x0037DC5F, 
  0x003974F4,0x003B0D89,0x003CA61E,0x003E3EB3, 
  0x003FD748,0x00416FDD,0x00430872,0x0044A107, 
  0x0046399C,0x0047D231,0x00496AC6,0x004B035B, 
  0x004C9BF0,0x004E3485,0x004FCD1A,0x005165AF, 
  0x0052FE44,0x005496D9,0x00562F6E,0x0057C803, 
  0x00596098,0x005AF92D,0x005C91C2,0x005E2A57, 
  0x005FC2EC,0x00615B81,0x0062F416,0x00648CAB, 
  0x00662540,0x0067BDD5,0x0069566A,0x006AEEFF, 
  0x006C8794,0x006E2029,0x006FB8BE,0x00715153, 
  0x0072E9E8,0x0074827D,0x00761B12,0x0077B3A7, 
  0x00794C3C,0x007AE4D1,0x007C7D66,0x007E15FB, 
  0x007FAE90,0x00814725,0x0082DFBA,0x0084784F, 
  0x008610E4,0x0087A979,0x0089420E,0x008ADAA3, 
  0x008C7338,0x008E0BCD,0x008FA462,0x00913CF7, 
  0x0092D58C,0x00946E21,0x009606B6,0x00979F4B, 
  0x009937E0,0x009AD075,0x009C690A,0x009E019F, 
  0x009F9A34,0x00A132C9,0x00A2CB5E,0x00A463F3, 
  0x00A5FC88,0x00A7951D,0x00A92DB2,0x00AAC647, 
  0x00AC5EDC,0x00ADF771,0x00AF9006,0x00B1289B, 
  0x00B2C130,0x00B459C5,0x00B5F25A,0x00B78AEF, 
  0x00B92384,0x00BABC19,0x00BC54AE,0x00BDED43, 
  0x00BF85D8,0x00C11E6D,0x00C2B702,0x00C44F97, 
  0x00C5E82C,0x00C780C1,0x00C91956,0x00CAB1EB, 
};
static const long int cbu_tab[256] = {
0x00BF85D8,0x00C11E6D,0x00C2B702,0x00C44F97,  
0x00C5E82C,0x00C780C1,0x00C91956,0x00CAB1EB, 
0xFEFDCB80,0xFEFFCFE9,0xFF01D452,0xFF03D8BB,  
0xFF05DD24,0xFF07E18D,0xFF09E5F6,0xFF0BEA5F, 
0xFF0DEEC8,0xFF0FF331,0xFF11F79A,0xFF13FC03,
0xFF16006C,0xFF1804D5,0xFF1A093E,0xFF1C0DA7,  
0xFF1E1210,0xFF201679,0xFF221AE2,0xFF241F4B, 
0xFF2623B4,0xFF28281D,0xFF2A2C86,0xFF2C30EF,  
0xFF2E3558,0xFF3039C1,0xFF323E2A,0xFF344293,  
0xFF3646FC,0xFF384B65,0xFF3A4FCE,0xFF3C5437,  
0xFF3E58A0,0xFF405D09,0xFF426172,0xFF4465DB,  
0xFF466A44,0xFF486EAD,0xFF4A7316,0xFF4C777F,  
0xFF4E7BE8,0xFF508051,0xFF5284BA,0xFF548923,  
0xFF568D8C,0xFF5891F5,0xFF5A965E,0xFF5C9AC7,  
0xFF5E9F30,0xFF60A399,0xFF62A802,0xFF64AC6B,  
0xFF66B0D4,0xFF68B53D,0xFF6AB9A6,0xFF6CBE0F,  
0xFF6EC278,0xFF70C6E1,0xFF72CB4A,0xFF74CFB3,  
0xFF76D41C,0xFF78D885,0xFF7ADCEE,0xFF7CE157,  
0xFF7EE5C0,0xFF80EA29,0xFF82EE92,0xFF84F2FB,  
0xFF86F764,0xFF88FBCD,0xFF8B0036,0xFF8D049F,  
0xFF8F0908,0xFF910D71,0xFF9311DA,0xFF951643,  
0xFF971AAC,0xFF991F15,0xFF9B237E,0xFF9D27E7,  
0xFF9F2C50,0xFFA130B9,0xFFA33522,0xFFA5398B,  
0xFFA73DF4,0xFFA9425D,0xFFAB46C6,0xFFAD4B2F,  
0xFFAF4F98,0xFFB15401,0xFFB3586A,0xFFB55CD3,  
0xFFB7613C,0xFFB965A5,0xFFBB6A0E,0xFFBD6E77, 
0xFFBF72E0,0xFFC17749,0xFFC37BB2,0xFFC5801B,  
0xFFC78484,0xFFC988ED,0xFFCB8D56,0xFFCD91BF,  
0xFFCF9628,0xFFD19A91,0xFFD39EFA,0xFFD5A363,  
0xFFD7A7CC,0xFFD9AC35,0xFFDBB09E,0xFFDDB507,  
0xFFDFB970,0xFFE1BDD9,0xFFE3C242,0xFFE5C6AB,  
0xFFE7CB14,0xFFE9CF7D,0xFFEBD3E6,0xFFEDD84F,  
0xFFEFDCB8,0xFFF1E121,0xFFF3E58A,0xFFF5E9F3,  
0xFFF7EE5C,0xFFF9F2C5,0xFFFBF72E,0xFFFDFB97,  
0x00000000,0x00020469,0x000408D2,0x00060D3B,  
0x000811A4,0x000A160D,0x000C1A76,0x000E1EDF,  
0x00102348,0x001227B1,0x00142C1A,0x00163083,  
0x001834EC,0x001A3955,0x001C3DBE,0x001E4227,  
0x00204690,0x00224AF9,0x00244F62,0x002653CB,  
0x00285834,0x002A5C9D,0x002C6106,0x002E656F,  
0x003069D8,0x00326E41,0x003472AA,0x00367713,  
0x00387B7C,0x003A7FE5,0x003C844E,0x003E88B7,  
0x00408D20,0x00429189,0x004495F2,0x00469A5B,  
0x00489EC4,0x004AA32D,0x004CA796,0x004EABFF,  
0x0050B068,0x0052B4D1,0x0054B93A,0x0056BDA3,  
0x0058C20C,0x005AC675,0x005CCADE,0x005ECF47,  
0x0060D3B0,0x0062D819,0x0064DC82,0x0066E0EB,  
0x0068E554,0x006AE9BD,0x006CEE26,0x006EF28F,  
0x0070F6F8,0x0072FB61,0x0074FFCA,0x00770433,  
0x0079089C,0x007B0D05,0x007D116E,0x007F15D7,  
0x00811A40,0x00831EA9,0x00852312,0x0087277B,  
0x00892BE4,0x008B304D,0x008D34B6,0x008F391F,  
0x00913D88,0x009341F1,0x0095465A,0x00974AC3,  
0x00994F2C,0x009B5395,0x009D57FE,0x009F5C67, 
0x00A160D0,0x00A36539,0x00A569A2,0x00A76E0B,  
0x00A97274,0x00AB76DD,0x00AD7B46,0x00AF7FAF,  
0x00B18418,0x00B38881,0x00B58CEA,0x00B79153,  
0x00B995BC,0x00BB9A25,0x00BD9E8E,0x00BFA2F7,  
0x00C1A760,0x00C3ABC9,0x00C5B032,0x00C7B49B,  
0x00C9B904,0x00CBBD6D,0x00CDC1D6,0x00CFC63F,  
0x00D1CAA8,0x00D3CF11,0x00D5D37A,0x00D7D7E3,  
0x00D9DC4C,0x00DBE0B5,0x00DDE51E,0x00DFE987,  
0x00E1EDF0,0x00E3F259,0x00E5F6C2,0x00E7FB2B,  
0x00E9FF94,0x00EC03FD,0x00EE0866,0x00F00CCF,
};
static const long int cgu_tab[256] = {
0xFFCDDA80,0xFFCE3ECB,0xFFCEA316,0xFFCF0761,  
0xFFCF6BAC,0xFFCFCFF7,0xFFD03442,0xFFD0988D,  
0xFFD0FCD8,0xFFD16123,0xFFD1C56E,0xFFD229B9,  
0xFFD28E04,0xFFD2F24F,0xFFD3569A,0xFFD3BAE5,  
0xFFD41F30,0xFFD4837B,0xFFD4E7C6,0xFFD54C11,  
0xFFD5B05C,0xFFD614A7,0xFFD678F2,0xFFD6DD3D,  
0xFFD74188,0xFFD7A5D3,0xFFD80A1E,0xFFD86E69,  
0xFFD8D2B4,0xFFD936FF,0xFFD99B4A,0xFFD9FF95,  
0xFFDA63E0,0xFFDAC82B,0xFFDB2C76,0xFFDB90C1,  
0xFFDBF50C,0xFFDC5957,0xFFDCBDA2,0xFFDD21ED,  
0xFFDD8638,0xFFDDEA83,0xFFDE4ECE,0xFFDEB319,  
0xFFDF1764,0xFFDF7BAF,0xFFDFDFFA,0xFFE04445,  
0xFFE0A890,0xFFE10CDB,0xFFE17126,0xFFE1D571,  
0xFFE239BC,0xFFE29E07,0xFFE30252,0xFFE3669D,  
0xFFE3CAE8,0xFFE42F33,0xFFE4937E,0xFFE4F7C9,  
0xFFE55C14,0xFFE5C05F,0xFFE624AA,0xFFE688F5,  
0xFFE6ED40,0xFFE7518B,0xFFE7B5D6,0xFFE81A21,  
0xFFE87E6C,0xFFE8E2B7,0xFFE94702,0xFFE9AB4D,  
0xFFEA0F98,0xFFEA73E3,0xFFEAD82E,0xFFEB3C79,  
0xFFEBA0C4,0xFFEC050F,0xFFEC695A,0xFFECCDA5,  
0xFFED31F0,0xFFED963B,0xFFEDFA86,0xFFEE5ED1,  
0xFFEEC31C,0xFFEF2767,0xFFEF8BB2,0xFFEFEFFD,  
0xFFF05448,0xFFF0B893,0xFFF11CDE,0xFFF18129,  
0xFFF1E574,0xFFF249BF,0xFFF2AE0A,0xFFF31255,  
0xFFF376A0,0xFFF3DAEB,0xFFF43F36,0xFFF4A381,  
0xFFF507CC,0xFFF56C17,0xFFF5D062,0xFFF634AD,  
0xFFF698F8,0xFFF6FD43,0xFFF7618E,0xFFF7C5D9,  
0xFFF82A24,0xFFF88E6F,0xFFF8F2BA,0xFFF95705,  
0xFFF9BB50,0xFFFA1F9B,0xFFFA83E6,0xFFFAE831,  
0xFFFB4C7C,0xFFFBB0C7,0xFFFC1512,0xFFFC795D,  
0xFFFCDDA8,0xFFFD41F3,0xFFFDA63E,0xFFFE0A89,  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -