📄 dsputil.c
字号:
avg_pixels8_xy2_c(block+8, pixels+8, line_size, h);
}
static void avg_no_rnd_pixels16_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
avg_pixels8_c(block , pixels , line_size, h); avg_pixels8_c(block+8, pixels+8, line_size, h);
}
static void avg_no_rnd_pixels16_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
avg_no_rnd_pixels8_x2_c(block , pixels , line_size, h);
avg_no_rnd_pixels8_x2_c(block+8, pixels+8, line_size, h);
}
static void avg_no_rnd_pixels16_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
avg_no_rnd_pixels8_y2_c(block , pixels , line_size, h);
avg_no_rnd_pixels8_y2_c(block+8, pixels+8, line_size, h);
}
static void avg_no_rnd_pixels16_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
avg_no_rnd_pixels8_xy2_c(block , pixels , line_size, h);
avg_no_rnd_pixels8_xy2_c(block+8, pixels+8, line_size, h);
}
//Put Functions
static void put_pixels2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
int i;
for(i=0; i<h; i++)
{
//*((uint16_t*)(block )) = (*((const uint16_t*)(pixels)));
memcpy(block, pixels, sizeof(uint16_t));
pixels+=line_size;
block +=line_size;
}
}
static void put_pixels4_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
int i;
for(i=0; i<h; i++)
{
//*((uint32_t*)(block )) = (*((const uint32_t*)(pixels)));
memcpy(block, pixels, sizeof(uint32_t));
pixels+=line_size;
block +=line_size;
}
}
static void put_pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
int i;
for(i=0; i<h; i++)
{
//*((uint32_t*)(block )) = (*((const uint32_t*)(pixels)));
//*((uint32_t*)(block+4)) = (*((const uint32_t*)(pixels+4)));
memcpy(block, pixels, sizeof(uint32_t));
memcpy(block+4, pixels+4, sizeof(uint32_t));
pixels+=line_size;
block +=line_size;
}
}
static _inline void put_no_rnd_pixels8_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels8_c(block, pixels, line_size, h);
}
static _inline void put_no_rnd_pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h)
{
int i;
for(i=0; i<h; i++)
{
uint32_t a,b;
/*a= (*((const uint32_t*)(&src1[i*src_stride1 ])));
b= (*((const uint32_t*)(&src2[i*src_stride2 ]))); */
memcpy(&a, &src1[i*src_stride1], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2], sizeof(uint32_t));
//*((uint32_t*)&dst[i*dst_stride ]) = no_rnd_avg32(a, b);
a = no_rnd_avg32(a, b);
memcpy(&dst[i*dst_stride], &a, sizeof(uint32_t));
/*a= (*((const uint32_t*)(&src1[i*src_stride1+4])));
b= (*((const uint32_t*)(&src2[i*src_stride2+4]))); */
memcpy(&a, &src1[i*src_stride1+4], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2+4], sizeof(uint32_t));
//*((uint32_t*)&dst[i*dst_stride+4]) = no_rnd_avg32(a, b);
a = no_rnd_avg32(a, b);
memcpy(&dst[i*dst_stride+4], &a, sizeof(uint32_t));
}
}
static _inline void put_pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h)
{
int i;
for(i=0; i<h; i++)
{
uint32_t a,b;
//a= (*((const uint32_t*)(&src1[i*src_stride1 ])));
//b= (*((const uint32_t*)(&src2[i*src_stride2 ])));
memcpy(&a, &src1[i*src_stride1], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2], sizeof(uint32_t));
//*((uint32_t*)&dst[i*dst_stride ]) = rnd_avg32(a, b);
a = rnd_avg32(a, b);
memcpy(&dst[i*dst_stride], &a, sizeof(uint32_t));
//a= (*((const uint32_t*)(&src1[i*src_stride1+4])));
//b= (*((const uint32_t*)(&src2[i*src_stride2+4])));
memcpy(&a, &src1[i*src_stride1+4], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2+4], sizeof(uint32_t));
//*((uint32_t*)&dst[i*dst_stride+4]) = rnd_avg32(a, b);
a = rnd_avg32(a, b);
memcpy(&dst[i*dst_stride+4], &a, sizeof(uint32_t));
}
}
static _inline void put_pixels4_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h)
{
int i;
for(i=0; i<h; i++)
{
uint32_t a,b;
//a= (*((const uint32_t*)(&src1[i*src_stride1 ])));
//b= (*((const uint32_t*)(&src2[i*src_stride2 ])));
memcpy(&a, &src1[i*src_stride1], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2], sizeof(uint32_t));
//*((uint32_t*)&dst[i*dst_stride ]) = rnd_avg32(a, b);
a = rnd_avg32(a, b);
memcpy(&dst[i*dst_stride], &a, sizeof(uint32_t));
}
}
static _inline void put_pixels2_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h)
{
int i;
for(i=0; i<h; i++)
{
//uint32_t a,b;
uint16_t a,b;
/*a= (*((const uint16_t*)(&src1[i*src_stride1 ])));
b= (*((const uint16_t*)(&src2[i*src_stride2 ]))); */
memcpy(&a, &src1[i*src_stride1], sizeof(uint16_t));
memcpy(&b, &src2[i*src_stride2], sizeof(uint16_t));
//*((uint16_t*)&dst[i*dst_stride ]) = rnd_avg32(a, b);
a = rnd_avg32(a, b);
memcpy(&dst[i*dst_stride], &a, sizeof(uint16_t));
}
}
static _inline void put_pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h)
{
put_pixels8_l2(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);
put_pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);
}
static _inline void put_no_rnd_pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h)
{
put_no_rnd_pixels8_l2(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);
put_no_rnd_pixels8_l2(dst+8, src1+8, src2+8, dst_stride, src_stride1, src_stride2, h);
}
static _inline void put_no_rnd_pixels8_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_no_rnd_pixels8_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);
}
static _inline void put_pixels8_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels8_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);
}
static _inline void put_no_rnd_pixels8_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_no_rnd_pixels8_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);
}
static _inline void put_pixels8_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels8_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);
}
static _inline void put_pixels8_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h)
{
int i;
for(i=0; i<h; i++)
{
uint32_t a, b, c, d, l0, l1, h0, h1;
/*a= (*((const uint32_t*)(&src1[i*src_stride1])));
b= (*((const uint32_t*)(&src2[i*src_stride2])));
c= (*((const uint32_t*)(&src3[i*src_stride3])));
d= (*((const uint32_t*)(&src4[i*src_stride4]))); */
memcpy(&a, &src1[i*src_stride1], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2], sizeof(uint32_t));
memcpy(&c, &src3[i*src_stride3], sizeof(uint32_t));
memcpy(&d, &src4[i*src_stride4], sizeof(uint32_t));
l0= (a&0x03030303UL) + (b&0x03030303UL) + 0x02020202UL;
h0= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
l1= (c&0x03030303UL) + (d&0x03030303UL);
h1= ((c&0xFCFCFCFCUL)>>2) + ((d&0xFCFCFCFCUL)>>2);
//*((uint32_t*)&dst[i*dst_stride]) = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
a = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
memcpy(&dst[i*dst_stride], &a, sizeof(uint32_t));
/*a= (*((const uint32_t*)(&src1[i*src_stride1+4])));
b= (*((const uint32_t*)(&src2[i*src_stride2+4])));
c= (*((const uint32_t*)(&src3[i*src_stride3+4])));
d= (*((const uint32_t*)(&src4[i*src_stride4+4]))); */
memcpy(&a, &src1[i*src_stride1+4], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2+4], sizeof(uint32_t));
memcpy(&c, &src3[i*src_stride3+4], sizeof(uint32_t));
memcpy(&d, &src4[i*src_stride4+4], sizeof(uint32_t));
l0= (a&0x03030303UL) + (b&0x03030303UL) + 0x02020202UL;
h0= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
l1= (c&0x03030303UL) + (d&0x03030303UL);
h1= ((c&0xFCFCFCFCUL)>>2) + ((d&0xFCFCFCFCUL)>>2);
//*((uint32_t*)&dst[i*dst_stride+4]) = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
a = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
memcpy(&dst[i*dst_stride+4], &a, sizeof(uint32_t));
}
}
static _inline void put_pixels4_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels4_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);
}
static _inline void put_pixels4_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels4_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);
}
static _inline void put_pixels2_x2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels2_l2(block, pixels, pixels+1, line_size, line_size, line_size, h);
}
static _inline void put_pixels2_y2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
put_pixels2_l2(block, pixels, pixels+line_size, line_size, line_size, line_size, h);
}
static _inline void put_no_rnd_pixels8_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h)
{
int i;
for(i=0; i<h; i++)
{
uint32_t a, b, c, d, l0, l1, h0, h1;
/*a= (*((const uint32_t*)(&src1[i*src_stride1])));
b= (*((const uint32_t*)(&src2[i*src_stride2])));
c= (*((const uint32_t*)(&src3[i*src_stride3])));
d= (*((const uint32_t*)(&src4[i*src_stride4]))); */
memcpy(&a, &src1[i*src_stride1], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2], sizeof(uint32_t));
memcpy(&c, &src3[i*src_stride3], sizeof(uint32_t));
memcpy(&d, &src4[i*src_stride4], sizeof(uint32_t));
l0= (a&0x03030303UL) + (b&0x03030303UL) + 0x01010101UL;
h0= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
l1= (c&0x03030303UL) + (d&0x03030303UL);
h1= ((c&0xFCFCFCFCUL)>>2) + ((d&0xFCFCFCFCUL)>>2);
//*((uint32_t*)&dst[i*dst_stride]) = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
a = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
memcpy(&dst[i*dst_stride], &a, sizeof(uint32_t));
/*a= (*((const uint32_t*)(&src1[i*src_stride1+4])));
b= (*((const uint32_t*)(&src2[i*src_stride2+4])));
c= (*((const uint32_t*)(&src3[i*src_stride3+4])));
d= (*((const uint32_t*)(&src4[i*src_stride4+4]))); */
memcpy(&a, &src1[i*src_stride1+4], sizeof(uint32_t));
memcpy(&b, &src2[i*src_stride2+4], sizeof(uint32_t));
memcpy(&c, &src3[i*src_stride3+4], sizeof(uint32_t));
memcpy(&d, &src4[i*src_stride4+4], sizeof(uint32_t));
l0= (a&0x03030303UL) + (b&0x03030303UL) + 0x01010101UL;
h0= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
l1= (c&0x03030303UL) + (d&0x03030303UL);
h1= ((c&0xFCFCFCFCUL)>>2) + ((d&0xFCFCFCFCUL)>>2);
//*((uint32_t*)&dst[i*dst_stride+4]) = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
a = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
memcpy(&dst[i*dst_stride+4], &a, sizeof(uint32_t));
}
}
static _inline void put_pixels16_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h)
{
put_pixels8_l4(dst , src1 , src2 , src3 , src4 , dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);
put_pixels8_l4(dst+8, src1+8, src2+8, src3+8, src4+8, dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);
}
static _inline void put_no_rnd_pixels16_l4(uint8_t *dst, const uint8_t *src1, uint8_t *src2, uint8_t *src3, uint8_t *src4, int dst_stride, int src_stride1, int src_stride2,int src_stride3,int src_stride4, int h)
{
put_no_rnd_pixels8_l4(dst , src1 , src2 , src3 , src4 , dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);
put_no_rnd_pixels8_l4(dst+8, src1+8, src2+8, src3+8, src4+8, dst_stride, src_stride1, src_stride2, src_stride3, src_stride4, h);
}
static _inline void put_pixels2_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
int i, a0, b0, a1, b1;
a0= pixels[0];
b0= pixels[1] + 2;
a0 += b0;
b0 += pixels[2];
pixels+=line_size;
for(i=0; i<h; i+=2)
{
a1= pixels[0];
b1= pixels[1];
a1 += b1;
b1 += pixels[2];
block[0]= (a1+a0)>>2;
block[1]= (b1+b0)>>2;
pixels+=line_size;
block +=line_size;
a0= pixels[0];
b0= pixels[1] + 2;
a0 += b0;
b0 += pixels[2];
block[0]= (a1+a0)>>2;
block[1]= (b1+b0)>>2;
pixels+=line_size;
block +=line_size;
}
}
static _inline void put_pixels4_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
int i;
/*const uint32_t a= (*((const uint32_t*)(pixels)));
const uint32_t b= (*((const uint32_t*)(pixels+1))); */
uint32_t a, b, l0, h0;
uint32_t l1,h1;
memcpy(&a, pixels, sizeof(uint32_t));
memcpy(&b, pixels+1, sizeof(uint32_t));
l0= (a&0x03030303UL) + (b&0x03030303UL) + 0x02020202UL;
h0= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
pixels+=line_size;
for(i=0; i<h; i+=2)
{
/*uint32_t a= (*((const uint32_t*)(pixels)));
uint32_t b= (*((const uint32_t*)(pixels+1))); */
memcpy(&a, pixels, sizeof(uint32_t));
memcpy(&b, pixels+1, sizeof(uint32_t));
l1= (a&0x03030303UL) + (b&0x03030303UL);
h1= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
//*((uint32_t*)block) = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
a = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
memcpy(block, &a, sizeof(uint32_t));
pixels+=line_size;
block +=line_size;
/*a= (*((const uint32_t*)(pixels)));
b= (*((const uint32_t*)(pixels+1))); */
memcpy(&a, pixels, sizeof(uint32_t));
memcpy(&b, pixels+1, sizeof(uint32_t));
l0= (a&0x03030303UL) + (b&0x03030303UL) + 0x02020202UL;
h0= ((a&0xFCFCFCFCUL)>>2) + ((b&0xFCFCFCFCUL)>>2);
//*((uint32_t*)block) = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
a = h0+h1+(((l0+l1)>>2)&0x0F0F0F0FUL);
memcpy(block, &a, sizeof(uint32_t));
pixels+=line_size;
block +=line_size;
}
}
static _inline void put_pixels8_xy2_c(uint8_t *block, const uint8_t *pixels, int line_size, int h)
{
int j;
uint32_t a;
uint32_t b;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -