annotate libswscale/yuv2rgb_template.c @ 24787:02535b3216c5

Avoid text deformation and subtitles moving outside the screen in pan-and-scan mode. For this, crop amounts are passed from vo_gl as negative margins sizes. They are used to calculate aspect ratio. They are ignored when calculating subtitle positions, so subtitles will stay on screen most of the time. Based on a patch by Jindrich Makovicka [makovick gmail com].
author eugeni
date Fri, 19 Oct 2007 18:16:23 +0000
parents 00966f09c33b
children 2ad528dd42a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1 /*
23760
diego
parents: 23701
diff changeset
2 * yuv2rgb_mmx.c, Software YUV to RGB converter with Intel MMX "technology"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
3 *
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
4 * Copyright (C) 2000, Silicon Integrated System Corp.
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
5 *
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
6 * Author: Olie Lho <ollie@sis.com.tw>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
7 *
23701
2c8b8b4e63c8 Group all copyright and author notices together.
diego
parents: 23157
diff changeset
8 * 15,24 bpp and dithering from Michael Niedermayer (michaelni@gmx.at)
2c8b8b4e63c8 Group all copyright and author notices together.
diego
parents: 23157
diff changeset
9 * MMX/MMX2 Template stuff from Michael Niedermayer (needed for fast movntq support)
2c8b8b4e63c8 Group all copyright and author notices together.
diego
parents: 23157
diff changeset
10 * context / deglobalize stuff by Michael Niedermayer
2c8b8b4e63c8 Group all copyright and author notices together.
diego
parents: 23157
diff changeset
11 *
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
12 * This file is part of mpeg2dec, a free MPEG-2 video decoder
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
13 *
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
14 * mpeg2dec is free software; you can redistribute it and/or modify
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
15 * it under the terms of the GNU General Public License as published by
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
16 * the Free Software Foundation; either version 2, or (at your option)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
17 * any later version.
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
18 *
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
19 * mpeg2dec is distributed in the hope that it will be useful,
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
22 * GNU General Public License for more details.
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
23 *
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
24 * You should have received a copy of the GNU General Public License
21976
8aac0a59f9c7 Fix license headers and FSF postal address.
diego
parents: 19872
diff changeset
25 * along with mpeg2dec; if not, write to the Free Software
8aac0a59f9c7 Fix license headers and FSF postal address.
diego
parents: 19872
diff changeset
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
27 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
28
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29 #undef MOVNTQ
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
30 #undef EMMS
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
31 #undef SFENCE
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
33 #ifdef HAVE_3DNOW
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
34 /* On K6 femms is faster of emms. On K7 femms is directly mapped on emms. */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
35 #define EMMS "femms"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
36 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
37 #define EMMS "emms"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
38 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
39
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
40 #ifdef HAVE_MMX2
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
41 #define MOVNTQ "movntq"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
42 #define SFENCE "sfence"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
43 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
44 #define MOVNTQ "movq"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
45 #define SFENCE "/nop"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
46 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
47
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
48 #define YUV2RGB \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
49 /* Do the multiply part of the conversion for even and odd pixels,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
50 register usage:
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
51 mm0 -> Cblue, mm1 -> Cred, mm2 -> Cgreen even pixels,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
52 mm3 -> Cblue, mm4 -> Cred, mm5 -> Cgreen odd pixels,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
53 mm6 -> Y even, mm7 -> Y odd */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
54 /* convert the chroma part */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
55 "punpcklbw %%mm4, %%mm0;" /* scatter 4 Cb 00 u3 00 u2 00 u1 00 u0 */ \
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
56 "punpcklbw %%mm4, %%mm1;" /* scatter 4 Cr 00 v3 00 v2 00 v1 00 v0 */ \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
57 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
58 "psllw $3, %%mm0;" /* Promote precision */ \
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
59 "psllw $3, %%mm1;" /* Promote precision */ \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
61 "psubsw "U_OFFSET"(%4), %%mm0;" /* Cb -= 128 */ \
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
62 "psubsw "V_OFFSET"(%4), %%mm1;" /* Cr -= 128 */ \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
63 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
64 "movq %%mm0, %%mm2;" /* Copy 4 Cb 00 u3 00 u2 00 u1 00 u0 */ \
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
65 "movq %%mm1, %%mm3;" /* Copy 4 Cr 00 v3 00 v2 00 v1 00 v0 */ \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
67 "pmulhw "UG_COEFF"(%4), %%mm2;" /* Mul Cb with green coeff -> Cb green */ \
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
68 "pmulhw "VG_COEFF"(%4), %%mm3;" /* Mul Cr with green coeff -> Cr green */ \
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
69 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
70 "pmulhw "UB_COEFF"(%4), %%mm0;" /* Mul Cb -> Cblue 00 b3 00 b2 00 b1 00 b0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
71 "pmulhw "VR_COEFF"(%4), %%mm1;" /* Mul Cr -> Cred 00 r3 00 r2 00 r1 00 r0 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
72 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
73 "paddsw %%mm3, %%mm2;" /* Cb green + Cr green -> Cgreen */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
74 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
75 /* convert the luma part */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
76 "movq %%mm6, %%mm7;" /* Copy 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
77 "pand "MANGLE(mmx_00ffw)", %%mm6;" /* get Y even 00 Y6 00 Y4 00 Y2 00 Y0 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
78 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
79 "psrlw $8, %%mm7;" /* get Y odd 00 Y7 00 Y5 00 Y3 00 Y1 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
80 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
81 "psllw $3, %%mm6;" /* Promote precision */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
82 "psllw $3, %%mm7;" /* Promote precision */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
83 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
84 "psubw "Y_OFFSET"(%4), %%mm6;" /* Y -= 16 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
85 "psubw "Y_OFFSET"(%4), %%mm7;" /* Y -= 16 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
86 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
87 "pmulhw "Y_COEFF"(%4), %%mm6;" /* Mul 4 Y even 00 y6 00 y4 00 y2 00 y0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
88 "pmulhw "Y_COEFF"(%4), %%mm7;" /* Mul 4 Y odd 00 y7 00 y5 00 y3 00 y1 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
89 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
90 /* Do the addition part of the conversion for even and odd pixels,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
91 register usage:
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
92 mm0 -> Cblue, mm1 -> Cred, mm2 -> Cgreen even pixels,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
93 mm3 -> Cblue, mm4 -> Cred, mm5 -> Cgreen odd pixels,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
94 mm6 -> Y even, mm7 -> Y odd */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
95 "movq %%mm0, %%mm3;" /* Copy Cblue */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
96 "movq %%mm1, %%mm4;" /* Copy Cred */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
97 "movq %%mm2, %%mm5;" /* Copy Cgreen */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
98 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
99 "paddsw %%mm6, %%mm0;" /* Y even + Cblue 00 B6 00 B4 00 B2 00 B0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
100 "paddsw %%mm7, %%mm3;" /* Y odd + Cblue 00 B7 00 B5 00 B3 00 B1 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
101 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
102 "paddsw %%mm6, %%mm1;" /* Y even + Cred 00 R6 00 R4 00 R2 00 R0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
103 "paddsw %%mm7, %%mm4;" /* Y odd + Cred 00 R7 00 R5 00 R3 00 R1 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
104 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
105 "paddsw %%mm6, %%mm2;" /* Y even + Cgreen 00 G6 00 G4 00 G2 00 G0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
106 "paddsw %%mm7, %%mm5;" /* Y odd + Cgreen 00 G7 00 G5 00 G3 00 G1 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
107 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
108 /* Limit RGB even to 0..255 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
109 "packuswb %%mm0, %%mm0;" /* B6 B4 B2 B0 B6 B4 B2 B0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
110 "packuswb %%mm1, %%mm1;" /* R6 R4 R2 R0 R6 R4 R2 R0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
111 "packuswb %%mm2, %%mm2;" /* G6 G4 G2 G0 G6 G4 G2 G0 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
112 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
113 /* Limit RGB odd to 0..255 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
114 "packuswb %%mm3, %%mm3;" /* B7 B5 B3 B1 B7 B5 B3 B1 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
115 "packuswb %%mm4, %%mm4;" /* R7 R5 R3 R1 R7 R5 R3 R1 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
116 "packuswb %%mm5, %%mm5;" /* G7 G5 G3 G1 G7 G5 G3 G1 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
117 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
118 /* Interleave RGB even and odd */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
119 "punpcklbw %%mm3, %%mm0;" /* B7 B6 B5 B4 B3 B2 B1 B0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
120 "punpcklbw %%mm4, %%mm1;" /* R7 R6 R5 R4 R3 R2 R1 R0 */\
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
121 "punpcklbw %%mm5, %%mm2;" /* G7 G6 G5 G4 G3 G2 G1 G0 */\
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
122
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
123
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
124 static inline int RENAME(yuv420_rgb16)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
125 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
126 int y, h_size;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
127
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 18861
diff changeset
128 if(c->srcFormat == PIX_FMT_YUV422P){
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
129 srcStride[1] *= 2;
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
130 srcStride[2] *= 2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
131 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
132
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
133 h_size= (c->dstW+7)&~7;
22229
44c3544fd926 negative stride and h_size-=8 fix
michael
parents: 21976
diff changeset
134 if(h_size*2 > FFABS(dstStride[0])) h_size-=8;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
135
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
136 __asm__ __volatile__ ("pxor %mm4, %mm4;" /* zero mm4 */ );
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
137 //printf("%X %X %X %X %X %X %X %X %X %X\n", (int)&c->redDither, (int)&b5Dither, (int)src[0], (int)src[1], (int)src[2], (int)dst[0],
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
138 //srcStride[0],srcStride[1],srcStride[2],dstStride[0]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
139 for (y= 0; y<srcSliceH; y++ ) {
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
140 uint8_t *image = dst[0] + (y+srcSliceY)*dstStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
141 uint8_t *py = src[0] + y*srcStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
142 uint8_t *pu = src[1] + (y>>1)*srcStride[1];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
143 uint8_t *pv = src[2] + (y>>1)*srcStride[2];
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
144 long index= -h_size/2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
145
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
146 b5Dither= dither8[y&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
147 g6Dither= dither4[y&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
148 g5Dither= dither8[y&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
149 r5Dither= dither8[(y+1)&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
150 /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
151 pixels in each iteration */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
152 __asm__ __volatile__ (
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
153 /* load data for start of next scan line */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
154 "movd (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
155 "movd (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
156 "movq (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
157 //".balign 16 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
158 "1: \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
159 /* no speed diference on my p3@500 with prefetch,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
160 * if it is faster for anyone with -benchmark then tell me
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
161 PREFETCH" 64(%0) \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
162 PREFETCH" 64(%1) \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
163 PREFETCH" 64(%2) \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
164 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
165 YUV2RGB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
166
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
167 #ifdef DITHER1XBPP
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
168 "paddusb "MANGLE(b5Dither)", %%mm0;"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
169 "paddusb "MANGLE(g6Dither)", %%mm2;"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
170 "paddusb "MANGLE(r5Dither)", %%mm1;"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
171 #endif
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
172 /* mask unneeded bits off */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
173 "pand "MANGLE(mmx_redmask)", %%mm0;" /* b7b6b5b4 b3_0_0_0 b7b6b5b4 b3_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
174 "pand "MANGLE(mmx_grnmask)", %%mm2;" /* g7g6g5g4 g3g2_0_0 g7g6g5g4 g3g2_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
175 "pand "MANGLE(mmx_redmask)", %%mm1;" /* r7r6r5r4 r3_0_0_0 r7r6r5r4 r3_0_0_0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
176
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
177 "psrlw $3, %%mm0;" /* 0_0_0_b7 b6b5b4b3 0_0_0_b7 b6b5b4b3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
178 "pxor %%mm4, %%mm4;" /* zero mm4 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
179
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
180 "movq %%mm0, %%mm5;" /* Copy B7-B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
181 "movq %%mm2, %%mm7;" /* Copy G7-G0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
182
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
183 /* convert rgb24 plane to rgb16 pack for pixel 0-3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
184 "punpcklbw %%mm4, %%mm2;" /* 0_0_0_0 0_0_0_0 g7g6g5g4 g3g2_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
185 "punpcklbw %%mm1, %%mm0;" /* r7r6r5r4 r3_0_0_0 0_0_0_b7 b6b5b4b3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
186
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
187 "psllw $3, %%mm2;" /* 0_0_0_0 0_g7g6g5 g4g3g2_0 0_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
188 "por %%mm2, %%mm0;" /* r7r6r5r4 r3g7g6g5 g4g3g2b7 b6b5b4b3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
189
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
190 "movq 8 (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
191 MOVNTQ " %%mm0, (%1);" /* store pixel 0-3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
192
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
193 /* convert rgb24 plane to rgb16 pack for pixel 0-3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
194 "punpckhbw %%mm4, %%mm7;" /* 0_0_0_0 0_0_0_0 g7g6g5g4 g3g2_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
195 "punpckhbw %%mm1, %%mm5;" /* r7r6r5r4 r3_0_0_0 0_0_0_b7 b6b5b4b3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
196
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
197 "psllw $3, %%mm7;" /* 0_0_0_0 0_g7g6g5 g4g3g2_0 0_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
198 "movd 4 (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
199
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
200 "por %%mm7, %%mm5;" /* r7r6r5r4 r3g7g6g5 g4g3g2b7 b6b5b4b3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
201 "movd 4 (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
202
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
203 MOVNTQ " %%mm5, 8 (%1);" /* store pixel 4-7 */
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
204
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
205 "add $16, %1 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
206 "add $4, %0 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
207 " js 1b \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
208
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
209 : "+r" (index), "+r" (image)
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
210 : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), "r" (py - 2*index)
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
211 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
212 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
213
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
214 __asm__ __volatile__ (EMMS);
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
215
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
216 return srcSliceH;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
217 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
218
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
219 static inline int RENAME(yuv420_rgb15)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
220 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
221 int y, h_size;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
222
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 18861
diff changeset
223 if(c->srcFormat == PIX_FMT_YUV422P){
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
224 srcStride[1] *= 2;
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
225 srcStride[2] *= 2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
226 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
227
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
228 h_size= (c->dstW+7)&~7;
22229
44c3544fd926 negative stride and h_size-=8 fix
michael
parents: 21976
diff changeset
229 if(h_size*2 > FFABS(dstStride[0])) h_size-=8;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
230
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
231 __asm__ __volatile__ ("pxor %mm4, %mm4;" /* zero mm4 */ );
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
232 //printf("%X %X %X %X %X %X %X %X %X %X\n", (int)&c->redDither, (int)&b5Dither, (int)src[0], (int)src[1], (int)src[2], (int)dst[0],
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
233 //srcStride[0],srcStride[1],srcStride[2],dstStride[0]);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
234 for (y= 0; y<srcSliceH; y++ ) {
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
235 uint8_t *image = dst[0] + (y+srcSliceY)*dstStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
236 uint8_t *py = src[0] + y*srcStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
237 uint8_t *pu = src[1] + (y>>1)*srcStride[1];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
238 uint8_t *pv = src[2] + (y>>1)*srcStride[2];
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
239 long index= -h_size/2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
240
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
241 b5Dither= dither8[y&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
242 g6Dither= dither4[y&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
243 g5Dither= dither8[y&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
244 r5Dither= dither8[(y+1)&1];
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
245 /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
246 pixels in each iteration */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
247 __asm__ __volatile__ (
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
248 /* load data for start of next scan line */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
249 "movd (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
250 "movd (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
251 "movq (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
252 //".balign 16 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
253 "1: \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
254 YUV2RGB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
255
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
256 #ifdef DITHER1XBPP
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
257 "paddusb "MANGLE(b5Dither)", %%mm0 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
258 "paddusb "MANGLE(g5Dither)", %%mm2 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
259 "paddusb "MANGLE(r5Dither)", %%mm1 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
260 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
261
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
262 /* mask unneeded bits off */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
263 "pand "MANGLE(mmx_redmask)", %%mm0;" /* b7b6b5b4 b3_0_0_0 b7b6b5b4 b3_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
264 "pand "MANGLE(mmx_redmask)", %%mm2;" /* g7g6g5g4 g3_0_0_0 g7g6g5g4 g3_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
265 "pand "MANGLE(mmx_redmask)", %%mm1;" /* r7r6r5r4 r3_0_0_0 r7r6r5r4 r3_0_0_0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
266
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
267 "psrlw $3, %%mm0;" /* 0_0_0_b7 b6b5b4b3 0_0_0_b7 b6b5b4b3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
268 "psrlw $1, %%mm1;" /* 0_r7r6r5 r4r3_0_0 0_r7r6r5 r4r3_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
269 "pxor %%mm4, %%mm4;" /* zero mm4 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
270
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
271 "movq %%mm0, %%mm5;" /* Copy B7-B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
272 "movq %%mm2, %%mm7;" /* Copy G7-G0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
273
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
274 /* convert rgb24 plane to rgb16 pack for pixel 0-3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
275 "punpcklbw %%mm4, %%mm2;" /* 0_0_0_0 0_0_0_0 g7g6g5g4 g3_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
276 "punpcklbw %%mm1, %%mm0;" /* r7r6r5r4 r3_0_0_0 0_0_0_b7 b6b5b4b3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
277
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
278 "psllw $2, %%mm2;" /* 0_0_0_0 0_0_g7g6 g5g4g3_0 0_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
279 "por %%mm2, %%mm0;" /* 0_r7r6r5 r4r3g7g6 g5g4g3b7 b6b5b4b3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
280
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
281 "movq 8 (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
282 MOVNTQ " %%mm0, (%1);" /* store pixel 0-3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
283
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
284 /* convert rgb24 plane to rgb16 pack for pixel 0-3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
285 "punpckhbw %%mm4, %%mm7;" /* 0_0_0_0 0_0_0_0 0_g7g6g5 g4g3_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
286 "punpckhbw %%mm1, %%mm5;" /* r7r6r5r4 r3_0_0_0 0_0_0_b7 b6b5b4b3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
287
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
288 "psllw $2, %%mm7;" /* 0_0_0_0 0_0_g7g6 g5g4g3_0 0_0_0_0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
289 "movd 4 (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
290
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
291 "por %%mm7, %%mm5;" /* 0_r7r6r5 r4r3g7g6 g5g4g3b7 b6b5b4b3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
292 "movd 4 (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
293
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
294 MOVNTQ " %%mm5, 8 (%1);" /* store pixel 4-7 */
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
295
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
296 "add $16, %1 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
297 "add $4, %0 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
298 " js 1b \n\t"
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
299 : "+r" (index), "+r" (image)
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
300 : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), "r" (py - 2*index)
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
301 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
302 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
303
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
304 __asm__ __volatile__ (EMMS);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
305 return srcSliceH;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
306 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
307
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
308 static inline int RENAME(yuv420_rgb24)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
309 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
310 int y, h_size;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
311
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 18861
diff changeset
312 if(c->srcFormat == PIX_FMT_YUV422P){
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
313 srcStride[1] *= 2;
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
314 srcStride[2] *= 2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
315 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
316
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
317 h_size= (c->dstW+7)&~7;
22229
44c3544fd926 negative stride and h_size-=8 fix
michael
parents: 21976
diff changeset
318 if(h_size*3 > FFABS(dstStride[0])) h_size-=8;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
319
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
320 __asm__ __volatile__ ("pxor %mm4, %mm4;" /* zero mm4 */ );
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
321
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
322 for (y= 0; y<srcSliceH; y++ ) {
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
323 uint8_t *image = dst[0] + (y+srcSliceY)*dstStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
324 uint8_t *py = src[0] + y*srcStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
325 uint8_t *pu = src[1] + (y>>1)*srcStride[1];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
326 uint8_t *pv = src[2] + (y>>1)*srcStride[2];
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
327 long index= -h_size/2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
328
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
329 /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
330 pixels in each iteration */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
331 __asm__ __volatile__ (
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
332 /* load data for start of next scan line */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
333 "movd (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
334 "movd (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
335 "movq (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
336 //".balign 16 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
337 "1: \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
338 YUV2RGB
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
339 /* mm0=B, %%mm2=G, %%mm1=R */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
340 #ifdef HAVE_MMX2
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
341 "movq "MANGLE(M24A)", %%mm4 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
342 "movq "MANGLE(M24C)", %%mm7 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
343 "pshufw $0x50, %%mm0, %%mm5 \n\t" /* B3 B2 B3 B2 B1 B0 B1 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
344 "pshufw $0x50, %%mm2, %%mm3 \n\t" /* G3 G2 G3 G2 G1 G0 G1 G0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
345 "pshufw $0x00, %%mm1, %%mm6 \n\t" /* R1 R0 R1 R0 R1 R0 R1 R0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
346
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
347 "pand %%mm4, %%mm5 \n\t" /* B2 B1 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
348 "pand %%mm4, %%mm3 \n\t" /* G2 G1 G0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
349 "pand %%mm7, %%mm6 \n\t" /* R1 R0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
350
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
351 "psllq $8, %%mm3 \n\t" /* G2 G1 G0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
352 "por %%mm5, %%mm6 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
353 "por %%mm3, %%mm6 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
354 MOVNTQ" %%mm6, (%1) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
355
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
356 "psrlq $8, %%mm2 \n\t" /* 00 G7 G6 G5 G4 G3 G2 G1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
357 "pshufw $0xA5, %%mm0, %%mm5 \n\t" /* B5 B4 B5 B4 B3 B2 B3 B2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
358 "pshufw $0x55, %%mm2, %%mm3 \n\t" /* G4 G3 G4 G3 G4 G3 G4 G3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
359 "pshufw $0xA5, %%mm1, %%mm6 \n\t" /* R5 R4 R5 R4 R3 R2 R3 R2 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
360
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
361 "pand "MANGLE(M24B)", %%mm5 \n\t" /* B5 B4 B3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
362 "pand %%mm7, %%mm3 \n\t" /* G4 G3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
363 "pand %%mm4, %%mm6 \n\t" /* R4 R3 R2 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
364
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
365 "por %%mm5, %%mm3 \n\t" /* B5 G4 B4 G3 B3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
366 "por %%mm3, %%mm6 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
367 MOVNTQ" %%mm6, 8(%1) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
368
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
369 "pshufw $0xFF, %%mm0, %%mm5 \n\t" /* B7 B6 B7 B6 B7 B6 B6 B7 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
370 "pshufw $0xFA, %%mm2, %%mm3 \n\t" /* 00 G7 00 G7 G6 G5 G6 G5 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
371 "pshufw $0xFA, %%mm1, %%mm6 \n\t" /* R7 R6 R7 R6 R5 R4 R5 R4 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
372 "movd 4 (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
373
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
374 "pand %%mm7, %%mm5 \n\t" /* B7 B6 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
375 "pand %%mm4, %%mm3 \n\t" /* G7 G6 G5 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
376 "pand "MANGLE(M24B)", %%mm6 \n\t" /* R7 R6 R5 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
377 "movd 4 (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
378 \
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
379 "por %%mm5, %%mm3 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
380 "por %%mm3, %%mm6 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
381 MOVNTQ" %%mm6, 16(%1) \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
382 "movq 8 (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
383 "pxor %%mm4, %%mm4 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
384
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
385 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
386
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
387 "pxor %%mm4, %%mm4 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
388 "movq %%mm0, %%mm5 \n\t" /* B */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
389 "movq %%mm1, %%mm6 \n\t" /* R */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
390 "punpcklbw %%mm2, %%mm0 \n\t" /* GBGBGBGB 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
391 "punpcklbw %%mm4, %%mm1 \n\t" /* 0R0R0R0R 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
392 "punpckhbw %%mm2, %%mm5 \n\t" /* GBGBGBGB 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
393 "punpckhbw %%mm4, %%mm6 \n\t" /* 0R0R0R0R 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
394 "movq %%mm0, %%mm7 \n\t" /* GBGBGBGB 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
395 "movq %%mm5, %%mm3 \n\t" /* GBGBGBGB 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
396 "punpcklwd %%mm1, %%mm7 \n\t" /* 0RGB0RGB 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
397 "punpckhwd %%mm1, %%mm0 \n\t" /* 0RGB0RGB 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
398 "punpcklwd %%mm6, %%mm5 \n\t" /* 0RGB0RGB 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
399 "punpckhwd %%mm6, %%mm3 \n\t" /* 0RGB0RGB 3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
400
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
401 "movq %%mm7, %%mm2 \n\t" /* 0RGB0RGB 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
402 "movq %%mm0, %%mm6 \n\t" /* 0RGB0RGB 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
403 "movq %%mm5, %%mm1 \n\t" /* 0RGB0RGB 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
404 "movq %%mm3, %%mm4 \n\t" /* 0RGB0RGB 3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
405
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
406 "psllq $40, %%mm7 \n\t" /* RGB00000 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
407 "psllq $40, %%mm0 \n\t" /* RGB00000 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
408 "psllq $40, %%mm5 \n\t" /* RGB00000 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
409 "psllq $40, %%mm3 \n\t" /* RGB00000 3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
410
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
411 "punpckhdq %%mm2, %%mm7 \n\t" /* 0RGBRGB0 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
412 "punpckhdq %%mm6, %%mm0 \n\t" /* 0RGBRGB0 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
413 "punpckhdq %%mm1, %%mm5 \n\t" /* 0RGBRGB0 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
414 "punpckhdq %%mm4, %%mm3 \n\t" /* 0RGBRGB0 3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
415
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
416 "psrlq $8, %%mm7 \n\t" /* 00RGBRGB 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
417 "movq %%mm0, %%mm6 \n\t" /* 0RGBRGB0 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
418 "psllq $40, %%mm0 \n\t" /* GB000000 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
419 "por %%mm0, %%mm7 \n\t" /* GBRGBRGB 0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
420 MOVNTQ" %%mm7, (%1) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
421
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
422 "movd 4 (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
423
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
424 "psrlq $24, %%mm6 \n\t" /* 0000RGBR 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
425 "movq %%mm5, %%mm1 \n\t" /* 0RGBRGB0 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
426 "psllq $24, %%mm5 \n\t" /* BRGB0000 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
427 "por %%mm5, %%mm6 \n\t" /* BRGBRGBR 1 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
428 MOVNTQ" %%mm6, 8(%1) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
429
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
430 "movq 8 (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
431
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
432 "psrlq $40, %%mm1 \n\t" /* 000000RG 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
433 "psllq $8, %%mm3 \n\t" /* RGBRGB00 3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
434 "por %%mm3, %%mm1 \n\t" /* RGBRGBRG 2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
435 MOVNTQ" %%mm1, 16(%1) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
436
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
437 "movd 4 (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
438 "pxor %%mm4, %%mm4 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
439 #endif
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
440
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
441 "add $24, %1 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
442 "add $4, %0 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
443 " js 1b \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
444
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
445 : "+r" (index), "+r" (image)
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
446 : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), "r" (py - 2*index)
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
447 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
448 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
449
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
450 __asm__ __volatile__ (EMMS);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
451 return srcSliceH;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
452 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
453
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
454 static inline int RENAME(yuv420_rgb32)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
455 int srcSliceH, uint8_t* dst[], int dstStride[]){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
456 int y, h_size;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
457
19872
8e50cba9fe03 Remove the dependency of libswscale on img_format.h
lucabe
parents: 18861
diff changeset
458 if(c->srcFormat == PIX_FMT_YUV422P){
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
459 srcStride[1] *= 2;
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
460 srcStride[2] *= 2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
461 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
462
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
463 h_size= (c->dstW+7)&~7;
22229
44c3544fd926 negative stride and h_size-=8 fix
michael
parents: 21976
diff changeset
464 if(h_size*4 > FFABS(dstStride[0])) h_size-=8;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
465
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
466 __asm__ __volatile__ ("pxor %mm4, %mm4;" /* zero mm4 */ );
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
467
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
468 for (y= 0; y<srcSliceH; y++ ) {
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
469 uint8_t *image = dst[0] + (y+srcSliceY)*dstStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
470 uint8_t *py = src[0] + y*srcStride[0];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
471 uint8_t *pu = src[1] + (y>>1)*srcStride[1];
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
472 uint8_t *pv = src[2] + (y>>1)*srcStride[2];
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
473 long index= -h_size/2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
474
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
475 /* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
476 pixels in each iteration */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
477 __asm__ __volatile__ (
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
478 /* load data for start of next scan line */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
479 "movd (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
480 "movd (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
481 "movq (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
482 //".balign 16 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
483 "1: \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
484 YUV2RGB
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
485 /* convert RGB plane to RGB packed format,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
486 mm0 -> B, mm1 -> R, mm2 -> G, mm3 -> 0,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
487 mm4 -> GB, mm5 -> AR pixel 4-7,
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
488 mm6 -> GB, mm7 -> AR pixel 0-3 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
489 "pxor %%mm3, %%mm3;" /* zero mm3 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
490
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
491 "movq %%mm0, %%mm6;" /* B7 B6 B5 B4 B3 B2 B1 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
492 "movq %%mm1, %%mm7;" /* R7 R6 R5 R4 R3 R2 R1 R0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
493
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
494 "movq %%mm0, %%mm4;" /* B7 B6 B5 B4 B3 B2 B1 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
495 "movq %%mm1, %%mm5;" /* R7 R6 R5 R4 R3 R2 R1 R0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
496
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
497 "punpcklbw %%mm2, %%mm6;" /* G3 B3 G2 B2 G1 B1 G0 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
498 "punpcklbw %%mm3, %%mm7;" /* 00 R3 00 R2 00 R1 00 R0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
499
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
500 "punpcklwd %%mm7, %%mm6;" /* 00 R1 B1 G1 00 R0 B0 G0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
501 MOVNTQ " %%mm6, (%1);" /* Store ARGB1 ARGB0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
502
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
503 "movq %%mm0, %%mm6;" /* B7 B6 B5 B4 B3 B2 B1 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
504 "punpcklbw %%mm2, %%mm6;" /* G3 B3 G2 B2 G1 B1 G0 B0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
505
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
506 "punpckhwd %%mm7, %%mm6;" /* 00 R3 G3 B3 00 R2 B3 G2 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
507 MOVNTQ " %%mm6, 8 (%1);" /* Store ARGB3 ARGB2 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
508
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
509 "punpckhbw %%mm2, %%mm4;" /* G7 B7 G6 B6 G5 B5 G4 B4 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
510 "punpckhbw %%mm3, %%mm5;" /* 00 R7 00 R6 00 R5 00 R4 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
511
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
512 "punpcklwd %%mm5, %%mm4;" /* 00 R5 B5 G5 00 R4 B4 G4 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
513 MOVNTQ " %%mm4, 16 (%1);" /* Store ARGB5 ARGB4 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
514
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
515 "movq %%mm0, %%mm4;" /* B7 B6 B5 B4 B3 B2 B1 B0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
516 "punpckhbw %%mm2, %%mm4;" /* G7 B7 G6 B6 G5 B5 G4 B4 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
517
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
518 "punpckhwd %%mm5, %%mm4;" /* 00 R7 G7 B7 00 R6 B6 G6 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
519 MOVNTQ " %%mm4, 24 (%1);" /* Store ARGB7 ARGB6 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
520
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
521 "movd 4 (%2, %0), %%mm0;" /* Load 4 Cb 00 00 00 00 u3 u2 u1 u0 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
522 "movd 4 (%3, %0), %%mm1;" /* Load 4 Cr 00 00 00 00 v3 v2 v1 v0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
523
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
524 "pxor %%mm4, %%mm4;" /* zero mm4 */
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
525 "movq 8 (%5, %0, 2), %%mm6;" /* Load 8 Y Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
526
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
527 "add $32, %1 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
528 "add $4, %0 \n\t"
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
529 " js 1b \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 22229
diff changeset
530
24577
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
531 : "+r" (index), "+r" (image)
00966f09c33b cosmetic (get rid of _ at the start of local variable names)
michael
parents: 23771
diff changeset
532 : "r" (pu - index), "r" (pv - index), "r"(&c->redDither), "r" (py - 2*index)
23157
ebc55c913d73 cosmetics attack, part III: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23129
diff changeset
533 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
534 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
535
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
536 __asm__ __volatile__ (EMMS);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
537 return srcSliceH;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
538 }