The old code is correct only when stride = 2*width. Patch by Ronaldo Moura <ronaldo d moura monity com br> Originally committed as revision 31142 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
Unified · Split
| @@ -479,9 +479,6 @@ DEFUN(uyvytoyv12, mL3, (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8 · 478 unmodified lines | |||
| 479 | 479 | ||
| 480 | r1 = [fp + ARG_srcStride]; | 480 | r1 = [fp + ARG_srcStride]; |
| 481 | r2 = r0 + r1; | 481 | r2 = r0 + r1; |
| 482 | r1 += -8; // i0,i1 is pre read need to correct | ||
| 483 | m0 = r1; | ||
| 484 | |||
| 485 | i0 = r0; // uyvy_T even | 482 | i0 = r0; // uyvy_T even |
| 486 | i1 = r2; // uyvy_B odd | 483 | i1 = r2; // uyvy_B odd |
| 487 | 484 | ||
| @@ -494,6 +491,12 @@ DEFUN(uyvytoyv12, mL3, (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8 · 6 unmodified lines | |||
| 494 | p4 = p4 >> 1; | 491 | p4 = p4 >> 1; |
| 495 | p5 = p5 >> 2; | 492 | p5 = p5 >> 2; |
| 496 | 493 | ||
| 494 | r2 = r0 << 1; | ||
| 495 | r1 = r1 << 1; | ||
| 496 | r1 = r1 - r2; // srcStride + (srcStride - 2*width) | ||
| 497 | r1 += -8; // i0,i1 is pre read need to correct | ||
| 498 | m0 = r1; | ||
| 499 | |||
| 497 | r2 = [fp + ARG_chromStride]; | 500 | r2 = [fp + ARG_chromStride]; |
| 498 | r0 = r0 >> 1; | 501 | r0 = r0 >> 1; |
| 499 | r2 = r2 - r0; | 502 | r2 = r2 - r0; |
| @@ -549,8 +552,6 @@ DEFUN(yuyvtoyv12, mL3, (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8 · 49 unmodified lines | |||
| 549 | 552 | ||
| 550 | r1 = [fp + ARG_srcStride]; | 553 | r1 = [fp + ARG_srcStride]; |
| 551 | r2 = r0 + r1; | 554 | r2 = r0 + r1; |
| 552 | r1 += -8; // i0,i1 is pre read need to correct | ||
| 553 | m0 = r1; | ||
| 554 | 555 | ||
| 555 | i0 = r0; // uyvy_T even | 556 | i0 = r0; // uyvy_T even |
| 556 | i1 = r2; // uyvy_B odd | 557 | i1 = r2; // uyvy_B odd |
| @@ -564,6 +565,12 @@ DEFUN(yuyvtoyv12, mL3, (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8 · 7 unmodified lines | |||
| 564 | p4 = p4 >> 1; | 565 | p4 = p4 >> 1; |
| 565 | p5 = p5 >> 2; | 566 | p5 = p5 >> 2; |
| 566 | 567 | ||
| 568 | r2 = r0 << 1; | ||
| 569 | r1 = r1 << 1; | ||
| 570 | r1 = r1 - r2; // srcStride + (srcStride - 2*width) | ||
| 571 | r1 += -8; // i0,i1 is pre read need to correct | ||
| 572 | m0 = r1; | ||
| 573 | |||
| 567 | r2 = [fp + ARG_chromStride]; | 574 | r2 = [fp + ARG_chromStride]; |
| 568 | r0 = r0 >> 1; | 575 | r0 = r0 >> 1; |
| 569 | r2 = r2 - r0; | 576 | r2 = r2 - r0; |