slightly faster again. amazing.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6595 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -198,8 +198,8 @@ void gfx_conv_yuv420p_rgb32_c(AVFrame *in, AVFrame *out, int width, int height)
|
|||||||
uint32 runs = height / 2;
|
uint32 runs = height / 2;
|
||||||
for (uint32 i = 0; i < runs; i++) {
|
for (uint32 i = 0; i < runs; i++) {
|
||||||
|
|
||||||
uint8 *pi1Even = i * pi1Inc2 + pi1Base;
|
uint16 *pi1Even = (uint16 *) (i * pi1Inc2 + pi1Base);
|
||||||
uint8 *pi1Odd = pi1Inc + pi1Even;
|
uint16 *pi1Odd = (uint16 *) (pi1Inc + (uint8 *)pi1Even);
|
||||||
uint8 *pi2 = i * pi2Inc + pi2Base;
|
uint8 *pi2 = i * pi2Inc + pi2Base;
|
||||||
uint8 *pi3 = i *pi3Inc + pi3Base;
|
uint8 *pi3 = i *pi3Inc + pi3Base;
|
||||||
|
|
||||||
@@ -210,51 +210,49 @@ void gfx_conv_yuv420p_rgb32_c(AVFrame *in, AVFrame *out, int width, int height)
|
|||||||
|
|
||||||
B = - 128 + *(pi2++);
|
B = - 128 + *(pi2++);
|
||||||
R = - 128 + *(pi3++);
|
R = - 128 + *(pi3++);
|
||||||
Cr_R = R * 52298;
|
|
||||||
Cr_G = R * -26640;
|
|
||||||
Cb_G = B * -12845;
|
Cb_G = B * -12845;
|
||||||
Cb_B = B * 66493;
|
Cb_B = B * 66493;
|
||||||
|
Cr_R = R * 52298;
|
||||||
|
Cr_G = R * -26640;
|
||||||
|
|
||||||
G = *(uint16 *)pi1Even;
|
G = *(pi1Even++);
|
||||||
pi1Even += 2;
|
|
||||||
Y0 = ((G & 0x000000ff) - 16) * 38142;
|
Y0 = ((G & 0x000000ff) - 16) * 38142;
|
||||||
Y1 = (((G & 0x0000ff00) >> 8) - 16) * 38142;
|
Y1 = (((G & 0x0000ff00) >> 8) - 16) * 38142;
|
||||||
|
|
||||||
R = (Y0 + Cr_R) >> 15;
|
R = (Y0 + Cr_R) >> 15;
|
||||||
SATURATE(R);
|
|
||||||
G = (Y0 + Cr_G + Cb_G) >> 15;
|
G = (Y0 + Cr_G + Cb_G) >> 15;
|
||||||
SATURATE(G);
|
|
||||||
B = (Y0 + Cb_B) >> 15;
|
B = (Y0 + Cb_B) >> 15;
|
||||||
|
SATURATE(R);
|
||||||
SATURATE(B);
|
SATURATE(B);
|
||||||
|
SATURATE(G);
|
||||||
poutEven[j] = (R << 16) | (G << 8) | B;
|
poutEven[j] = (R << 16) | (G << 8) | B;
|
||||||
|
|
||||||
R = (Y1 + Cr_R) >> 15;
|
R = (Y1 + Cr_R) >> 15;
|
||||||
SATURATE(R);
|
|
||||||
G = (Y1 + Cr_G + Cb_G) >> 15;
|
G = (Y1 + Cr_G + Cb_G) >> 15;
|
||||||
SATURATE(G);
|
|
||||||
B = (Y1 + Cb_B) >> 15;
|
B = (Y1 + Cb_B) >> 15;
|
||||||
|
SATURATE(R);
|
||||||
SATURATE(B);
|
SATURATE(B);
|
||||||
|
SATURATE(G);
|
||||||
poutEven[j + 1] = (R << 16) | (G << 8) | B;
|
poutEven[j + 1] = (R << 16) | (G << 8) | B;
|
||||||
|
|
||||||
G = *(uint16 *)pi1Odd;
|
G = *(pi1Odd++);
|
||||||
pi1Odd += 2;
|
|
||||||
Y0 = ((G & 0x000000ff) - 16) * 38142;
|
Y0 = ((G & 0x000000ff) - 16) * 38142;
|
||||||
Y1 = (((G & 0x0000ff00) >> 8) - 16) * 38142;
|
Y1 = (((G & 0x0000ff00) >> 8) - 16) * 38142;
|
||||||
|
|
||||||
R = (Y0 + Cr_R) >> 15;
|
R = (Y0 + Cr_R) >> 15;
|
||||||
SATURATE(R);
|
|
||||||
G = (Y0 + Cr_G + Cb_G) >> 15;
|
G = (Y0 + Cr_G + Cb_G) >> 15;
|
||||||
SATURATE(G);
|
|
||||||
B = (Y0 + Cb_B) >> 15;
|
B = (Y0 + Cb_B) >> 15;
|
||||||
|
SATURATE(R);
|
||||||
SATURATE(B);
|
SATURATE(B);
|
||||||
|
SATURATE(G);
|
||||||
poutOdd[j] = (R << 16) | (G << 8) | B;
|
poutOdd[j] = (R << 16) | (G << 8) | B;
|
||||||
|
|
||||||
R = (Y1 + Cr_R) >> 15;
|
R = (Y1 + Cr_R) >> 15;
|
||||||
SATURATE(R);
|
|
||||||
G = (Y1 + Cr_G + Cb_G) >> 15;
|
G = (Y1 + Cr_G + Cb_G) >> 15;
|
||||||
SATURATE(G);
|
|
||||||
B = (Y1 + Cb_B) >> 15;
|
B = (Y1 + Cb_B) >> 15;
|
||||||
|
SATURATE(R);
|
||||||
SATURATE(B);
|
SATURATE(B);
|
||||||
|
SATURATE(G);
|
||||||
poutOdd[j + 1] = (R << 16) | (G << 8) | B;
|
poutOdd[j + 1] = (R << 16) | (G << 8) | B;
|
||||||
}
|
}
|
||||||
poutEven = (uint32 *)(poutInc + (uint8 *)poutEven);
|
poutEven = (uint32 *)(poutInc + (uint8 *)poutEven);
|
||||||
|
|||||||
Reference in New Issue
Block a user