📄 convert.c
字号:
#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 + -