📄 yuv2yuv.c
字号:
d[j + dest_uv_offs] = _uutab[v1]; } break; case(3): { register unsigned int s1, v1; for (j = 0; j < dest_dx/2 -1; j ++) { s1 = ((unsigned int)s[j] + (unsigned int)s[j+1] + (unsigned int)s2[j] + (unsigned int)s2[j+1] + 2)>>2; v1 = ((unsigned int)v[j] + (unsigned int)v[j+1] + (unsigned int)v2[j] + (unsigned int)v2[j+1] + 2)>>2; d[j] = _vvtab[s1]; d[j + dest_uv_offs] = _uutab[v1]; } s1 =((unsigned int)s[j]+ (unsigned int)s2[j] + 1) >> 1; v1 = ((unsigned int)v[j] + (unsigned int)v2[j] + 1) >> 1; d[j] = _vvtab[s1]; d[j + dest_uv_offs] = _uutab[v1]; } break; } s += uPitch; v += vPitch; d += dest_pitch/2; } } else { /* adjust hue: */ for (i = 0; i < dest_dy/2; i ++) { if((i+1) < dest_dy/2) { s2 = s+uPitch; v2 = v+vPitch; } else { s2 = s; v2 = v; } /* convert pixels: */ switch(OddPattern) { case(0): for (j = 0; j < dest_dx/2; j ++) { register unsigned v1 = v[j], u1 = s[j]; d[j] = _CLIP(8,_vvtab[v1] + _vutab[u1]); d[j + dest_uv_offs] = _CLIP(8,_uutab[u1] + _uvtab[v1]); } break; case(1): { register unsigned s1, v1; for (j = 0; j < dest_dx/2 -1; j ++) { s1 = ((unsigned int)s[j] + (unsigned int)s[j+1] + 1)>>1; v1 = ((unsigned int)v[j] + (unsigned int)v[j+1] + 1)>>1; d[j] = _CLIP(8,_vvtab[v1] + _vutab[s1]); d[j + dest_uv_offs] = _CLIP(8,_uutab[s1] + _uvtab[v1]); } v1 = v[j]; s1 = s[j]; d[j] = _CLIP(8,_vvtab[v1] + _vutab[s1]); d[j + dest_uv_offs] = _CLIP(8,_uutab[s1] + _uvtab[v1]); } break; case(2): for (j = 0; j < dest_dx/2; j ++) { register unsigned s1 = ((unsigned int)s[j] + (unsigned int)s2[j] + 1)>>1; register unsigned v1 = ((unsigned int)v[j] + (unsigned int)v2[j] + 1)>>1; d[j] = _CLIP(8,_vvtab[v1] + _vutab[s1]); d[j + dest_uv_offs] = _CLIP(8,_uutab[s1] + _uvtab[v1]); } break; case(3): { register unsigned s1, v1; for (j = 0; j < dest_dx/2 -1; j ++) { s1 =((unsigned int)s[j] + (unsigned int)s[j+1] + (unsigned int)s2[j] + (unsigned int)s2[j+1] + 2)>>2; v1 =((unsigned int)v[j] + (unsigned int)v[j+1] + (unsigned int)v2[j] + (unsigned int)v2[j+1] + 2)>>2; d[j] = _CLIP(8,_vvtab[v1] + _vutab[s1]); d[j + dest_uv_offs] = _CLIP(8,_uutab[s1] + _uvtab[v1]); } s1 = ((unsigned int)s[j]+ (unsigned int)s2[j] + 1)>>1; v1 = ((unsigned int)v[j] + (unsigned int)v2[j] + 1) >> 1; d[j] = _CLIP(8,_vvtab[v1] + _vutab[s1]); d[j + dest_uv_offs] = _CLIP(8,_uutab[s1] + _uvtab[v1]); } break; } s += uPitch; v += vPitch; d += dest_pitch/2; } } } return 0; } /* conversion is not supported */ return -1;}/* * I420toI420() converter: */int I420toI420 (unsigned char *dest_ptr, int dest_width, int dest_height, int dest_pitch, int dest_x, int dest_y, int dest_dx, int dest_dy, unsigned char *src_ptr, int src_width, int src_height, int src_pitch, int src_x, int src_y, int src_dx, int src_dy){#if 1 unsigned char *pU = src_ptr+src_height*src_pitch, *pV = pU + src_height*src_pitch/4; return I420toI420x(dest_ptr, dest_width, dest_height, dest_pitch, dest_x, dest_y, dest_dx, dest_dy, src_ptr, pU, pV, src_width, src_height, src_pitch, src_pitch/2, src_pitch/2, src_x, src_y, src_dx, src_dy); #else /* scale factors: */ int scale_x, scale_y; /* check arguments: */ if (!chk_args (dest_ptr, dest_width, dest_height, dest_pitch, dest_x, dest_y, dest_dx, dest_dy, src_ptr, src_width, src_height, src_pitch, src_x, src_y, src_dx, src_dy, &scale_x, &scale_y)) return -1; /* remove odd destination pixels: */ if (!adjust_range (&dest_x, &dest_dx, &src_x, &src_dx, scale_x) || !adjust_range (&dest_y, &dest_dy, &src_y, &src_dy, scale_y)) return 0; /* check if we have matching chroma components: */ if ((src_x & 1) || (src_y & 1)) return -1; /* can't shift chromas */ /* check if bottop-up images: */ if (dest_pitch <= 0 || src_pitch <= 0) return -1; /* not supported for this format */ /* check if 1:1 scale: */ if (scale_x == 1 && scale_y == 1) { /* check if no color adjustmenst: */ if (!(is_alpha | is_beta | is_gamma | is_kappa)) { /* no color adjustments: */ unsigned char *s, *d; int src_uv_offs, dest_uv_offs; register int i; /* copy Y plane: */ s = src_ptr + src_x + src_y * src_pitch; d = dest_ptr + dest_x + dest_y * dest_pitch; for (i = 0; i < dest_dy; i ++) { memcpy (d, s, dest_dx); /* Flawfinder: ignore */ s += src_pitch; d += dest_pitch; } /* get Cr/Cb offsets: */ src_uv_offs = src_height * src_pitch / 4; dest_uv_offs = dest_height * dest_pitch / 4; /* copy Cr/Cb planes: */ s = (src_ptr + src_height * src_pitch) + src_x/2 + src_y/2 * src_pitch/2; d = (dest_ptr + dest_height * dest_pitch) + dest_x/2 + dest_y/2 * dest_pitch/2; for (i = 0; i < dest_dy/2; i ++) { memcpy (d, s, dest_dx/2); /* Flawfinder: ignore */ memcpy (d + dest_uv_offs, s + src_uv_offs, dest_dx/2); /* Flawfinder: ignore */ s += src_pitch/2; d += dest_pitch/2; } } else { /* adjust colors: */ unsigned char *s, *d; int src_uv_offs, dest_uv_offs; register int i, j; /* convert Y plane: */ s = src_ptr + src_x + src_y * src_pitch; d = dest_ptr + dest_x + dest_y * dest_pitch; for (i = 0; i < dest_dy; i ++) { /* convert pixels: */ for (j = 0; j < dest_dx; j ++) d[j] = _yytab[s[j]]; s += src_pitch; d += dest_pitch; } /* get Cr/Cb offsets: */ src_uv_offs = src_height * src_pitch / 4; dest_uv_offs = dest_height * dest_pitch / 4; /* get chroma pointers: */ s = (src_ptr + src_height * src_pitch) + src_x/2 + src_y/2 * src_pitch/2; d = (dest_ptr + dest_height * dest_pitch) + dest_x/2 + dest_y/2 * dest_pitch/2; /* check if no hue adjustment: */ if (!is_alpha) { /* no chroma rotation: */ for (i = 0; i < dest_dy/2; i ++) { /* convert pixels: */ for (j = 0; j < dest_dx/2; j ++) { d[j] = _vvtab[s[j]]; d[j + dest_uv_offs] = _uutab[s[j + src_uv_offs]]; } s += src_pitch/2; d += dest_pitch/2; } } else { /* adjust hue: */ for (i = 0; i < dest_dy/2; i ++) { /* convert pixels: */ for (j = 0; j < dest_dx/2; j ++) { register unsigned v = s[j], u = s[j + src_uv_offs]; d[j] = _CLIP(8,_vvtab[v] + _vutab[u]); d[j + dest_uv_offs] = _CLIP(8,_uutab[u] + _uvtab[v]); } s += src_pitch/2; d += dest_pitch/2; } } } return 0; } /* conversion is not supported */ return -1;#endif}int I420toYV12x (unsigned char *dest_ptr, int dest_width, int dest_height, int dest_pitch, int dest_x, int dest_y, int dest_dx, int dest_dy, unsigned char *pY, unsigned char *pU, unsigned char *pV, int src_width, int src_height, int yPitch, int uPitch, int vPitch, int src_x, int src_y, int src_dx, int src_dy){ /* scale factors: */ int scale_x, scale_y; /* check arguments: */ if (!chk_args (dest_ptr, dest_width, dest_height, dest_pitch, dest_x, dest_y, dest_dx, dest_dy, pY, src_width, src_height, yPitch, src_x, src_y, src_dx, src_dy, &scale_x, &scale_y)) return -1; /* remove odd destination pixels: */ if (!adjust_range (&dest_x, &dest_dx, &src_x, &src_dx, scale_x) || !adjust_range (&dest_y, &dest_dy, &src_y, &src_dy, scale_y)) return 0; /* check if we have matching chroma components: */ if ((src_x & 1) || (src_y & 1)) return -1; /* can't shift chromas */ /* check if bottop-up images: */ if (dest_pitch <= 0 || yPitch <= 0) return -1; /* not supported for this format */ /* check if 1:1 scale: */ if (scale_x == 1 && scale_y == 1) { /* check if no color adjustments: */ if (!(is_alpha | is_beta | is_gamma | is_kappa)) { /* no color adjustments: */ unsigned char *sy, *su, *sv, *d; int dest_uv_offs; register int i; /* copy Y plane: */ sy = pY + src_x + src_y * yPitch; d = dest_ptr + dest_x + dest_y * dest_pitch; for (i = 0; i < dest_dy; i ++) { memcpy (d, sy, dest_dx); /* Flawfinder: ignore */ sy += yPitch; d += dest_pitch; } /* get Cr/Cb offsets: */ dest_uv_offs = dest_height * dest_pitch / 4; /* copy Cr/Cb planes: */ su = pU + src_x/2 + src_y/2 * uPitch; sv = pV + src_x/2 + src_y/2 * vPitch; d = (dest_ptr + dest_height * dest_pitch) + dest_x/2 + dest_y/2 * dest_pitch/2; for (i = 0; i < dest_dy/2; i ++) { memcpy (d, sv, dest_dx/2); /* Flawfinder: ignore */ memcpy (d + dest_uv_offs, su, dest_dx/2); /* Flawfinder: ignore */ su += uPitch; sv += vPitch; d += dest_pitch/2; } } else { /* adjust colors: */ unsigned char *sy, *su, *sv, *d; int dest_uv_offs; register int i, j; /* convert Y plane: */ sy = pY + src_x + src_y * yPitch; d = dest_ptr + dest_x + dest_y * dest_pitch; for (i = 0; i < dest_dy; i ++) { /* convert pixels: */ for (j = 0; j < dest_dx; j ++) d[j] = _yytab[sy[j]]; sy += yPitch; d += dest_pitch; } /* get Cr/Cb offsets: */ dest_uv_offs = dest_height * dest_pitch / 4; /* get chroma pointers: */ su = pU + src_x/2 + src_y/2 * uPitch; sv = pV + src_x/2 + src_y/2 * vPitch; d = (dest_ptr + dest_height * dest_pitch) + dest_x/2 + dest_y/2 * dest_pitch/2; /* check if no hue adjustment: */ if (!is_alpha) { /* no chroma rotation: */ for (i = 0; i < dest_dy/2; i ++) { /* convert pixels: */ for (j = 0; j < dest_dx/2; j ++) { d[j] = _vvtab[sv[j]]; d[j + dest_uv_offs] = _uutab[su[j]]; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -