| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright (c) 2012 The LibYuv project authors. All Rights Reserved. |    2  *  Copyright (c) 2012 The LibYuv project authors. All Rights Reserved. | 
|    3  * |    3  * | 
|    4  *  Use of this source code is governed by a BSD-style license |    4  *  Use of this source code is governed by a BSD-style license | 
|    5  *  that can be found in the LICENSE file in the root of the source |    5  *  that can be found in the LICENSE file in the root of the source | 
|    6  *  tree. An additional intellectual property rights grant can be found |    6  *  tree. An additional intellectual property rights grant can be found | 
|    7  *  in the file PATENTS. All contributing project authors may |    7  *  in the file PATENTS. All contributing project authors may | 
|    8  *  be found in the AUTHORS file in the root of the source tree. |    8  *  be found in the AUTHORS file in the root of the source tree. | 
|    9  */ |    9  */ | 
|   10  |   10  | 
| (...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  586   ); |  586   ); | 
|  587 } |  587 } | 
|  588  |  588  | 
|  589 // Convert (4 Y and 2 VU) I422 and arrange RGB values into |  589 // Convert (4 Y and 2 VU) I422 and arrange RGB values into | 
|  590 // t5 = | 0 | B0 | 0 | b0 | |  590 // t5 = | 0 | B0 | 0 | b0 | | 
|  591 // t4 = | 0 | B1 | 0 | b1 | |  591 // t4 = | 0 | B1 | 0 | b1 | | 
|  592 // t9 = | 0 | G0 | 0 | g0 | |  592 // t9 = | 0 | G0 | 0 | g0 | | 
|  593 // t8 = | 0 | G1 | 0 | g1 | |  593 // t8 = | 0 | G1 | 0 | g1 | | 
|  594 // t2 = | 0 | R0 | 0 | r0 | |  594 // t2 = | 0 | R0 | 0 | r0 | | 
|  595 // t1 = | 0 | R1 | 0 | r1 | |  595 // t1 = | 0 | R1 | 0 | r1 | | 
|  596 #define I422ToTransientMipsRGB                                                 \ |  596 #define YUVTORGB                                                               \ | 
|  597       "lw                $t0, 0(%[y_buf])       \n"                            \ |  597       "lw                $t0, 0(%[y_buf])       \n"                            \ | 
|  598       "lhu               $t1, 0(%[u_buf])       \n"                            \ |  598       "lhu               $t1, 0(%[u_buf])       \n"                            \ | 
|  599       "lhu               $t2, 0(%[v_buf])       \n"                            \ |  599       "lhu               $t2, 0(%[v_buf])       \n"                            \ | 
|  600       "preceu.ph.qbr     $t1, $t1               \n"                            \ |  600       "preceu.ph.qbr     $t1, $t1               \n"                            \ | 
|  601       "preceu.ph.qbr     $t2, $t2               \n"                            \ |  601       "preceu.ph.qbr     $t2, $t2               \n"                            \ | 
|  602       "preceu.ph.qbra    $t3, $t0               \n"                            \ |  602       "preceu.ph.qbra    $t3, $t0               \n"                            \ | 
|  603       "preceu.ph.qbla    $t0, $t0               \n"                            \ |  603       "preceu.ph.qbla    $t0, $t0               \n"                            \ | 
|  604       "subu.ph           $t1, $t1, $s5          \n"                            \ |  604       "subu.ph           $t1, $t1, $s5          \n"                            \ | 
|  605       "subu.ph           $t2, $t2, $s5          \n"                            \ |  605       "subu.ph           $t2, $t2, $s5          \n"                            \ | 
|  606       "subu.ph           $t3, $t3, $s4          \n"                            \ |  606       "subu.ph           $t3, $t3, $s4          \n"                            \ | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  645       "shra.ph           $t8, $t8, 8            \n"                            \ |  645       "shra.ph           $t8, $t8, 8            \n"                            \ | 
|  646       "shra.ph           $t2, $t2, 8            \n"                            \ |  646       "shra.ph           $t2, $t2, 8            \n"                            \ | 
|  647       "shra.ph           $t1, $t1, 8            \n"                            \ |  647       "shra.ph           $t1, $t1, 8            \n"                            \ | 
|  648       "addu.ph           $t5, $t5, $s5          \n"                            \ |  648       "addu.ph           $t5, $t5, $s5          \n"                            \ | 
|  649       "addu.ph           $t4, $t4, $s5          \n"                            \ |  649       "addu.ph           $t4, $t4, $s5          \n"                            \ | 
|  650       "addu.ph           $t9, $t9, $s5          \n"                            \ |  650       "addu.ph           $t9, $t9, $s5          \n"                            \ | 
|  651       "addu.ph           $t8, $t8, $s5          \n"                            \ |  651       "addu.ph           $t8, $t8, $s5          \n"                            \ | 
|  652       "addu.ph           $t2, $t2, $s5          \n"                            \ |  652       "addu.ph           $t2, $t2, $s5          \n"                            \ | 
|  653       "addu.ph           $t1, $t1, $s5          \n" |  653       "addu.ph           $t1, $t1, $s5          \n" | 
|  654  |  654  | 
 |  655 // TODO(fbarchard): accept yuv conversion constants. | 
|  655 void I422ToARGBRow_MIPS_DSPR2(const uint8* y_buf, |  656 void I422ToARGBRow_MIPS_DSPR2(const uint8* y_buf, | 
|  656                               const uint8* u_buf, |  657                               const uint8* u_buf, | 
|  657                               const uint8* v_buf, |  658                               const uint8* v_buf, | 
|  658                               uint8* rgb_buf, |  659                               uint8* rgb_buf, | 
 |  660                               struct YuvConstants* yuvconstants, | 
|  659                               int width) { |  661                               int width) { | 
|  660   __asm__ __volatile__ ( |  662   __asm__ __volatile__ ( | 
|  661     ".set push                                \n" |  663     ".set push                                \n" | 
|  662     ".set noreorder                           \n" |  664     ".set noreorder                           \n" | 
|  663     "beqz              %[width], 2f           \n" |  665     "beqz              %[width], 2f           \n" | 
|  664     " repl.ph          $s0, 74                \n"  // |YG|YG| = |74|74| |  666     " repl.ph          $s0, 74                \n"  // |YG|YG| = |74|74| | 
|  665     "repl.ph           $s1, -25               \n"  // |UG|UG| = |-25|-25| |  667     "repl.ph           $s1, -25               \n"  // |UG|UG| = |-25|-25| | 
|  666     "repl.ph           $s2, -52               \n"  // |VG|VG| = |-52|-52| |  668     "repl.ph           $s2, -52               \n"  // |VG|VG| = |-52|-52| | 
|  667     "repl.ph           $s3, 102               \n"  // |VR|VR| = |102|102| |  669     "repl.ph           $s3, 102               \n"  // |VR|VR| = |102|102| | 
|  668     "repl.ph           $s4, 16                \n"  // |0|16|0|16| |  670     "repl.ph           $s4, 16                \n"  // |0|16|0|16| | 
|  669     "repl.ph           $s5, 128               \n"  // |128|128| // clipping |  671     "repl.ph           $s5, 128               \n"  // |128|128| // clipping | 
|  670     "lui               $s6, 0xff00            \n" |  672     "lui               $s6, 0xff00            \n" | 
|  671     "ori               $s6, 0xff00            \n"  // |ff|00|ff|00|ff| |  673     "ori               $s6, 0xff00            \n"  // |ff|00|ff|00|ff| | 
|  672  |  674  | 
|  673    "1:                                        \n" |  675    "1:                                        \n" | 
|  674       I422ToTransientMipsRGB |  676       YUVTORGB | 
|  675 // Arranging into argb format |  677 // Arranging into argb format | 
|  676     "precr.qb.ph       $t4, $t8, $t4          \n"  // |G1|g1|B1|b1| |  678     "precr.qb.ph       $t4, $t8, $t4          \n"  // |G1|g1|B1|b1| | 
|  677     "precr.qb.ph       $t5, $t9, $t5          \n"  // |G0|g0|B0|b0| |  679     "precr.qb.ph       $t5, $t9, $t5          \n"  // |G0|g0|B0|b0| | 
|  678     "addiu             %[width], -4           \n" |  680     "addiu             %[width], -4           \n" | 
|  679     "precrq.qb.ph      $t8, $t4, $t5          \n"  // |G1|B1|G0|B0| |  681     "precrq.qb.ph      $t8, $t4, $t5          \n"  // |G1|B1|G0|B0| | 
|  680     "precr.qb.ph       $t9, $t4, $t5          \n"  // |g1|b1|g0|b0| |  682     "precr.qb.ph       $t9, $t4, $t5          \n"  // |g1|b1|g0|b0| | 
|  681     "precr.qb.ph       $t2, $t1, $t2          \n"  // |R1|r1|R0|r0| |  683     "precr.qb.ph       $t2, $t1, $t2          \n"  // |R1|r1|R0|r0| | 
|  682  |  684  | 
|  683     "addiu             %[y_buf], 4            \n" |  685     "addiu             %[y_buf], 4            \n" | 
|  684     "preceu.ph.qbla    $t1, $t2               \n"  // |0 |R1|0 |R0| |  686     "preceu.ph.qbla    $t1, $t2               \n"  // |0 |R1|0 |R0| | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  710       "t6", "t7", "t8", "t9", |  712       "t6", "t7", "t8", "t9", | 
|  711       "s0", "s1", "s2", "s3", |  713       "s0", "s1", "s2", "s3", | 
|  712       "s4", "s5", "s6" |  714       "s4", "s5", "s6" | 
|  713   ); |  715   ); | 
|  714 } |  716 } | 
|  715  |  717  | 
|  716 void I422ToABGRRow_MIPS_DSPR2(const uint8* y_buf, |  718 void I422ToABGRRow_MIPS_DSPR2(const uint8* y_buf, | 
|  717                               const uint8* u_buf, |  719                               const uint8* u_buf, | 
|  718                               const uint8* v_buf, |  720                               const uint8* v_buf, | 
|  719                               uint8* rgb_buf, |  721                               uint8* rgb_buf, | 
 |  722                               struct YuvConstants* yuvconstants, | 
|  720                               int width) { |  723                               int width) { | 
|  721   __asm__ __volatile__ ( |  724   __asm__ __volatile__ ( | 
|  722     ".set push                                \n" |  725     ".set push                                \n" | 
|  723     ".set noreorder                           \n" |  726     ".set noreorder                           \n" | 
|  724     "beqz              %[width], 2f           \n" |  727     "beqz              %[width], 2f           \n" | 
|  725     " repl.ph          $s0, 74                \n"  // |YG|YG| = |74|74| |  728     " repl.ph          $s0, 74                \n"  // |YG|YG| = |74|74| | 
|  726     "repl.ph           $s1, -25               \n"  // |UG|UG| = |-25|-25| |  729     "repl.ph           $s1, -25               \n"  // |UG|UG| = |-25|-25| | 
|  727     "repl.ph           $s2, -52               \n"  // |VG|VG| = |-52|-52| |  730     "repl.ph           $s2, -52               \n"  // |VG|VG| = |-52|-52| | 
|  728     "repl.ph           $s3, 102               \n"  // |VR|VR| = |102|102| |  731     "repl.ph           $s3, 102               \n"  // |VR|VR| = |102|102| | 
|  729     "repl.ph           $s4, 16                \n"  // |0|16|0|16| |  732     "repl.ph           $s4, 16                \n"  // |0|16|0|16| | 
|  730     "repl.ph           $s5, 128               \n"  // |128|128| |  733     "repl.ph           $s5, 128               \n"  // |128|128| | 
|  731     "lui               $s6, 0xff00            \n" |  734     "lui               $s6, 0xff00            \n" | 
|  732     "ori               $s6, 0xff00            \n"  // |ff|00|ff|00| |  735     "ori               $s6, 0xff00            \n"  // |ff|00|ff|00| | 
|  733  |  736  | 
|  734    "1:                                         \n" |  737    "1:                                         \n" | 
|  735       I422ToTransientMipsRGB |  738       YUVTORGB | 
|  736 // Arranging into abgr format |  739 // Arranging into abgr format | 
|  737     "precr.qb.ph      $t0, $t8, $t1           \n"  // |G1|g1|R1|r1| |  740     "precr.qb.ph      $t0, $t8, $t1           \n"  // |G1|g1|R1|r1| | 
|  738     "precr.qb.ph      $t3, $t9, $t2           \n"  // |G0|g0|R0|r0| |  741     "precr.qb.ph      $t3, $t9, $t2           \n"  // |G0|g0|R0|r0| | 
|  739     "precrq.qb.ph     $t8, $t0, $t3           \n"  // |G1|R1|G0|R0| |  742     "precrq.qb.ph     $t8, $t0, $t3           \n"  // |G1|R1|G0|R0| | 
|  740     "precr.qb.ph      $t9, $t0, $t3           \n"  // |g1|r1|g0|r0| |  743     "precr.qb.ph      $t9, $t0, $t3           \n"  // |g1|r1|g0|r0| | 
|  741  |  744  | 
|  742     "precr.qb.ph       $t2, $t4, $t5          \n"  // |B1|b1|B0|b0| |  745     "precr.qb.ph       $t2, $t4, $t5          \n"  // |B1|b1|B0|b0| | 
|  743     "addiu             %[width], -4           \n" |  746     "addiu             %[width], -4           \n" | 
|  744     "addiu             %[y_buf], 4            \n" |  747     "addiu             %[y_buf], 4            \n" | 
|  745     "preceu.ph.qbla    $t1, $t2               \n"  // |0 |B1|0 |B0| |  748     "preceu.ph.qbla    $t1, $t2               \n"  // |0 |B1|0 |B0| | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|  771       "t6", "t7", "t8", "t9", |  774       "t6", "t7", "t8", "t9", | 
|  772       "s0", "s1", "s2", "s3", |  775       "s0", "s1", "s2", "s3", | 
|  773       "s4", "s5", "s6" |  776       "s4", "s5", "s6" | 
|  774   ); |  777   ); | 
|  775 } |  778 } | 
|  776  |  779  | 
|  777 void I422ToBGRARow_MIPS_DSPR2(const uint8* y_buf, |  780 void I422ToBGRARow_MIPS_DSPR2(const uint8* y_buf, | 
|  778                               const uint8* u_buf, |  781                               const uint8* u_buf, | 
|  779                               const uint8* v_buf, |  782                               const uint8* v_buf, | 
|  780                               uint8* rgb_buf, |  783                               uint8* rgb_buf, | 
 |  784                               struct YuvConstants* yuvconstants, | 
|  781                               int width) { |  785                               int width) { | 
|  782   __asm__ __volatile__ ( |  786   __asm__ __volatile__ ( | 
|  783     ".set push                                \n" |  787     ".set push                                \n" | 
|  784     ".set noreorder                           \n" |  788     ".set noreorder                           \n" | 
|  785     "beqz              %[width], 2f           \n" |  789     "beqz              %[width], 2f           \n" | 
|  786     " repl.ph          $s0, 74                \n"  // |YG|YG| = |74 |74 | |  790     " repl.ph          $s0, 74                \n"  // |YG|YG| = |74 |74 | | 
|  787     "repl.ph           $s1, -25               \n"  // |UG|UG| = |-25|-25| |  791     "repl.ph           $s1, -25               \n"  // |UG|UG| = |-25|-25| | 
|  788     "repl.ph           $s2, -52               \n"  // |VG|VG| = |-52|-52| |  792     "repl.ph           $s2, -52               \n"  // |VG|VG| = |-52|-52| | 
|  789     "repl.ph           $s3, 102               \n"  // |VR|VR| = |102|102| |  793     "repl.ph           $s3, 102               \n"  // |VR|VR| = |102|102| | 
|  790     "repl.ph           $s4, 16                \n"  // |0|16|0|16| |  794     "repl.ph           $s4, 16                \n"  // |0|16|0|16| | 
|  791     "repl.ph           $s5, 128               \n"  // |128|128| |  795     "repl.ph           $s5, 128               \n"  // |128|128| | 
|  792     "lui               $s6, 0xff              \n" |  796     "lui               $s6, 0xff              \n" | 
|  793     "ori               $s6, 0xff              \n"  // |00|ff|00|ff| |  797     "ori               $s6, 0xff              \n"  // |00|ff|00|ff| | 
|  794  |  798  | 
|  795    "1:                                        \n" |  799    "1:                                        \n" | 
|  796       I422ToTransientMipsRGB |  800       YUVTORGB | 
|  797       // Arranging into bgra format |  801       // Arranging into bgra format | 
|  798     "precr.qb.ph       $t4, $t4, $t8          \n"  // |B1|b1|G1|g1| |  802     "precr.qb.ph       $t4, $t4, $t8          \n"  // |B1|b1|G1|g1| | 
|  799     "precr.qb.ph       $t5, $t5, $t9          \n"  // |B0|b0|G0|g0| |  803     "precr.qb.ph       $t5, $t5, $t9          \n"  // |B0|b0|G0|g0| | 
|  800     "precrq.qb.ph      $t8, $t4, $t5          \n"  // |B1|G1|B0|G0| |  804     "precrq.qb.ph      $t8, $t4, $t5          \n"  // |B1|G1|B0|G0| | 
|  801     "precr.qb.ph       $t9, $t4, $t5          \n"  // |b1|g1|b0|g0| |  805     "precr.qb.ph       $t9, $t4, $t5          \n"  // |b1|g1|b0|g0| | 
|  802  |  806  | 
|  803     "precr.qb.ph       $t2, $t1, $t2          \n"  // |R1|r1|R0|r0| |  807     "precr.qb.ph       $t2, $t1, $t2          \n"  // |R1|r1|R0|r0| | 
|  804     "addiu             %[width], -4           \n" |  808     "addiu             %[width], -4           \n" | 
|  805     "addiu             %[y_buf], 4            \n" |  809     "addiu             %[y_buf], 4            \n" | 
|  806     "preceu.ph.qbla    $t1, $t2               \n"  // |0 |R1|0 |R0| |  810     "preceu.ph.qbla    $t1, $t2               \n"  // |0 |R1|0 |R0| | 
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  895   ); |  899   ); | 
|  896 } |  900 } | 
|  897 #endif  // __mips_dsp_rev >= 2 |  901 #endif  // __mips_dsp_rev >= 2 | 
|  898  |  902  | 
|  899 #endif  // defined(__mips__) |  903 #endif  // defined(__mips__) | 
|  900  |  904  | 
|  901 #ifdef __cplusplus |  905 #ifdef __cplusplus | 
|  902 }  // extern "C" |  906 }  // extern "C" | 
|  903 }  // namespace libyuv |  907 }  // namespace libyuv | 
|  904 #endif |  908 #endif | 
| OLD | NEW |