26 |
|
|
27 |
%macro cglobal 1 |
%macro cglobal 1 |
28 |
%ifdef PREFIX |
%ifdef PREFIX |
29 |
|
%ifdef MARK_FUNCS |
30 |
|
global _%1:function %1.endfunc-%1 |
31 |
|
%define %1 _%1:function %1.endfunc-%1 |
32 |
|
%define ENDFUNC .endfunc |
33 |
|
%else |
34 |
global _%1 |
global _%1 |
35 |
%define %1 _%1 |
%define %1 _%1 |
36 |
|
%define ENDFUNC |
37 |
|
%endif |
38 |
|
%else |
39 |
|
%ifdef MARK_FUNCS |
40 |
|
global %1:function %1.endfunc-%1 |
41 |
|
%define ENDFUNC .endfunc |
42 |
%else |
%else |
43 |
global %1 |
global %1 |
44 |
|
%define ENDFUNC |
45 |
|
%endif |
46 |
%endif |
%endif |
47 |
%endmacro |
%endmacro |
48 |
|
|
77 |
;============================================================================= |
;============================================================================= |
78 |
|
|
79 |
%ifdef FORMAT_COFF |
%ifdef FORMAT_COFF |
80 |
SECTION .rodata data |
SECTION .rodata |
81 |
%else |
%else |
82 |
SECTION .rodata data align=16 |
SECTION .rodata align=16 |
83 |
%endif |
%endif |
84 |
ALIGN 16 |
ALIGN 16 |
85 |
|
|
88 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
89 |
; FIX(Y_B) FIX(Y_G) FIX(Y_R) Ignored |
; FIX(Y_B) FIX(Y_G) FIX(Y_R) Ignored |
90 |
|
|
91 |
y_mul: dw 25, 129, 66, 0 |
bgr_y_mul: dw 25, 129, 66, 0 |
92 |
u_mul: dw 112, -74, -38, 0 |
bgr_u_mul: dw 112, -74, -38, 0 |
93 |
v_mul: dw -18, -94, 112, 0 |
bgr_v_mul: dw -18, -94, 112, 0 |
94 |
|
|
95 |
|
;----------------------------------------------------------------------------- |
96 |
|
; BGR->YV12 multiplication matrices |
97 |
|
;----------------------------------------------------------------------------- |
98 |
|
; FIX(Y_R) FIX(Y_G) FIX(Y_B) Ignored |
99 |
|
|
100 |
|
rgb_y_mul: dw 66, 129, 25, 0 |
101 |
|
rgb_u_mul: dw -38, -74, 112, 0 |
102 |
|
rgb_v_mul: dw 112, -94, -18, 0 |
103 |
|
|
104 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
105 |
; YV12->RGB data |
; YV12->RGB data |
132 |
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
133 |
|
|
134 |
%macro BGR_TO_YV12_INIT 2 |
%macro BGR_TO_YV12_INIT 2 |
135 |
movq mm7, [y_mul] |
movq mm7, [bgr_y_mul] |
136 |
%endmacro |
%endmacro |
137 |
|
|
138 |
|
|
196 |
|
|
197 |
; u_ptr, v_ptr |
; u_ptr, v_ptr |
198 |
movq mm0, mm6 ; = [ |b4|g4|r4] |
movq mm0, mm6 ; = [ |b4|g4|r4] |
199 |
pmaddwd mm6, [v_mul] ; *= V_MUL |
pmaddwd mm6, [bgr_v_mul] ; *= V_MUL |
200 |
pmaddwd mm0, [u_mul] ; *= U_MUL |
pmaddwd mm0, [bgr_u_mul] ; *= U_MUL |
201 |
|
movq mm1, mm0 |
202 |
|
movq mm2, mm6 |
203 |
|
psrlq mm1, 32 |
204 |
|
psrlq mm2, 32 |
205 |
|
paddd mm0, mm1 |
206 |
|
paddd mm2, mm6 |
207 |
|
|
208 |
|
movd edx, mm0 |
209 |
|
shr edx, 10 |
210 |
|
add edx, U_ADD |
211 |
|
mov [ebx], dl |
212 |
|
|
213 |
|
movd edx, mm2 |
214 |
|
shr edx, 10 |
215 |
|
add edx, V_ADD |
216 |
|
mov [ecx], dl |
217 |
|
|
218 |
|
pop edx |
219 |
|
%endmacro |
220 |
|
|
221 |
|
;------------------------------------------------------------------------------ |
222 |
|
; RGB_TO_YV12( BYTES ) |
223 |
|
; |
224 |
|
; BYTES 3=rgb(24bit), 4=rgba(32-bit) |
225 |
|
; |
226 |
|
; bytes=3/4, pixels = 2, vpixels=2 |
227 |
|
;------------------------------------------------------------------------------ |
228 |
|
|
229 |
|
%macro RGB_TO_YV12_INIT 2 |
230 |
|
movq mm7, [rgb_y_mul] |
231 |
|
%endmacro |
232 |
|
|
233 |
|
|
234 |
|
%macro RGB_TO_YV12 2 |
235 |
|
; y_out |
236 |
|
pxor mm4, mm4 |
237 |
|
pxor mm5, mm5 |
238 |
|
movd mm0, [edi] ; x_ptr[0...] |
239 |
|
movd mm2, [edi+edx] ; x_ptr[x_stride...] |
240 |
|
punpcklbw mm0, mm4 ; [ |b |g |r ] |
241 |
|
punpcklbw mm2, mm5 ; [ |b |g |r ] |
242 |
|
movq mm6, mm0 ; = [ |b4|g4|r4] |
243 |
|
paddw mm6, mm2 ; +[ |b4|g4|r4] |
244 |
|
pmaddwd mm0, mm7 ; *= Y_MUL |
245 |
|
pmaddwd mm2, mm7 ; *= Y_MUL |
246 |
|
movq mm4, mm0 ; [r] |
247 |
|
movq mm5, mm2 ; [r] |
248 |
|
psrlq mm4, 32 ; +[g] |
249 |
|
psrlq mm5, 32 ; +[g] |
250 |
|
paddd mm0, mm4 ; +[b] |
251 |
|
paddd mm2, mm5 ; +[b] |
252 |
|
|
253 |
|
pxor mm4, mm4 |
254 |
|
pxor mm5, mm5 |
255 |
|
movd mm1, [edi+%1] ; src[%1...] |
256 |
|
movd mm3, [edi+edx+%1] ; src[x_stride+%1...] |
257 |
|
punpcklbw mm1, mm4 ; [ |b |g |r ] |
258 |
|
punpcklbw mm3, mm5 ; [ |b |g |r ] |
259 |
|
paddw mm6, mm1 ; +[ |b4|g4|r4] |
260 |
|
paddw mm6, mm3 ; +[ |b4|g4|r4] |
261 |
|
pmaddwd mm1, mm7 ; *= Y_MUL |
262 |
|
pmaddwd mm3, mm7 ; *= Y_MUL |
263 |
|
movq mm4, mm1 ; [r] |
264 |
|
movq mm5, mm3 ; [r] |
265 |
|
psrlq mm4, 32 ; +[g] |
266 |
|
psrlq mm5, 32 ; +[g] |
267 |
|
paddd mm1, mm4 ; +[b] |
268 |
|
paddd mm3, mm5 ; +[b] |
269 |
|
|
270 |
|
push edx |
271 |
|
|
272 |
|
movd edx, mm0 |
273 |
|
shr edx, 8 |
274 |
|
add edx, Y_ADD |
275 |
|
mov [esi], dl ; y_ptr[0] |
276 |
|
|
277 |
|
movd edx, mm1 |
278 |
|
shr edx, 8 |
279 |
|
add edx, Y_ADD |
280 |
|
mov [esi + 1], dl ; y_ptr[1] |
281 |
|
|
282 |
|
movd edx, mm2 |
283 |
|
shr edx, 8 |
284 |
|
add edx, Y_ADD |
285 |
|
mov [esi + eax + 0], dl ; y_ptr[y_stride + 0] |
286 |
|
|
287 |
|
movd edx, mm3 |
288 |
|
shr edx, 8 |
289 |
|
add edx, Y_ADD |
290 |
|
mov [esi + eax + 1], dl ; y_ptr[y_stride + 1] |
291 |
|
|
292 |
|
; u_ptr, v_ptr |
293 |
|
movq mm0, mm6 ; = [ |b4|g4|r4] |
294 |
|
pmaddwd mm6, [rgb_v_mul] ; *= V_MUL |
295 |
|
pmaddwd mm0, [rgb_u_mul] ; *= U_MUL |
296 |
movq mm1, mm0 |
movq mm1, mm0 |
297 |
movq mm2, mm6 |
movq mm2, mm6 |
298 |
psrlq mm1, 32 |
psrlq mm1, 32 |
531 |
; input |
; input |
532 |
MAKE_COLORSPACE bgr_to_yv12_mmx,0, 3,2,2, BGR_TO_YV12, 3, -1 |
MAKE_COLORSPACE bgr_to_yv12_mmx,0, 3,2,2, BGR_TO_YV12, 3, -1 |
533 |
MAKE_COLORSPACE bgra_to_yv12_mmx,0, 4,2,2, BGR_TO_YV12, 4, -1 |
MAKE_COLORSPACE bgra_to_yv12_mmx,0, 4,2,2, BGR_TO_YV12, 4, -1 |
534 |
|
MAKE_COLORSPACE rgb_to_yv12_mmx,0, 3,2,2, RGB_TO_YV12, 3, -1 |
535 |
|
MAKE_COLORSPACE rgba_to_yv12_mmx,0, 4,2,2, RGB_TO_YV12, 4, -1 |
536 |
|
|
537 |
; output |
; output |
538 |
MAKE_COLORSPACE yv12_to_bgr_mmx,48, 3,8,2, YV12_TO_BGR, 3, -1 |
MAKE_COLORSPACE yv12_to_bgr_mmx,48, 3,8,2, YV12_TO_BGR, 3, -1 |
539 |
MAKE_COLORSPACE yv12_to_bgra_mmx,48, 4,8,2, YV12_TO_BGR, 4, -1 |
MAKE_COLORSPACE yv12_to_bgra_mmx,48, 4,8,2, YV12_TO_BGR, 4, -1 |
540 |
|
|
541 |
|
|
542 |
|
%ifidn __OUTPUT_FORMAT__,elf |
543 |
|
section ".note.GNU-stack" noalloc noexec nowrite progbits |
544 |
|
%endif |
545 |
|
|