Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: media/base/yuv_row_linux.cc

Issue 202068: Reverting 26070. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/base/yuv_row.h ('k') | media/base/yuv_row_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/base/yuv_row.h" 5 #include "media/base/yuv_row.h"
6 6
7 #ifdef _DEBUG 7 #ifdef _DEBUG
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #else 9 #else
10 #define DCHECK(a) 10 #define DCHECK(a)
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 293
294 asm( 294 asm(
295 ".global FastConvertYUVToRGB32Row\n" 295 ".global FastConvertYUVToRGB32Row\n"
296 "FastConvertYUVToRGB32Row:\n" 296 "FastConvertYUVToRGB32Row:\n"
297 "pusha\n" 297 "pusha\n"
298 "mov 0x24(%esp),%edx\n" 298 "mov 0x24(%esp),%edx\n"
299 "mov 0x28(%esp),%edi\n" 299 "mov 0x28(%esp),%edi\n"
300 "mov 0x2c(%esp),%esi\n" 300 "mov 0x2c(%esp),%esi\n"
301 "mov 0x30(%esp),%ebp\n" 301 "mov 0x30(%esp),%ebp\n"
302 "mov 0x34(%esp),%ecx\n" 302 "mov 0x34(%esp),%ecx\n"
303 "jmp Lconvertend\n" 303 "jmp convertend\n"
304 304
305 "Lconvertloop:" 305 "convertloop:"
306 "movzbl (%edi),%eax\n" 306 "movzbl (%edi),%eax\n"
307 "add $0x1,%edi\n" 307 "add $0x1,%edi\n"
308 "movzbl (%esi),%ebx\n" 308 "movzbl (%esi),%ebx\n"
309 "add $0x1,%esi\n" 309 "add $0x1,%esi\n"
310 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 310 "movq kCoefficientsRgbU(,%eax,8),%mm0\n"
311 "movzbl (%edx),%eax\n" 311 "movzbl (%edx),%eax\n"
312 "paddsw kCoefficientsRgbV(,%ebx,8),%mm0\n" 312 "paddsw kCoefficientsRgbV(,%ebx,8),%mm0\n"
313 "movzbl 0x1(%edx),%ebx\n" 313 "movzbl 0x1(%edx),%ebx\n"
314 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 314 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
315 "add $0x2,%edx\n" 315 "add $0x2,%edx\n"
316 "movq kCoefficientsRgbY(,%ebx,8),%mm2\n" 316 "movq kCoefficientsRgbY(,%ebx,8),%mm2\n"
317 "paddsw %mm0,%mm1\n" 317 "paddsw %mm0,%mm1\n"
318 "paddsw %mm0,%mm2\n" 318 "paddsw %mm0,%mm2\n"
319 "psraw $0x6,%mm1\n" 319 "psraw $0x6,%mm1\n"
320 "psraw $0x6,%mm2\n" 320 "psraw $0x6,%mm2\n"
321 "packuswb %mm2,%mm1\n" 321 "packuswb %mm2,%mm1\n"
322 "movntq %mm1,0x0(%ebp)\n" 322 "movntq %mm1,0x0(%ebp)\n"
323 "add $0x8,%ebp\n" 323 "add $0x8,%ebp\n"
324 "Lconvertend:" 324 "convertend:"
325 "sub $0x2,%ecx\n" 325 "sub $0x2,%ecx\n"
326 "jns Lconvertloop\n" 326 "jns convertloop\n"
327 327
328 "and $0x1,%ecx\n" 328 "and $0x1,%ecx\n"
329 "je Lconvertdone\n" 329 "je convertdone\n"
330 330
331 "movzbl (%edi),%eax\n" 331 "movzbl (%edi),%eax\n"
332 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 332 "movq kCoefficientsRgbU(,%eax,8),%mm0\n"
333 "movzbl (%esi),%eax\n" 333 "movzbl (%esi),%eax\n"
334 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n" 334 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n"
335 "movzbl (%edx),%eax\n" 335 "movzbl (%edx),%eax\n"
336 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 336 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
337 "paddsw %mm0,%mm1\n" 337 "paddsw %mm0,%mm1\n"
338 "psraw $0x6,%mm1\n" 338 "psraw $0x6,%mm1\n"
339 "packuswb %mm1,%mm1\n" 339 "packuswb %mm1,%mm1\n"
340 "movd %mm1,0x0(%ebp)\n" 340 "movd %mm1,0x0(%ebp)\n"
341 "Lconvertdone:" 341 "convertdone:"
342 "popa\n" 342 "popa\n"
343 "ret\n" 343 "ret\n"
344 ); 344 );
345 345
346 346
347 void ScaleYUVToRGB32Row(const uint8* y_buf, 347 void ScaleYUVToRGB32Row(const uint8* y_buf,
348 const uint8* u_buf, 348 const uint8* u_buf,
349 const uint8* v_buf, 349 const uint8* v_buf,
350 uint8* rgb_buf, 350 uint8* rgb_buf,
351 int width, 351 int width,
352 int scaled_dx); 352 int scaled_dx);
353 353
354 asm( 354 asm(
355 ".global ScaleYUVToRGB32Row\n" 355 ".global ScaleYUVToRGB32Row\n"
356 "ScaleYUVToRGB32Row:\n" 356 "ScaleYUVToRGB32Row:\n"
357 "pusha\n" 357 "pusha\n"
358 "mov 0x24(%esp),%edx\n" 358 "mov 0x24(%esp),%edx\n"
359 "mov 0x28(%esp),%edi\n" 359 "mov 0x28(%esp),%edi\n"
360 "mov 0x2c(%esp),%esi\n" 360 "mov 0x2c(%esp),%esi\n"
361 "mov 0x30(%esp),%ebp\n" 361 "mov 0x30(%esp),%ebp\n"
362 "mov 0x34(%esp),%ecx\n" 362 "mov 0x34(%esp),%ecx\n"
363 "xor %ebx,%ebx\n" 363 "xor %ebx,%ebx\n"
364 "jmp Lscaleend\n" 364 "jmp scaleend\n"
365 365
366 "Lscaleloop:" 366 "scaleloop:"
367 "mov %ebx,%eax\n" 367 "mov %ebx,%eax\n"
368 "sar $0x5,%eax\n" 368 "sar $0x5,%eax\n"
369 "movzbl (%edi,%eax,1),%eax\n" 369 "movzbl (%edi,%eax,1),%eax\n"
370 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 370 "movq kCoefficientsRgbU(,%eax,8),%mm0\n"
371 "mov %ebx,%eax\n" 371 "mov %ebx,%eax\n"
372 "sar $0x5,%eax\n" 372 "sar $0x5,%eax\n"
373 "movzbl (%esi,%eax,1),%eax\n" 373 "movzbl (%esi,%eax,1),%eax\n"
374 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n" 374 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n"
375 "mov %ebx,%eax\n" 375 "mov %ebx,%eax\n"
376 "add 0x38(%esp),%ebx\n" 376 "add 0x38(%esp),%ebx\n"
377 "sar $0x4,%eax\n" 377 "sar $0x4,%eax\n"
378 "movzbl (%edx,%eax,1),%eax\n" 378 "movzbl (%edx,%eax,1),%eax\n"
379 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 379 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
380 "mov %ebx,%eax\n" 380 "mov %ebx,%eax\n"
381 "add 0x38(%esp),%ebx\n" 381 "add 0x38(%esp),%ebx\n"
382 "sar $0x4,%eax\n" 382 "sar $0x4,%eax\n"
383 "movzbl (%edx,%eax,1),%eax\n" 383 "movzbl (%edx,%eax,1),%eax\n"
384 "movq kCoefficientsRgbY(,%eax,8),%mm2\n" 384 "movq kCoefficientsRgbY(,%eax,8),%mm2\n"
385 "paddsw %mm0,%mm1\n" 385 "paddsw %mm0,%mm1\n"
386 "paddsw %mm0,%mm2\n" 386 "paddsw %mm0,%mm2\n"
387 "psraw $0x6,%mm1\n" 387 "psraw $0x6,%mm1\n"
388 "psraw $0x6,%mm2\n" 388 "psraw $0x6,%mm2\n"
389 "packuswb %mm2,%mm1\n" 389 "packuswb %mm2,%mm1\n"
390 "movntq %mm1,0x0(%ebp)\n" 390 "movntq %mm1,0x0(%ebp)\n"
391 "add $0x8,%ebp\n" 391 "add $0x8,%ebp\n"
392 "Lscaleend:" 392 "scaleend:"
393 "sub $0x2,%ecx\n" 393 "sub $0x2,%ecx\n"
394 "jns Lscaleloop\n" 394 "jns scaleloop\n"
395 395
396 "and $0x1,%ecx\n" 396 "and $0x1,%ecx\n"
397 "je Lscaledone\n" 397 "je scaledone\n"
398 398
399 "mov %ebx,%eax\n" 399 "mov %ebx,%eax\n"
400 "sar $0x5,%eax\n" 400 "sar $0x5,%eax\n"
401 "movzbl (%edi,%eax,1),%eax\n" 401 "movzbl (%edi,%eax,1),%eax\n"
402 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 402 "movq kCoefficientsRgbU(,%eax,8),%mm0\n"
403 "mov %ebx,%eax\n" 403 "mov %ebx,%eax\n"
404 "sar $0x5,%eax\n" 404 "sar $0x5,%eax\n"
405 "movzbl (%esi,%eax,1),%eax\n" 405 "movzbl (%esi,%eax,1),%eax\n"
406 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n" 406 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n"
407 "mov %ebx,%eax\n" 407 "mov %ebx,%eax\n"
408 "sar $0x4,%eax\n" 408 "sar $0x4,%eax\n"
409 "movzbl (%edx,%eax,1),%eax\n" 409 "movzbl (%edx,%eax,1),%eax\n"
410 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 410 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
411 "mov %ebx,%eax\n" 411 "mov %ebx,%eax\n"
412 "sar $0x4,%eax\n" 412 "sar $0x4,%eax\n"
413 "movzbl (%edx,%eax,1),%eax\n" 413 "movzbl (%edx,%eax,1),%eax\n"
414 "movq kCoefficientsRgbY(,%eax,8),%mm2\n" 414 "movq kCoefficientsRgbY(,%eax,8),%mm2\n"
415 "paddsw %mm0,%mm1\n" 415 "paddsw %mm0,%mm1\n"
416 "paddsw %mm0,%mm2\n" 416 "paddsw %mm0,%mm2\n"
417 "psraw $0x6,%mm1\n" 417 "psraw $0x6,%mm1\n"
418 "psraw $0x6,%mm2\n" 418 "psraw $0x6,%mm2\n"
419 "packuswb %mm2,%mm1\n" 419 "packuswb %mm2,%mm1\n"
420 "movd %mm1,0x0(%ebp)\n" 420 "movd %mm1,0x0(%ebp)\n"
421 421
422 "Lscaledone:" 422 "scaledone:"
423 "popa\n" 423 "popa\n"
424 "ret\n" 424 "ret\n"
425 ); 425 );
426 426
427 #else // USE_MMX 427 #else // USE_MMX
428 428
429 // Reference version of YUV converter. 429 // Reference version of YUV converter.
430 static const int kClipTableSize = 256; 430 static const int kClipTableSize = 256;
431 static const int kClipOverflow = 288; // Cb max is 535. 431 static const int kClipOverflow = 288; // Cb max is 535.
432 432
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 uint8 v = v_buf[scaled_x >> 5]; 603 uint8 v = v_buf[scaled_x >> 5];
604 uint8 y0 = y_buf[scaled_x >> 4]; 604 uint8 y0 = y_buf[scaled_x >> 4];
605 YuvPixel(y0, u, v, rgb_buf); 605 YuvPixel(y0, u, v, rgb_buf);
606 rgb_buf += 4; 606 rgb_buf += 4;
607 scaled_x += scaled_dx; 607 scaled_x += scaled_dx;
608 } 608 }
609 } 609 }
610 #endif // USE_MMX 610 #endif // USE_MMX
611 } // extern "C" 611 } // extern "C"
612 612
OLDNEW
« no previous file with comments | « media/base/yuv_row.h ('k') | media/base/yuv_row_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698