84 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
85 |
; FIX(Y_B) FIX(Y_G) FIX(Y_R) Ignored |
; FIX(Y_B) FIX(Y_G) FIX(Y_R) Ignored |
86 |
|
|
87 |
y_mul: dw 25, 129, 66, 0 |
bgr_y_mul: dw 25, 129, 66, 0 |
88 |
u_mul: dw 112, -74, -38, 0 |
bgr_u_mul: dw 112, -74, -38, 0 |
89 |
v_mul: dw -18, -94, 112, 0 |
bgr_v_mul: dw -18, -94, 112, 0 |
90 |
|
|
91 |
|
;----------------------------------------------------------------------------- |
92 |
|
; BGR->YV12 multiplication matrices |
93 |
|
;----------------------------------------------------------------------------- |
94 |
|
; FIX(Y_R) FIX(Y_G) FIX(Y_B) Ignored |
95 |
|
|
96 |
|
rgb_y_mul: dw 66, 129, 25, 0 |
97 |
|
rgb_u_mul: dw -38, -74, 112, 0 |
98 |
|
rgb_v_mul: dw 112, -94, -18, 0 |
99 |
|
|
100 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
101 |
; YV12->RGB data |
; YV12->RGB data |
128 |
;------------------------------------------------------------------------------ |
;------------------------------------------------------------------------------ |
129 |
|
|
130 |
%macro BGR_TO_YV12_INIT 2 |
%macro BGR_TO_YV12_INIT 2 |
131 |
movq mm7, [y_mul] |
movq mm7, [bgr_y_mul] |
132 |
%endmacro |
%endmacro |
133 |
|
|
134 |
|
|
192 |
|
|
193 |
; u_ptr, v_ptr |
; u_ptr, v_ptr |
194 |
movq mm0, mm6 ; = [ |b4|g4|r4] |
movq mm0, mm6 ; = [ |b4|g4|r4] |
195 |
pmaddwd mm6, [v_mul] ; *= V_MUL |
pmaddwd mm6, [bgr_v_mul] ; *= V_MUL |
196 |
pmaddwd mm0, [u_mul] ; *= U_MUL |
pmaddwd mm0, [bgr_u_mul] ; *= U_MUL |
197 |
|
movq mm1, mm0 |
198 |
|
movq mm2, mm6 |
199 |
|
psrlq mm1, 32 |
200 |
|
psrlq mm2, 32 |
201 |
|
paddd mm0, mm1 |
202 |
|
paddd mm2, mm6 |
203 |
|
|
204 |
|
movd edx, mm0 |
205 |
|
shr edx, 10 |
206 |
|
add edx, U_ADD |
207 |
|
mov [ebx], dl |
208 |
|
|
209 |
|
movd edx, mm2 |
210 |
|
shr edx, 10 |
211 |
|
add edx, V_ADD |
212 |
|
mov [ecx], dl |
213 |
|
|
214 |
|
pop edx |
215 |
|
%endmacro |
216 |
|
|
217 |
|
;------------------------------------------------------------------------------ |
218 |
|
; RGB_TO_YV12( BYTES ) |
219 |
|
; |
220 |
|
; BYTES 3=rgb(24bit), 4=rgba(32-bit) |
221 |
|
; |
222 |
|
; bytes=3/4, pixels = 2, vpixels=2 |
223 |
|
;------------------------------------------------------------------------------ |
224 |
|
|
225 |
|
%macro RGB_TO_YV12_INIT 2 |
226 |
|
movq mm7, [rgb_y_mul] |
227 |
|
%endmacro |
228 |
|
|
229 |
|
|
230 |
|
%macro RGB_TO_YV12 2 |
231 |
|
; y_out |
232 |
|
pxor mm4, mm4 |
233 |
|
pxor mm5, mm5 |
234 |
|
movd mm0, [edi] ; x_ptr[0...] |
235 |
|
movd mm2, [edi+edx] ; x_ptr[x_stride...] |
236 |
|
punpcklbw mm0, mm4 ; [ |b |g |r ] |
237 |
|
punpcklbw mm2, mm5 ; [ |b |g |r ] |
238 |
|
movq mm6, mm0 ; = [ |b4|g4|r4] |
239 |
|
paddw mm6, mm2 ; +[ |b4|g4|r4] |
240 |
|
pmaddwd mm0, mm7 ; *= Y_MUL |
241 |
|
pmaddwd mm2, mm7 ; *= Y_MUL |
242 |
|
movq mm4, mm0 ; [r] |
243 |
|
movq mm5, mm2 ; [r] |
244 |
|
psrlq mm4, 32 ; +[g] |
245 |
|
psrlq mm5, 32 ; +[g] |
246 |
|
paddd mm0, mm4 ; +[b] |
247 |
|
paddd mm2, mm5 ; +[b] |
248 |
|
|
249 |
|
pxor mm4, mm4 |
250 |
|
pxor mm5, mm5 |
251 |
|
movd mm1, [edi+%1] ; src[%1...] |
252 |
|
movd mm3, [edi+edx+%1] ; src[x_stride+%1...] |
253 |
|
punpcklbw mm1, mm4 ; [ |b |g |r ] |
254 |
|
punpcklbw mm3, mm5 ; [ |b |g |r ] |
255 |
|
paddw mm6, mm1 ; +[ |b4|g4|r4] |
256 |
|
paddw mm6, mm3 ; +[ |b4|g4|r4] |
257 |
|
pmaddwd mm1, mm7 ; *= Y_MUL |
258 |
|
pmaddwd mm3, mm7 ; *= Y_MUL |
259 |
|
movq mm4, mm1 ; [r] |
260 |
|
movq mm5, mm3 ; [r] |
261 |
|
psrlq mm4, 32 ; +[g] |
262 |
|
psrlq mm5, 32 ; +[g] |
263 |
|
paddd mm1, mm4 ; +[b] |
264 |
|
paddd mm3, mm5 ; +[b] |
265 |
|
|
266 |
|
push edx |
267 |
|
|
268 |
|
movd edx, mm0 |
269 |
|
shr edx, 8 |
270 |
|
add edx, Y_ADD |
271 |
|
mov [esi], dl ; y_ptr[0] |
272 |
|
|
273 |
|
movd edx, mm1 |
274 |
|
shr edx, 8 |
275 |
|
add edx, Y_ADD |
276 |
|
mov [esi + 1], dl ; y_ptr[1] |
277 |
|
|
278 |
|
movd edx, mm2 |
279 |
|
shr edx, 8 |
280 |
|
add edx, Y_ADD |
281 |
|
mov [esi + eax + 0], dl ; y_ptr[y_stride + 0] |
282 |
|
|
283 |
|
movd edx, mm3 |
284 |
|
shr edx, 8 |
285 |
|
add edx, Y_ADD |
286 |
|
mov [esi + eax + 1], dl ; y_ptr[y_stride + 1] |
287 |
|
|
288 |
|
; u_ptr, v_ptr |
289 |
|
movq mm0, mm6 ; = [ |b4|g4|r4] |
290 |
|
pmaddwd mm6, [rgb_v_mul] ; *= V_MUL |
291 |
|
pmaddwd mm0, [rgb_u_mul] ; *= U_MUL |
292 |
movq mm1, mm0 |
movq mm1, mm0 |
293 |
movq mm2, mm6 |
movq mm2, mm6 |
294 |
psrlq mm1, 32 |
psrlq mm1, 32 |
527 |
; input |
; input |
528 |
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 |
529 |
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 |
530 |
|
MAKE_COLORSPACE rgb_to_yv12_mmx,0, 3,2,2, RGB_TO_YV12, 3, -1 |
531 |
|
MAKE_COLORSPACE rgba_to_yv12_mmx,0, 4,2,2, RGB_TO_YV12, 4, -1 |
532 |
|
|
533 |
; output |
; output |
534 |
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 |