Advertisement
Guest User

Untitled

a guest
Dec 8th, 2017
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 5.15 KB | None | 0 0
  1. From 6a79265d242c3443cea96dd7520a0efe27efa9be Mon Sep 17 00:00:00 2001
  2. From: James Almer <jamrial@gmail.com>
  3. Date: Fri, 8 Dec 2017 19:02:27 -0300
  4. Subject: [PATCH] arm/hevc_idct: fix compilation on Android
  5.  
  6. Suggested-by: wbs
  7. Signed-off-by: James Almer <jamrial@gmail.com>
  8. ---
  9. libavcodec/arm/hevcdsp_idct_neon.S | 119 +++++++++++++++++++------------------
  10.  1 file changed, 60 insertions(+), 59 deletions(-)
  11.  
  12. diff --git a/libavcodec/arm/hevcdsp_idct_neon.S b/libavcodec/arm/hevcdsp_idct_neon.S
  13. index 139029a256..75795e6a6a 100644
  14. --- a/libavcodec/arm/hevcdsp_idct_neon.S
  15. +++ b/libavcodec/arm/hevcdsp_idct_neon.S
  16. @@ -229,65 +229,6 @@ function ff_hevc_add_residual_32x32_10_neon, export=1
  17.          bx              lr
  18.  endfunc
  19.  
  20. -/* uses registers q2 - q9 for temp values */
  21. -/* TODO: reorder */
  22. -.macro tr4_luma_shift r0, r1, r2, r3, shift
  23. -        vaddl.s16   q5, \r0, \r2    // c0 = src0 + src2
  24. -        vaddl.s16   q2, \r2, \r3    // c1 = src2 + src3
  25. -        vsubl.s16   q4, \r0, \r3    // c2 = src0 - src3
  26. -        vmull.s16   q6, \r1, d0[0]  // c3 = 74 * src1
  27. -
  28. -        vaddl.s16   q7, \r0, \r3    // src0 + src3
  29. -        vsubw.s16   q7, q7, \r2     // src0 - src2 + src3
  30. -        vmul.s32    q7, q7, d0[0]   // dst2 = 74 * (src0 - src2 + src3)
  31. -
  32. -        vmul.s32    q8, q5, d0[1]   // 29 * c0
  33. -        vmul.s32    q9, q2, d1[0]   // 55 * c1
  34. -        vadd.s32    q8, q9          // 29 * c0 + 55 * c1
  35. -        vadd.s32    q8, q6          // dst0 = 29 * c0 + 55 * c1 + c3
  36. -
  37. -        vmul.s32    q2, q2, d0[1]   // 29 * c1
  38. -        vmul.s32    q9, q4, d1[0]   // 55 * c2
  39. -        vsub.s32    q9, q2          // 55 * c2 - 29 * c1
  40. -        vadd.s32    q9, q6          // dst1 = 55 * c2 - 29 * c1 + c3
  41. -
  42. -        vmul.s32    q5, q5, d1[0]   // 55 * c0
  43. -        vmul.s32    q4, q4, d0[1]   // 29 * c2
  44. -        vadd.s32    q5, q4          // 55 * c0 + 29 * c2
  45. -        vsub.s32    q5, q6          // dst3 = 55 * c0 + 29 * c2 - c3
  46. -
  47. -        vqrshrn.s32   \r0, q8, \shift
  48. -        vqrshrn.s32   \r1, q9, \shift
  49. -        vqrshrn.s32   \r2, q7, \shift
  50. -        vqrshrn.s32   \r3, q5, \shift
  51. -.endm
  52. -
  53. -function ff_hevc_transform_luma_4x4_neon_8, export=1
  54. -        vpush       {d8-d15}
  55. -        vld1.16     {q14, q15}, [r0]  // coeffs
  56. -        ldr         r3, =0x4a  // 74
  57. -        vmov.32     d0[0], r3
  58. -        ldr         r3, =0x1d  // 29
  59. -        vmov.32     d0[1], r3
  60. -        ldr         r3, =0x37  // 55
  61. -        vmov.32     d1[0], r3
  62. -
  63. -        tr4_luma_shift d28, d29, d30, d31, #7
  64. -
  65. -        vtrn.16     d28, d29
  66. -        vtrn.16     d30, d31
  67. -        vtrn.32     q14, q15
  68. -
  69. -        tr4_luma_shift d28, d29, d30, d31, #12
  70. -
  71. -        vtrn.16     d28, d29
  72. -        vtrn.16     d30, d31
  73. -        vtrn.32     q14, q15
  74. -        vst1.16     {q14, q15}, [r0]
  75. -        vpop        {d8-d15}
  76. -        bx lr
  77. -endfunc
  78. -
  79.  .macro idct_4x4_dc bitdepth
  80.  function ff_hevc_idct_4x4_dc_\bitdepth\()_neon, export=1
  81.          ldrsh           r1, [r0]
  82. @@ -1040,3 +981,63 @@ idct_32x32 8
  83.  idct_32x32_dc 8
  84.  idct_32x32 10
  85.  idct_32x32_dc 10
  86. +
  87. +/* uses registers q2 - q9 for temp values */
  88. +/* TODO: reorder */
  89. +.macro tr4_luma_shift r0, r1, r2, r3, shift
  90. +        vaddl.s16   q5, \r0, \r2    // c0 = src0 + src2
  91. +        vaddl.s16   q2, \r2, \r3    // c1 = src2 + src3
  92. +        vsubl.s16   q4, \r0, \r3    // c2 = src0 - src3
  93. +        vmull.s16   q6, \r1, d0[0]  // c3 = 74 * src1
  94. +
  95. +        vaddl.s16   q7, \r0, \r3    // src0 + src3
  96. +        vsubw.s16   q7, q7, \r2     // src0 - src2 + src3
  97. +        vmul.s32    q7, q7, d0[0]   // dst2 = 74 * (src0 - src2 + src3)
  98. +
  99. +        vmul.s32    q8, q5, d0[1]   // 29 * c0
  100. +        vmul.s32    q9, q2, d1[0]   // 55 * c1
  101. +        vadd.s32    q8, q9          // 29 * c0 + 55 * c1
  102. +        vadd.s32    q8, q6          // dst0 = 29 * c0 + 55 * c1 + c3
  103. +
  104. +        vmul.s32    q2, q2, d0[1]   // 29 * c1
  105. +        vmul.s32    q9, q4, d1[0]   // 55 * c2
  106. +        vsub.s32    q9, q2          // 55 * c2 - 29 * c1
  107. +        vadd.s32    q9, q6          // dst1 = 55 * c2 - 29 * c1 + c3
  108. +
  109. +        vmul.s32    q5, q5, d1[0]   // 55 * c0
  110. +        vmul.s32    q4, q4, d0[1]   // 29 * c2
  111. +        vadd.s32    q5, q4          // 55 * c0 + 29 * c2
  112. +        vsub.s32    q5, q6          // dst3 = 55 * c0 + 29 * c2 - c3
  113. +
  114. +        vqrshrn.s32   \r0, q8, \shift
  115. +        vqrshrn.s32   \r1, q9, \shift
  116. +        vqrshrn.s32   \r2, q7, \shift
  117. +        vqrshrn.s32   \r3, q5, \shift
  118. +.endm
  119. +
  120. +.ltorg
  121. +function ff_hevc_transform_luma_4x4_neon_8, export=1
  122. +        vpush       {d8-d15}
  123. +        vld1.16     {q14, q15}, [r0]  // coeffs
  124. +        ldr         r3, =0x4a  // 74
  125. +        vmov.32     d0[0], r3
  126. +        ldr         r3, =0x1d  // 29
  127. +        vmov.32     d0[1], r3
  128. +        ldr         r3, =0x37  // 55
  129. +        vmov.32     d1[0], r3
  130. +
  131. +        tr4_luma_shift d28, d29, d30, d31, #7
  132. +
  133. +        vtrn.16     d28, d29
  134. +        vtrn.16     d30, d31
  135. +        vtrn.32     q14, q15
  136. +
  137. +        tr4_luma_shift d28, d29, d30, d31, #12
  138. +
  139. +        vtrn.16     d28, d29
  140. +        vtrn.16     d30, d31
  141. +        vtrn.32     q14, q15
  142. +        vst1.16     {q14, q15}, [r0]
  143. +        vpop        {d8-d15}
  144. +        bx lr
  145. +endfunc
  146. --
  147. 2.15.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement