📄 colorcvt.c
字号:
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + bu]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 16);
/* 2nd row: */
y1 = ytab[sy1[1]];
y2 = ytab[sy2[1]];
/* first line BGR0 */
*(unsigned int *)(d1+BPP4) =
(CLIP8[y1 + bu]) |
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+BPP4) =
(CLIP8[y2 + bu]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 16);
/* next 2x2 block */
sy1 += 2; sy2 += 2;
su += 1; sv += 1;
d1 += 2*BPP4; d2 += 2*BPP4;
}
/* convert the last 2x1 block: */
if (dx & 1) {
bu = butab[su[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
rv = rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + bu]) |
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + bu]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 16);
}
}
static void dblineI420toRGB32alpha (unsigned char *d1, unsigned char *d2, int dest_x,
unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,
int src_x, int dx)
{
register int y1, y2, ruv, guv, buv;
register int i;
/* convert first 2x1 block: */
if (src_x & 1) {
buv = butab[su[0]] + bvtab[sv[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
ruv = rutab[su[0]] + rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + buv]) |
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + buv]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 16);
sy1 += 1; sy2 += 1;
su += 1; sv += 1; /* shift luma !!! */
d1 += BPP4; d2 += BPP4;
dx --;
}
/* convert all integral 2x2 blocks: */
for (i = 0; i < dx/2; i ++) {
buv = butab[su[0]] + bvtab[sv[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
ruv = rutab[su[0]] + rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + buv]) |
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + buv]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 16);
y1 = ytab[sy1[1]];
y2 = ytab[sy2[1]];
/* first line BGR0 */
*(unsigned int *)(d1+BPP4) =
(CLIP8[y1 + buv]) |
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+BPP4) =
(CLIP8[y2 + buv]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 16);
/* next 2x2 block */
sy1 += 2; sy2 += 2;
su += 1; sv += 1;
d1 += 2*BPP4; d2 += 2*BPP4;
}
/* convert last 2x1 block: */
if (dx & 1) {
buv = butab[su[0]] + bvtab[sv[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
ruv = rutab[su[0]] + rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + buv]) |
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 16);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + buv]) |
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 16);
}
}
static void dblineI420toBGR32 (unsigned char *d1, unsigned char *d2, int dest_x,
unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,
int src_x, int dx)
{
register int y1, y2, rv, guv, bu;
register int i;
/* convert first 2x1 block: */
if (src_x & 1) {
bu = butab[su[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
rv = rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + bu] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + bu] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 0);
sy1 += 1; sy2 += 1;
su += 1; sv += 1; /* shift luma !!! */
d1 += BPP4; d2 += BPP4;
dx --;
}
/* convert all integral 2x2 blocks: */
for (i = 0; i < dx/2; i ++) {
bu = butab[su[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
rv = rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + bu] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + bu] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 0);
/* 2nd row: */
y1 = ytab[sy1[1]];
y2 = ytab[sy2[1]];
/* first line BGR0 */
*(unsigned int *)(d1+BPP4) =
(CLIP8[y1 + bu] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+BPP4) =
(CLIP8[y2 + bu] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 0);
/* next 2x2 block */
sy1 += 2; sy2 += 2;
su += 1; sv += 1;
d1 += 2*BPP4; d2 += 2*BPP4;
}
/* convert the last 2x1 block: */
if (dx & 1) {
bu = butab[su[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
rv = rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + bu] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + rv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + bu] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + rv] << 0);
}
}
static void dblineI420toBGR32alpha (unsigned char *d1, unsigned char *d2, int dest_x,
unsigned char *sy1, unsigned char *sy2, unsigned char *su, unsigned char *sv,
int src_x, int dx)
{
register int y1, y2, ruv, guv, buv;
register int i;
/* convert first 2x1 block: */
if (src_x & 1) {
buv = butab[su[0]] + bvtab[sv[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
ruv = rutab[su[0]] + rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + buv] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + buv] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 0);
sy1 += 1; sy2 += 1;
su += 1; sv += 1; /* shift luma !!! */
d1 += BPP4; d2 += BPP4;
dx --;
}
/* convert all integral 2x2 blocks: */
for (i = 0; i < dx/2; i ++) {
buv = butab[su[0]] + bvtab[sv[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
ruv = rutab[su[0]] + rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + buv] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + buv] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 0);
y1 = ytab[sy1[1]];
y2 = ytab[sy2[1]];
/* first line BGR0 */
*(unsigned int *)(d1+BPP4) =
(CLIP8[y1 + buv] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+BPP4) =
(CLIP8[y2 + buv] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 0);
/* next 2x2 block */
sy1 += 2; sy2 += 2;
su += 1; sv += 1;
d1 += 2*BPP4; d2 += 2*BPP4;
}
/* convert last 2x1 block: */
if (dx & 1) {
buv = butab[su[0]] + bvtab[sv[0]];
guv = gutab[su[0]] + gvtab[sv[0]];
ruv = rutab[su[0]] + rvtab[sv[0]];
y1 = ytab[sy1[0]];
y2 = ytab[sy2[0]];
/* first line BGR0 */
*(unsigned int *)(d1+0) =
(CLIP8[y1 + buv] << 16)|
(CLIP8[y1 + guv] << 8) |
(CLIP8[y1 + ruv] << 0);
/* second line BGR0 */
*(unsigned int *)(d2+0) =
(CLIP8[y2 + buv] << 16)|
(CLIP8[y2 + guv] << 8) |
(CLIP8[y2 + ruv] << 0);
}
}
static void dblineI420toR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -