📄 interpolate8x8.c
字号:
dest3 = FUNSHIFT2(src5,src4);
*(ptr_dst) = QUADAVG(dest0,dest2);
*(ptr_dst+1)= QUADAVG(dest1,dest3);
ptr_src += stride1;
ptr_dst += stride1;
}
}
else if(temp==3)
{
for (j = 0; j < 8; j++) {
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest0 = FUNSHIFT1(src1,src0);
dest1 = FUNSHIFT1(src2,src1);
dest2 = FUNSHIFT1(src4,src3);
dest3 = FUNSHIFT1(src5,src4);
*(ptr_dst) = QUADAVG(dest0,dest2);
*(ptr_dst+1)= QUADAVG(dest1,dest3);
ptr_src += stride1;
ptr_dst += stride1;
}
}
}
#else
void
interpolate8x8_halfpel_v_c(uint8_t * const dst,/* vertical half pixel interpolate image */
const uint8_t * const src,/* integer pixel image */
const uint32_t stride,/* image stride */
const uint32_t rounding)/* rounding bit(0 ro 1) */
{
uint32_t j;
uint32_t src0,src1,src2,src3,src4,src5,dest0,dest1,dest2,dest3;
uint32_t * ptr_dst = (uint32_t *)dst;
const uint32_t * ptr_src = (uint32_t *)src;
uint32_t stride1=stride>>2;
uint32_t temp;
temp = ((uint32_t)src)&3;
if(!temp)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
for (j = 0; j < 8; j++) {
src2 = *(ptr_src+stride1);
src3 = *(ptr_src+stride1+1);
*(ptr_dst) = QUADAVG(src0,src2);
*(ptr_dst+1)= QUADAVG(src1,src3);
ptr_src += stride1;
ptr_dst += stride1;
src0=src2;
src1=src3;
}
}
else if(temp==1)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
dest0 = FUNSHIFT3(src1,src0);
dest1 = FUNSHIFT3(src2,src1);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest2 = FUNSHIFT3(src4,src3);
dest3 = FUNSHIFT3(src5,src4);
*(ptr_dst) = QUADAVG(dest0,dest2);
*(ptr_dst+1)= QUADAVG(dest1,dest3);
ptr_src += stride1;
ptr_dst += stride1;
dest0=dest2;
dest1=dest3;
}
}
else if(temp==2)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
dest0 = FUNSHIFT2(src1,src0);
dest1 = FUNSHIFT2(src2,src1);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest2 = FUNSHIFT2(src4,src3);
dest3 = FUNSHIFT2(src5,src4);
*(ptr_dst) = QUADAVG(dest0,dest2);
*(ptr_dst+1)= QUADAVG(dest1,dest3);
ptr_src += stride1;
ptr_dst += stride1;
dest0=dest2;
dest1=dest3;
}
}
else if(temp==3)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
dest0 = FUNSHIFT1(src1,src0);
dest1 = FUNSHIFT1(src2,src1);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest2 = FUNSHIFT1(src4,src3);
dest3 = FUNSHIFT1(src5,src4);
*(ptr_dst) = QUADAVG(dest0,dest2);
*(ptr_dst+1)= QUADAVG(dest1,dest3);
ptr_src += stride1;
ptr_dst += stride1;
dest0=dest2;
dest1=dest3;
}
}
}
#endif
#endif
/*
horizontal and vertical half pixel interpolate of 8x8 block
Add by fyh 2002.12.26
*/
#ifndef _TRIMEDIA
void
interpolate8x8_halfpel_hv_c(uint8_t * const dst,/* horizontal and vertical half pixel interpolate image */
const uint8_t * const src,/* integer pixel image */
const uint32_t stride,/* image stride */
const uint32_t rounding)/* rounding bit(0 ro 1) */
{
uint32_t i, j;
for (j = 0; j < 8; j++) {
for (i = 0; i < 8; i++) {
int16_t tot =
src[j * stride + i] + src[j * stride + i + 1] +
src[j * stride + i + stride] + src[j * stride + i + stride +
1];
tot = ((tot + 2 - rounding) >> 2);
dst[j * stride + i] = (uint8_t) tot;
}
}
}
#else
void
interpolate8x8_halfpel_hv_c(uint8_t * const dst,/* horizontal and vertical half pixel interpolate image */
const uint8_t * const src,/* integer pixel image */
const uint32_t stride,/* image stride */
const uint32_t rounding)/* rounding bit(0 ro 1) */
{
uint32_t j;
uint32_t src0,src1,src2,src3,src4,src5;
uint32_t dest0,dest1,dest2,dest3,dest4,dest5,dest6,dest7,dest8,dest9,
dest10;
uint32_t * ptr_dst = (uint32_t *)dst;
const uint32_t * ptr_src = (uint32_t *)src;
uint32_t stride1=stride>>2;
uint32_t temp;
temp = ((uint32_t)src)&3;
if(!temp)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
/* vertical interpolate */
dest0= QUADAVG(src0,src3);
dest1= QUADAVG(src1,src4);
dest2= QUADAVG(src2,src5);
/* horizontal interpolate */
dest3 = FUNSHIFT3(dest1,dest0);
dest4 = FUNSHIFT3(dest2,dest1);
*(ptr_dst) =QUADAVG(dest0,dest3);
*(ptr_dst+1)=QUADAVG(dest1,dest4);
ptr_src += stride1;
ptr_dst += stride1;
src0=src3;
src1=src4;
src2=src5;
}
}
else if(temp==1)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
dest0 = FUNSHIFT3(src1,src0);
dest1 = FUNSHIFT3(src2,src1);
dest2 = UBYTESEL(src2,1);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest3 = FUNSHIFT3(src4,src3);
dest4 = FUNSHIFT3(src5,src4);
dest5 = UBYTESEL(src5,1);
/* vertical interpolate */
dest6= QUADAVG(dest0,dest3);
dest7= QUADAVG(dest1,dest4);
dest8= QUADAVG(dest2,dest5);
/* horizontal interpolate */
dest9 = FUNSHIFT3(dest7,dest6);
dest10 = FUNSHIFT3(dest8,dest7);
*(ptr_dst) =QUADAVG(dest6,dest9);
*(ptr_dst+1)=QUADAVG(dest7,dest10);
ptr_src += stride1;
ptr_dst += stride1;
dest0=dest3;
dest1=dest4;
dest2=dest5;
}
}
else if(temp==2)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
dest0 = FUNSHIFT2(src1,src0);
dest1 = FUNSHIFT2(src2,src1);
dest2 = UBYTESEL(src2,2);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest3 = FUNSHIFT2(src4,src3);
dest4 = FUNSHIFT2(src5,src4);
dest5 = UBYTESEL(src5,2);
/* vertical interpolate */
dest6= QUADAVG(dest0,dest3);
dest7= QUADAVG(dest1,dest4);
dest8= QUADAVG(dest2,dest5);
/* horizontal interpolate */
dest9 = FUNSHIFT3(dest7,dest6);
dest10 = FUNSHIFT3(dest8,dest7);
*(ptr_dst) =QUADAVG(dest6,dest9);
*(ptr_dst+1)=QUADAVG(dest7,dest10);
ptr_src += stride1;
ptr_dst += stride1;
dest0=dest3;
dest1=dest4;
dest2=dest5;
}
}
else if(temp==3)
{
src0 = *(ptr_src);
src1 = *(ptr_src+1);
src2 = *(ptr_src+2);
dest0 = FUNSHIFT1(src1,src0);
dest1 = FUNSHIFT1(src2,src1);
dest2 = UBYTESEL(src2,3);
for (j = 0; j < 8; j++) {
src3 = *(ptr_src+stride1);
src4 = *(ptr_src+stride1+1);
src5 = *(ptr_src+stride1+2);
dest3 = FUNSHIFT1(src4,src3);
dest4 = FUNSHIFT1(src5,src4);
dest5 = UBYTESEL(src5,3);
/* vertical interpolate */
dest6= QUADAVG(dest0,dest3);
dest7= QUADAVG(dest1,dest4);
dest8= QUADAVG(dest2,dest5);
/* horizontal interpolate */
dest9 = FUNSHIFT3(dest7,dest6);
dest10 = FUNSHIFT3(dest8,dest7);
*(ptr_dst) =QUADAVG(dest6,dest9);
*(ptr_dst+1)=QUADAVG(dest7,dest10);
ptr_src += stride1;
ptr_dst += stride1;
dest0=dest3;
dest1=dest4;
dest2=dest5;
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -