History

aarch64/vvc: Add put_qpel_h_* and put_qpel_uni_h_*

Just share hevc implementation. checkasm --test=vvc_mc --benchmark: put_luma_h_8_4x4_c: 0.2 ( 1.00x) put_luma_h_8_4x4_neon: 0.2 ( 1.00x) put_luma_h_8_8x8_c: 1.0 ( 1.00x) put_luma_h_8_8x8_neon: 0.2 ( 4.33x) put_luma_h_8_16x16_c: 3.2 ( 1.00x) put_luma_h_8_16x16_neon: 1.2 ( 2.63x) put_luma_h_8_32x32_c: 13.7 ( 1.00x) put_luma_h_8_32x32_neon: 4.0 ( 3.45x) put_luma_h_8_64x64_c: 48.2 ( 1.00x) put_luma_h_8_64x64_neon: 15.7 ( 3.07x) put_luma_h_8_128x128_c: 203.5 ( 1.00x) put_luma_h_8_128x128_neon: 62.0 ( 3.28x) put_uni_h_luma_8_4x4_c: 0.2 ( 1.00x) put_uni_h_luma_8_4x4_neon: 0.2 ( 1.00x) put_uni_h_luma_8_8x8_c: 1.5 ( 1.00x) put_uni_h_luma_8_8x8_neon: 0.2 ( 6.56x) put_uni_h_luma_8_16x16_c: 5.7 ( 1.00x) put_uni_h_luma_8_16x16_neon: 1.2 ( 4.67x) put_uni_h_luma_8_32x32_c: 24.0 ( 1.00x) put_uni_h_luma_8_32x32_neon: 4.7 ( 5.07x) put_uni_h_luma_8_64x64_c: 90.0 ( 1.00x) put_uni_h_luma_8_64x64_neon: 17.0 ( 5.30x) put_uni_h_luma_8_128x128_c: 357.7 ( 1.00x) put_uni_h_luma_8_128x128_neon: 67.5 ( 5.30x)

Zhao Zhili committed 2 years ago

Commit 20f2bf51 parent 46f07ce4 files · +171 −59Browse files

Showing the changes to libavcodec (4 of 4 files). Show all

Unified · Split

4 files
  1. libavcodec/aarch64/h26x/dsp.h +13 −0
  2. libavcodec/aarch64/h26x/qpel_neon.S +143 −59
  3. libavcodec/aarch64/vvc/Makefile +1 −0
  4. libavcodec/aarch64/vvc/dsp_init.c +14 −0
libavcodec/aarch64/h26x/dsp.h+13−0
@@ -235,4 +235,17 @@ NEON8_FNPROTO(qpel_bi_hv, (uint8_t *dst, ptrdiff_t dststride, · 234 unmodified lines
235 const uint8_t *src, ptrdiff_t srcstride, const int16_t *src2,235 const uint8_t *src, ptrdiff_t srcstride, const int16_t *src2,
236 int height, intptr_t mx, intptr_t my, int width), _i8mm);236 int height, intptr_t mx, intptr_t my, int width), _i8mm);
237 237
238#undef NEON8_FNPROTO_PARTIAL_4
239#define NEON8_FNPROTO_PARTIAL_4(fn, args, ext) \
240 void ff_vvc_put_##fn##_h4_8_neon##ext args; \
241 void ff_vvc_put_##fn##_h8_8_neon##ext args; \
242 void ff_vvc_put_##fn##_h16_8_neon##ext args; \
243 void ff_vvc_put_##fn##_h32_8_neon##ext args;
244
245NEON8_FNPROTO_PARTIAL_4(qpel, (int16_t *dst, const uint8_t *_src, ptrdiff_t _srcstride, int height,
246 const int8_t *hf, const int8_t *vf, int width),)
247
248NEON8_FNPROTO_PARTIAL_4(qpel_uni, (uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src,
249 ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width),)
250
238#endif251#endif
libavcodec/aarch64/h26x/qpel_neon.S+143−59
@@ -21,7 +21,8 @@ · 20 unmodified lines
21 */21 */
22 22
23#include "libavutil/aarch64/asm.S"23#include "libavutil/aarch64/asm.S"
24#define MAX_PB_SIZE 6424#define HEVC_MAX_PB_SIZE 64
25#define VVC_MAX_PB_SIZE 128
25 26
26const qpel_filters, align=427const qpel_filters, align=4
27 .byte 0, 0, 0, 0, 0, 0, 0, 028 .byte 0, 0, 0, 0, 0, 0, 0, 0
@@ -44,6 +45,11 @@ endconst · 16 unmodified lines
44 sxtl v0.8h, v0.8b45 sxtl v0.8h, v0.8b
45.endm46.endm
46 47
48.macro vvc_load_filter m
49 ld1 {v0.8b}, [\m]
50 sxtl v0.8h, v0.8b
51.endm
52
47.macro load_qpel_filterb freg, xreg53.macro load_qpel_filterb freg, xreg
48 movrel \xreg, qpel_filters_abs54 movrel \xreg, qpel_filters_abs
49 add \xreg, \xreg, \freg, lsl #355 add \xreg, \xreg, \freg, lsl #3
@@ -212,22 +218,40 @@ function ff_hevc_put_hevc_h4_8_neon, export=0 · 162 unmodified lines
212endfunc218endfunc
213.endif219.endif
214 220
221.ifnc \type, qpel_bi
222function ff_vvc_put_\type\()_h4_8_neon, export=1
223 vvc_load_filter mx
224 sub src, src, #3
225 mov mx, x30
226.ifc \type, qpel
227 mov dststride, #(VVC_MAX_PB_SIZE << 1)
228 lsl x13, srcstride, #1 // srcstridel
229 mov x14, #(VVC_MAX_PB_SIZE << 2)
230.else
231 lsl x14, dststride, #1 // dststridel
232 lsl x13, srcstride, #1 // srcstridel
233.endif
234 b 1f
235endfunc
236.endif // !qpel_bi
237
215function ff_hevc_put_hevc_\type\()_h4_8_neon, export=1238function ff_hevc_put_hevc_\type\()_h4_8_neon, export=1
216 load_filter mx239 load_filter mx
217.ifc \type, qpel_bi240.ifc \type, qpel_bi
218 mov x16, #(MAX_PB_SIZE << 2) // src2bstridel241 mov x16, #(HEVC_MAX_PB_SIZE << 2) // src2bstridel
219 add x15, x4, #(MAX_PB_SIZE << 1) // src2b242 add x15, x4, #(HEVC_MAX_PB_SIZE << 1) // src2b
220.endif243.endif
221 sub src, src, #3244 sub src, src, #3
222 mov mx, x30245 mov mx, x30
223.ifc \type, qpel246.ifc \type, qpel
224 mov dststride, #(MAX_PB_SIZE << 1)247 mov dststride, #(HEVC_MAX_PB_SIZE << 1)
225 lsl x13, srcstride, #1 // srcstridel248 lsl x13, srcstride, #1 // srcstridel
226 mov x14, #(MAX_PB_SIZE << 2)249 mov x14, #(HEVC_MAX_PB_SIZE << 2)
227.else250.else
228 lsl x14, dststride, #1 // dststridel251 lsl x14, dststride, #1 // dststridel
229 lsl x13, srcstride, #1 // srcstridel252 lsl x13, srcstride, #1 // srcstridel
230.endif253.endif
2541:
231 add x10, dst, dststride // dstb255 add x10, dst, dststride // dstb
232 add x12, src, srcstride // srcb256 add x12, src, srcstride // srcb
2330: ld1 {v16.8b, v17.8b}, [src], x132570: ld1 {v16.8b, v17.8b}, [src], x13
@@ -283,15 +307,15 @@ endfunc · 49 unmodified lines
283function ff_hevc_put_hevc_\type\()_h6_8_neon, export=1307function ff_hevc_put_hevc_\type\()_h6_8_neon, export=1
284 load_filter mx308 load_filter mx
285.ifc \type, qpel_bi309.ifc \type, qpel_bi
286 mov x16, #(MAX_PB_SIZE << 2) // src2bstridel310 mov x16, #(HEVC_MAX_PB_SIZE << 2) // src2bstridel
287 add x15, x4, #(MAX_PB_SIZE << 1) // src2b311 add x15, x4, #(HEVC_MAX_PB_SIZE << 1) // src2b
288.endif312.endif
289 sub src, src, #3313 sub src, src, #3
290 mov mx, x30314 mov mx, x30
291.ifc \type, qpel315.ifc \type, qpel
292 mov dststride, #(MAX_PB_SIZE << 1)316 mov dststride, #(HEVC_MAX_PB_SIZE << 1)
293 lsl x13, srcstride, #1 // srcstridel317 lsl x13, srcstride, #1 // srcstridel
294 mov x14, #((MAX_PB_SIZE << 2) - 8)318 mov x14, #((HEVC_MAX_PB_SIZE << 2) - 8)
295.else319.else
296 lsl x14, dststride, #1 // dststridel320 lsl x14, dststride, #1 // dststridel
297 lsl x13, srcstride, #1 // srcstridel321 lsl x13, srcstride, #1 // srcstridel
@@ -333,22 +357,40 @@ function ff_hevc_put_hevc_\type\()_h6_8_neon, export=1 · 35 unmodified lines
333 ret mx357 ret mx
334endfunc358endfunc
335 359
360.ifnc \type, qpel_bi
361function ff_vvc_put_\type\()_h8_8_neon, export=1
362 vvc_load_filter mx
363 sub src, src, #3
364 mov mx, x30
365.ifc \type, qpel
366 mov dststride, #(VVC_MAX_PB_SIZE << 1)
367 lsl x13, srcstride, #1 // srcstridel
368 mov x14, #(VVC_MAX_PB_SIZE << 2)
369.else
370 lsl x14, dststride, #1 // dststridel
371 lsl x13, srcstride, #1 // srcstridel
372.endif
373 b 1f
374endfunc
375.endif // !qpel_bi
376
336function ff_hevc_put_hevc_\type\()_h8_8_neon, export=1377function ff_hevc_put_hevc_\type\()_h8_8_neon, export=1
337 load_filter mx378 load_filter mx
338.ifc \type, qpel_bi379.ifc \type, qpel_bi
339 mov x16, #(MAX_PB_SIZE << 2) // src2bstridel380 mov x16, #(HEVC_MAX_PB_SIZE << 2) // src2bstridel
340 add x15, x4, #(MAX_PB_SIZE << 1) // src2b381 add x15, x4, #(HEVC_MAX_PB_SIZE << 1) // src2b
341.endif382.endif
342 sub src, src, #3383 sub src, src, #3
343 mov mx, x30384 mov mx, x30
344.ifc \type, qpel385.ifc \type, qpel
345 mov dststride, #(MAX_PB_SIZE << 1)386 mov dststride, #(HEVC_MAX_PB_SIZE << 1)
346 lsl x13, srcstride, #1 // srcstridel387 lsl x13, srcstride, #1 // srcstridel
347 mov x14, #(MAX_PB_SIZE << 2)388 mov x14, #(HEVC_MAX_PB_SIZE << 2)
348.else389.else
349 lsl x14, dststride, #1 // dststridel390 lsl x14, dststride, #1 // dststridel
350 lsl x13, srcstride, #1 // srcstridel391 lsl x13, srcstride, #1 // srcstridel
351.endif392.endif
3931:
352 add x10, dst, dststride // dstb394 add x10, dst, dststride // dstb
353 add x12, src, srcstride // srcb395 add x12, src, srcstride // srcb
3540: ld1 {v16.8b, v17.8b}, [src], x133960: ld1 {v16.8b, v17.8b}, [src], x13
@@ -415,16 +457,16 @@ function ff_hevc_put_hevc_\type\()_h12_8_neon, export=1 · 60 unmodified lines
415 sxtw height, heightw457 sxtw height, heightw
416.ifc \type, qpel_bi458.ifc \type, qpel_bi
417 ldrh w8, [sp] // width459 ldrh w8, [sp] // width
418 mov x16, #(MAX_PB_SIZE << 2) // src2bstridel460 mov x16, #(HEVC_MAX_PB_SIZE << 2) // src2bstridel
419 lsl x17, height, #7 // src2b reset (height * (MAX_PB_SIZE << 1))461 lsl x17, height, #7 // src2b reset (height * (HEVC_MAX_PB_SIZE << 1))
420 add x15, x4, #(MAX_PB_SIZE << 1) // src2b462 add x15, x4, #(HEVC_MAX_PB_SIZE << 1) // src2b
421.endif463.endif
422 sub src, src, #3464 sub src, src, #3
423 mov mx, x30465 mov mx, x30
424.ifc \type, qpel466.ifc \type, qpel
425 mov dststride, #(MAX_PB_SIZE << 1)467 mov dststride, #(HEVC_MAX_PB_SIZE << 1)
426 lsl x13, srcstride, #1 // srcstridel468 lsl x13, srcstride, #1 // srcstridel
427 mov x14, #((MAX_PB_SIZE << 2) - 16)469 mov x14, #((HEVC_MAX_PB_SIZE << 2) - 16)
428.else470.else
429 lsl x14, dststride, #1 // dststridel471 lsl x14, dststride, #1 // dststridel
430 lsl x13, srcstride, #1 // srcstridel472 lsl x13, srcstride, #1 // srcstridel
@@ -497,25 +539,45 @@ function ff_hevc_put_hevc_\type\()_h12_8_neon, export=1 · 66 unmodified lines
497 ret mx539 ret mx
498endfunc540endfunc
499 541
542.ifnc \type, qpel_bi
543function ff_vvc_put_\type\()_h16_8_neon, export=1
544 vvc_load_filter mx
545 sxtw height, heightw
546 mov mx, x30
547 sub src, src, #3
548 mov mx, x30
549.ifc \type, qpel
550 mov dststride, #(VVC_MAX_PB_SIZE << 1)
551 lsl x13, srcstride, #1 // srcstridel
552 mov x14, #(VVC_MAX_PB_SIZE << 2)
553.else
554 lsl x14, dststride, #1 // dststridel
555 lsl x13, srcstride, #1 // srcstridel
556.endif
557 b 0f
558endfunc
559.endif // !qpel_bi
560
500function ff_hevc_put_hevc_\type\()_h16_8_neon, export=1561function ff_hevc_put_hevc_\type\()_h16_8_neon, export=1
501 load_filter mx562 load_filter mx
502 sxtw height, heightw563 sxtw height, heightw
503 mov mx, x30564 mov mx, x30
504.ifc \type, qpel_bi565.ifc \type, qpel_bi
505 ldrh w8, [sp] // width566 ldrh w8, [sp] // width
506 mov x16, #(MAX_PB_SIZE << 2) // src2bstridel567 mov x16, #(HEVC_MAX_PB_SIZE << 2) // src2bstridel
507 add x15, x4, #(MAX_PB_SIZE << 1) // src2b568 add x15, x4, #(HEVC_MAX_PB_SIZE << 1) // src2b
508.endif569.endif
509 sub src, src, #3570 sub src, src, #3
510 mov mx, x30571 mov mx, x30
511.ifc \type, qpel572.ifc \type, qpel
512 mov dststride, #(MAX_PB_SIZE << 1)573 mov dststride, #(HEVC_MAX_PB_SIZE << 1)
513 lsl x13, srcstride, #1 // srcstridel574 lsl x13, srcstride, #1 // srcstridel
514 mov x14, #(MAX_PB_SIZE << 2)575 mov x14, #(HEVC_MAX_PB_SIZE << 2)
515.else576.else
516 lsl x14, dststride, #1 // dststridel577 lsl x14, dststride, #1 // dststridel
517 lsl x13, srcstride, #1 // srcstridel578 lsl x13, srcstride, #1 // srcstridel
518.endif579.endif
5800:
519 add x10, dst, dststride // dstb581 add x10, dst, dststride // dstb
520 add x12, src, srcstride // srcb582 add x12, src, srcstride // srcb
521 583
@@ -555,29 +617,51 @@ function ff_hevc_put_hevc_\type\()_h16_8_neon, export=1 · 33 unmodified lines
555 ret mx617 ret mx
556endfunc618endfunc
557 619
620.ifnc \type, qpel_bi
621function ff_vvc_put_\type\()_h32_8_neon, export=1
622 vvc_load_filter mx
623 sxtw height, heightw
624 mov mx, x30
625 sub src, src, #3
626 mov mx, x30
627.ifc \type, qpel
628 mov dststride, #(VVC_MAX_PB_SIZE << 1)
629 lsl x13, srcstride, #1 // srcstridel
630 mov x14, #(VVC_MAX_PB_SIZE << 2)
631 sub x14, x14, width, uxtw #1
632.else
633 lsl x14, dststride, #1 // dststridel
634 lsl x13, srcstride, #1 // srcstridel
635 sub x14, x14, width, uxtw
636.endif
637 b 1f
638endfunc
639.endif // !qpel_bi
640
558function ff_hevc_put_hevc_\type\()_h32_8_neon, export=1641function ff_hevc_put_hevc_\type\()_h32_8_neon, export=1
559 load_filter mx642 load_filter mx
560 sxtw height, heightw643 sxtw height, heightw
561 mov mx, x30644 mov mx, x30
562.ifc \type, qpel_bi645.ifc \type, qpel_bi
563 ldrh w8, [sp] // width646 ldrh w8, [sp] // width
564 mov x16, #(MAX_PB_SIZE << 2) // src2bstridel647 mov x16, #(HEVC_MAX_PB_SIZE << 2) // src2bstridel
565 lsl x17, x5, #7 // src2b reset648 lsl x17, x5, #7 // src2b reset
566 add x15, x4, #(MAX_PB_SIZE << 1) // src2b649 add x15, x4, #(HEVC_MAX_PB_SIZE << 1) // src2b
567 sub x16, x16, width, uxtw #1650 sub x16, x16, width, uxtw #1
568.endif651.endif
569 sub src, src, #3652 sub src, src, #3
570 mov mx, x30653 mov mx, x30
571.ifc \type, qpel654.ifc \type, qpel
572 mov dststride, #(MAX_PB_SIZE << 1)655 mov dststride, #(HEVC_MAX_PB_SIZE << 1)
573 lsl x13, srcstride, #1 // srcstridel656 lsl x13, srcstride, #1 // srcstridel
574 mov x14, #(MAX_PB_SIZE << 2)657 mov x14, #(HEVC_MAX_PB_SIZE << 2)
575 sub x14, x14, width, uxtw #1658 sub x14, x14, width, uxtw #1
576.else659.else
577 lsl x14, dststride, #1 // dststridel660 lsl x14, dststride, #1 // dststridel
578 lsl x13, srcstride, #1 // srcstridel661 lsl x13, srcstride, #1 // srcstridel
579 sub x14, x14, width, uxtw662 sub x14, x14, width, uxtw
580.endif663.endif
6641:
581 sub x13, x13, width, uxtw665 sub x13, x13, width, uxtw
582 sub x13, x13, #8666 sub x13, x13, #8
583 add x10, dst, dststride // dstb667 add x10, dst, dststride // dstb
@@ -651,7 +735,7 @@ put_hevc qpel_bi · 67 unmodified lines
651function ff_hevc_put_hevc_qpel_v4_8_neon, export=1735function ff_hevc_put_hevc_qpel_v4_8_neon, export=1
652 load_qpel_filterb x5, x4736 load_qpel_filterb x5, x4
653 sub x1, x1, x2, lsl #1737 sub x1, x1, x2, lsl #1
654 mov x9, #(MAX_PB_SIZE * 2)738 mov x9, #(HEVC_MAX_PB_SIZE * 2)
655 sub x1, x1, x2739 sub x1, x1, x2
656 ldr s16, [x1]740 ldr s16, [x1]
657 ldr s17, [x1, x2]741 ldr s17, [x1, x2]
@@ -680,7 +764,7 @@ endfunc · 22 unmodified lines
680function ff_hevc_put_hevc_qpel_v6_8_neon, export=1764function ff_hevc_put_hevc_qpel_v6_8_neon, export=1
681 load_qpel_filterb x5, x4765 load_qpel_filterb x5, x4
682 sub x1, x1, x2, lsl #1766 sub x1, x1, x2, lsl #1
683 mov x9, #(MAX_PB_SIZE * 2 - 8)767 mov x9, #(HEVC_MAX_PB_SIZE * 2 - 8)
684 sub x1, x1, x2768 sub x1, x1, x2
685 ldr d16, [x1]769 ldr d16, [x1]
686 ldr d17, [x1, x2]770 ldr d17, [x1, x2]
@@ -709,7 +793,7 @@ endfunc · 22 unmodified lines
709function ff_hevc_put_hevc_qpel_v8_8_neon, export=1793function ff_hevc_put_hevc_qpel_v8_8_neon, export=1
710 load_qpel_filterb x5, x4794 load_qpel_filterb x5, x4
711 sub x1, x1, x2, lsl #1795 sub x1, x1, x2, lsl #1
712 mov x9, #(MAX_PB_SIZE * 2)796 mov x9, #(HEVC_MAX_PB_SIZE * 2)
713 sub x1, x1, x2797 sub x1, x1, x2
714 ldr d16, [x1]798 ldr d16, [x1]
715 ldr d17, [x1, x2]799 ldr d17, [x1, x2]
@@ -737,7 +821,7 @@ endfunc · 21 unmodified lines
737function ff_hevc_put_hevc_qpel_v12_8_neon, export=1821function ff_hevc_put_hevc_qpel_v12_8_neon, export=1
738 load_qpel_filterb x5, x4822 load_qpel_filterb x5, x4
739 sub x1, x1, x2, lsl #1823 sub x1, x1, x2, lsl #1
740 mov x9, #(MAX_PB_SIZE * 2 - 16)824 mov x9, #(HEVC_MAX_PB_SIZE * 2 - 16)
741 sub x1, x1, x2825 sub x1, x1, x2
742 ldr q16, [x1]826 ldr q16, [x1]
743 ldr q17, [x1, x2]827 ldr q17, [x1, x2]
@@ -768,7 +852,7 @@ endfunc · 24 unmodified lines
768function ff_hevc_put_hevc_qpel_v16_8_neon, export=1852function ff_hevc_put_hevc_qpel_v16_8_neon, export=1
769 load_qpel_filterb x5, x4853 load_qpel_filterb x5, x4
770 sub x1, x1, x2, lsl #1854 sub x1, x1, x2, lsl #1
771 mov x9, #(MAX_PB_SIZE * 2)855 mov x9, #(HEVC_MAX_PB_SIZE * 2)
772 sub x1, x1, x2856 sub x1, x1, x2
773 ldr q16, [x1]857 ldr q16, [x1]
774 ldr q17, [x1, x2]858 ldr q17, [x1, x2]
@@ -802,7 +886,7 @@ function ff_hevc_put_hevc_qpel_v24_8_neon, export=1 · 27 unmodified lines
802 load_qpel_filterb x5, x4886 load_qpel_filterb x5, x4
803 sub x1, x1, x2, lsl #1887 sub x1, x1, x2, lsl #1
804 sub x1, x1, x2888 sub x1, x1, x2
805 mov x9, #(MAX_PB_SIZE * 2)889 mov x9, #(HEVC_MAX_PB_SIZE * 2)
806 ld1 {v16.16b, v17.16b}, [x1], x2890 ld1 {v16.16b, v17.16b}, [x1], x2
807 ld1 {v18.16b, v19.16b}, [x1], x2891 ld1 {v18.16b, v19.16b}, [x1], x2
808 ld1 {v20.16b, v21.16b}, [x1], x2892 ld1 {v20.16b, v21.16b}, [x1], x2
@@ -833,7 +917,7 @@ function ff_hevc_put_hevc_qpel_v32_8_neon, export=1 · 24 unmodified lines
833 st1 {v8.8b-v11.8b}, [sp]917 st1 {v8.8b-v11.8b}, [sp]
834 load_qpel_filterb x5, x4918 load_qpel_filterb x5, x4
835 sub x1, x1, x2, lsl #1919 sub x1, x1, x2, lsl #1
836 mov x9, #(MAX_PB_SIZE * 2)920 mov x9, #(HEVC_MAX_PB_SIZE * 2)
837 sub x1, x1, x2921 sub x1, x1, x2
838 ld1 {v16.16b, v17.16b}, [x1], x2922 ld1 {v16.16b, v17.16b}, [x1], x2
839 ld1 {v18.16b, v19.16b}, [x1], x2923 ld1 {v18.16b, v19.16b}, [x1], x2
@@ -883,7 +967,7 @@ function ff_hevc_put_hevc_qpel_v64_8_neon, export=1 · 43 unmodified lines
883 load_qpel_filterb x5, x4967 load_qpel_filterb x5, x4
884 sub x1, x1, x2, lsl #1968 sub x1, x1, x2, lsl #1
885 sub x1, x1, x2969 sub x1, x1, x2
886 mov x9, #(MAX_PB_SIZE * 2)970 mov x9, #(HEVC_MAX_PB_SIZE * 2)
8870: mov x8, x1 // src9710: mov x8, x1 // src
888 ld1 {v16.16b, v17.16b}, [x8], x2972 ld1 {v16.16b, v17.16b}, [x8], x2
889 mov w11, w3 // height973 mov w11, w3 // height
@@ -921,7 +1005,7 @@ function ff_hevc_put_hevc_qpel_bi_v4_8_neon, export=1 · 31 unmodified lines
921 load_qpel_filterb x7, x61005 load_qpel_filterb x7, x6
922 sub x2, x2, x3, lsl #11006 sub x2, x2, x3, lsl #1
923 sub x2, x2, x31007 sub x2, x2, x3
924 mov x12, #(MAX_PB_SIZE * 2)1008 mov x12, #(HEVC_MAX_PB_SIZE * 2)
925 ld1 {v16.s}[0], [x2], x31009 ld1 {v16.s}[0], [x2], x3
926 ld1 {v17.s}[0], [x2], x31010 ld1 {v17.s}[0], [x2], x3
927 ld1 {v18.s}[0], [x2], x31011 ld1 {v18.s}[0], [x2], x3
@@ -951,7 +1035,7 @@ function ff_hevc_put_hevc_qpel_bi_v6_8_neon, export=1 · 23 unmodified lines
951 ld1 {v16.8b}, [x2], x31035 ld1 {v16.8b}, [x2], x3
952 sub x1, x1, #41036 sub x1, x1, #4
953 ld1 {v17.8b}, [x2], x31037 ld1 {v17.8b}, [x2], x3
954 mov x12, #(MAX_PB_SIZE * 2)1038 mov x12, #(HEVC_MAX_PB_SIZE * 2)
955 ld1 {v18.8b}, [x2], x31039 ld1 {v18.8b}, [x2], x3
956 ld1 {v19.8b}, [x2], x31040 ld1 {v19.8b}, [x2], x3
957 ld1 {v20.8b}, [x2], x31041 ld1 {v20.8b}, [x2], x3
@@ -977,7 +1061,7 @@ function ff_hevc_put_hevc_qpel_bi_v8_8_neon, export=1 · 19 unmodified lines
977 load_qpel_filterb x7, x61061 load_qpel_filterb x7, x6
978 sub x2, x2, x3, lsl #11062 sub x2, x2, x3, lsl #1
979 sub x2, x2, x31063 sub x2, x2, x3
980 mov x12, #(MAX_PB_SIZE * 2)1064 mov x12, #(HEVC_MAX_PB_SIZE * 2)
981 ld1 {v16.8b}, [x2], x31065 ld1 {v16.8b}, [x2], x3
982 ld1 {v17.8b}, [x2], x31066 ld1 {v17.8b}, [x2], x3
983 ld1 {v18.8b}, [x2], x31067 ld1 {v18.8b}, [x2], x3
@@ -1006,7 +1090,7 @@ function ff_hevc_put_hevc_qpel_bi_v12_8_neon, export=1 · 22 unmodified lines
1006 sub x2, x2, x31090 sub x2, x2, x3
1007 sub x1, x1, #81091 sub x1, x1, #8
1008 ld1 {v16.16b}, [x2], x31092 ld1 {v16.16b}, [x2], x3
1009 mov x12, #(MAX_PB_SIZE * 2)1093 mov x12, #(HEVC_MAX_PB_SIZE * 2)
1010 ld1 {v17.16b}, [x2], x31094 ld1 {v17.16b}, [x2], x3
1011 ld1 {v18.16b}, [x2], x31095 ld1 {v18.16b}, [x2], x3
1012 ld1 {v19.16b}, [x2], x31096 ld1 {v19.16b}, [x2], x3
@@ -1037,7 +1121,7 @@ function ff_hevc_put_hevc_qpel_bi_v16_8_neon, export=1 · 24 unmodified lines
1037 load_qpel_filterb x7, x61121 load_qpel_filterb x7, x6
1038 sub x2, x2, x3, lsl #11122 sub x2, x2, x3, lsl #1
1039 sub x2, x2, x31123 sub x2, x2, x3
1040 mov x12, #(MAX_PB_SIZE * 2)1124 mov x12, #(HEVC_MAX_PB_SIZE * 2)
1041 ld1 {v16.16b}, [x2], x31125 ld1 {v16.16b}, [x2], x3
1042 ld1 {v17.16b}, [x2], x31126 ld1 {v17.16b}, [x2], x3
1043 ld1 {v18.16b}, [x2], x31127 ld1 {v18.16b}, [x2], x3
@@ -1092,7 +1176,7 @@ function ff_hevc_put_hevc_qpel_bi_v32_8_neon, export=1 · 48 unmodified lines
1092 sub x2, x2, x31176 sub x2, x2, x3
1093 load_qpel_filterb x7, x61177 load_qpel_filterb x7, x6
1094 ldr w6, [sp, #64]1178 ldr w6, [sp, #64]
1095 mov x12, #(MAX_PB_SIZE * 2)1179 mov x12, #(HEVC_MAX_PB_SIZE * 2)
10960: mov x8, x2 // src11800: mov x8, x2 // src
1097 ld1 {v16.16b, v17.16b}, [x8], x31181 ld1 {v16.16b, v17.16b}, [x8], x3
1098 mov w11, w5 // height1182 mov w11, w5 // height
@@ -2147,7 +2231,7 @@ function ff_hevc_put_hevc_qpel_uni_w_v64_8_neon, export=1 · 1048 unmodified lines
2147endfunc2231endfunc
2148 2232
2149function hevc_put_hevc_qpel_uni_hv4_8_end_neon2233function hevc_put_hevc_qpel_uni_hv4_8_end_neon
2150 mov x9, #(MAX_PB_SIZE * 2)2234 mov x9, #(HEVC_MAX_PB_SIZE * 2)
2151 load_qpel_filterh x6, x52235 load_qpel_filterh x6, x5
2152 ldr d16, [sp]2236 ldr d16, [sp]
2153 ldr d17, [sp, x9]2237 ldr d17, [sp, x9]
@@ -2174,7 +2258,7 @@ function hevc_put_hevc_qpel_uni_hv4_8_end_neon · 20 unmodified lines
2174endfunc2258endfunc
2175 2259
2176function hevc_put_hevc_qpel_uni_hv6_8_end_neon2260function hevc_put_hevc_qpel_uni_hv6_8_end_neon
2177 mov x9, #(MAX_PB_SIZE * 2)2261 mov x9, #(HEVC_MAX_PB_SIZE * 2)
2178 load_qpel_filterh x6, x52262 load_qpel_filterh x6, x5
2179 sub x1, x1, #42263 sub x1, x1, #4
2180 ldr q16, [sp]2264 ldr q16, [sp]
@@ -2204,7 +2288,7 @@ function hevc_put_hevc_qpel_uni_hv6_8_end_neon · 23 unmodified lines
2204endfunc2288endfunc
2205 2289
2206function hevc_put_hevc_qpel_uni_hv8_8_end_neon2290function hevc_put_hevc_qpel_uni_hv8_8_end_neon
2207 mov x9, #(MAX_PB_SIZE * 2)2291 mov x9, #(HEVC_MAX_PB_SIZE * 2)
2208 load_qpel_filterh x6, x52292 load_qpel_filterh x6, x5
2209 ldr q16, [sp]2293 ldr q16, [sp]
2210 ldr q17, [sp, x9]2294 ldr q17, [sp, x9]
@@ -2232,7 +2316,7 @@ function hevc_put_hevc_qpel_uni_hv8_8_end_neon · 21 unmodified lines
2232endfunc2316endfunc
2233 2317
2234function hevc_put_hevc_qpel_uni_hv12_8_end_neon2318function hevc_put_hevc_qpel_uni_hv12_8_end_neon
2235 mov x9, #(MAX_PB_SIZE * 2)2319 mov x9, #(HEVC_MAX_PB_SIZE * 2)
2236 load_qpel_filterh x6, x52320 load_qpel_filterh x6, x5
2237 sub x1, x1, #82321 sub x1, x1, #8
2238 ld1 {v16.8h, v17.8h}, [sp], x92322 ld1 {v16.8h, v17.8h}, [sp], x9
@@ -2260,7 +2344,7 @@ function hevc_put_hevc_qpel_uni_hv12_8_end_neon · 21 unmodified lines
2260endfunc2344endfunc
2261 2345
2262function hevc_put_hevc_qpel_uni_hv16_8_end_neon2346function hevc_put_hevc_qpel_uni_hv16_8_end_neon
2263 mov x9, #(MAX_PB_SIZE * 2)2347 mov x9, #(HEVC_MAX_PB_SIZE * 2)
2264 load_qpel_filterh x6, x52348 load_qpel_filterh x6, x5
2265 sub w12, w9, w7, lsl #12349 sub w12, w9, w7, lsl #1
22660: mov x8, sp // src23500: mov x8, sp // src
@@ -3355,7 +3439,7 @@ endfunc · 1088 unmodified lines
3355 3439
3356function ff_hevc_put_hevc_qpel_h4_8_neon_i8mm, export=13440function ff_hevc_put_hevc_qpel_h4_8_neon_i8mm, export=1
3357 QPEL_H_HEADER3441 QPEL_H_HEADER
3358 mov x10, #MAX_PB_SIZE * 23442 mov x10, #HEVC_MAX_PB_SIZE * 2
33591:34431:
3360 ld1 {v0.16b}, [x1], x23444 ld1 {v0.16b}, [x1], x2
3361 ext v1.16b, v0.16b, v0.16b, #13445 ext v1.16b, v0.16b, v0.16b, #1
@@ -3378,7 +3462,7 @@ endfunc · 16 unmodified lines
3378 3462
3379function ff_hevc_put_hevc_qpel_h6_8_neon_i8mm, export=13463function ff_hevc_put_hevc_qpel_h6_8_neon_i8mm, export=1
3380 QPEL_H_HEADER3464 QPEL_H_HEADER
3381 mov x10, #MAX_PB_SIZE * 23465 mov x10, #HEVC_MAX_PB_SIZE * 2
3382 add x15, x0, #83466 add x15, x0, #8
33831:34671:
3384 ld1 {v0.16b}, [x1], x23468 ld1 {v0.16b}, [x1], x2
@@ -3411,7 +3495,7 @@ endfunc · 26 unmodified lines
3411 3495
3412function ff_hevc_put_hevc_qpel_h8_8_neon_i8mm, export=13496function ff_hevc_put_hevc_qpel_h8_8_neon_i8mm, export=1
3413 QPEL_H_HEADER3497 QPEL_H_HEADER
3414 mov x10, #MAX_PB_SIZE * 23498 mov x10, #HEVC_MAX_PB_SIZE * 2
34151:34991:
3416 ld1 {v0.16b}, [x1], x23500 ld1 {v0.16b}, [x1], x2
3417 ext v1.16b, v0.16b, v0.16b, #13501 ext v1.16b, v0.16b, v0.16b, #1
@@ -3457,7 +3541,7 @@ endfunc · 39 unmodified lines
3457 3541
3458function ff_hevc_put_hevc_qpel_h12_8_neon_i8mm, export=13542function ff_hevc_put_hevc_qpel_h12_8_neon_i8mm, export=1
3459 QPEL_H_HEADER3543 QPEL_H_HEADER
3460 mov x10, #MAX_PB_SIZE * 23544 mov x10, #HEVC_MAX_PB_SIZE * 2
3461 add x15, x0, #163545 add x15, x0, #16
34621:35461:
3463 ld1 {v16.16b, v17.16b}, [x1], x23547 ld1 {v16.16b, v17.16b}, [x1], x2
@@ -3495,7 +3579,7 @@ endfunc · 31 unmodified lines
3495 3579
3496function ff_hevc_put_hevc_qpel_h16_8_neon_i8mm, export=13580function ff_hevc_put_hevc_qpel_h16_8_neon_i8mm, export=1
3497 QPEL_H_HEADER3581 QPEL_H_HEADER
3498 mov x10, #MAX_PB_SIZE * 23582 mov x10, #HEVC_MAX_PB_SIZE * 2
34991:35831:
3500 ld1 {v16.16b, v17.16b}, [x1], x23584 ld1 {v16.16b, v17.16b}, [x1], x2
3501 ext v1.16b, v16.16b, v17.16b, #13585 ext v1.16b, v16.16b, v17.16b, #1
@@ -3533,7 +3617,7 @@ endfunc · 31 unmodified lines
3533 3617
3534function ff_hevc_put_hevc_qpel_h24_8_neon_i8mm, export=13618function ff_hevc_put_hevc_qpel_h24_8_neon_i8mm, export=1
3535 QPEL_H_HEADER3619 QPEL_H_HEADER
3536 mov x10, #MAX_PB_SIZE * 23620 mov x10, #HEVC_MAX_PB_SIZE * 2
3537 add x15, x0, #323621 add x15, x0, #32
35381:36221:
3539 ld1 {v16.16b, v17.16b}, [x1], x23623 ld1 {v16.16b, v17.16b}, [x1], x2
@@ -3585,7 +3669,7 @@ endfunc · 45 unmodified lines
3585 3669
3586function ff_hevc_put_hevc_qpel_h32_8_neon_i8mm, export=13670function ff_hevc_put_hevc_qpel_h32_8_neon_i8mm, export=1
3587 QPEL_H_HEADER3671 QPEL_H_HEADER
3588 mov x10, #MAX_PB_SIZE * 23672 mov x10, #HEVC_MAX_PB_SIZE * 2
3589 add x15, x0, #323673 add x15, x0, #32
35901:36741:
3591 ld1 {v16.16b, v17.16b, v18.16b}, [x1], x23675 ld1 {v16.16b, v17.16b, v18.16b}, [x1], x2
@@ -3642,7 +3726,7 @@ endfunc · 50 unmodified lines
3642 3726
3643function ff_hevc_put_hevc_qpel_h48_8_neon_i8mm, export=13727function ff_hevc_put_hevc_qpel_h48_8_neon_i8mm, export=1
3644 QPEL_H_HEADER3728 QPEL_H_HEADER
3645 mov x10, #MAX_PB_SIZE * 2 - 643729 mov x10, #HEVC_MAX_PB_SIZE * 2 - 64
36461:37301:
3647 ld1 {v16.16b, v17.16b, v18.16b, v19.16b}, [x1], x23731 ld1 {v16.16b, v17.16b, v18.16b, v19.16b}, [x1], x2
3648 ext v1.16b, v16.16b, v17.16b, #13732 ext v1.16b, v16.16b, v17.16b, #1
@@ -4173,7 +4257,7 @@ DISABLE_I8MM · 524 unmodified lines
4173 stp x24, x25, [sp, #48]4257 stp x24, x25, [sp, #48]
4174 stp x26, x27, [sp, #64]4258 stp x26, x27, [sp, #64]
4175 mov x19, sp4259 mov x19, sp
4176 mov x11, #(MAX_PB_SIZE*(MAX_PB_SIZE+8)*2)4260 mov x11, #(HEVC_MAX_PB_SIZE*(HEVC_MAX_PB_SIZE+8)*2)
4177 sub sp, sp, x114261 sub sp, sp, x11
4178 mov x20, x04262 mov x20, x0
4179 mov x21, x14263 mov x21, x1
@@ -4204,7 +4288,7 @@ DISABLE_I8MM · 24 unmodified lines
4204 add x9, x9, x23, lsl #34288 add x9, x9, x23, lsl #3
4205 ld1 {v0.8b}, [x9]4289 ld1 {v0.8b}, [x9]
4206 sxtl v0.8h, v0.8b4290 sxtl v0.8h, v0.8b
4207 mov x10, #(MAX_PB_SIZE * 2)4291 mov x10, #(HEVC_MAX_PB_SIZE * 2)
4208 dup v28.4s, w244292 dup v28.4s, w24
4209 dup v29.4s, w254293 dup v29.4s, w25
4210 dup v30.4s, w264294 dup v30.4s, w26
@@ -4591,7 +4675,7 @@ endfunc · 380 unmodified lines
4591qpel_uni_w_hv neon4675qpel_uni_w_hv neon
4592 4676
4593function hevc_put_hevc_qpel_bi_hv4_8_end_neon4677function hevc_put_hevc_qpel_bi_hv4_8_end_neon
4594 mov x9, #(MAX_PB_SIZE * 2)4678 mov x9, #(HEVC_MAX_PB_SIZE * 2)
4595 load_qpel_filterh x7, x64679 load_qpel_filterh x7, x6
4596 ld1 {v16.4h}, [sp], x94680 ld1 {v16.4h}, [sp], x9
4597 ld1 {v17.4h}, [sp], x94681 ld1 {v17.4h}, [sp], x9
@@ -4617,7 +4701,7 @@ function hevc_put_hevc_qpel_bi_hv4_8_end_neon · 19 unmodified lines
4617endfunc4701endfunc
4618 4702
4619function hevc_put_hevc_qpel_bi_hv6_8_end_neon4703function hevc_put_hevc_qpel_bi_hv6_8_end_neon
4620 mov x9, #(MAX_PB_SIZE * 2)4704 mov x9, #(HEVC_MAX_PB_SIZE * 2)
4621 load_qpel_filterh x7, x64705 load_qpel_filterh x7, x6
4622 sub x1, x1, #44706 sub x1, x1, #4
4623 ld1 {v16.8h}, [sp], x94707 ld1 {v16.8h}, [sp], x9
@@ -4648,7 +4732,7 @@ function hevc_put_hevc_qpel_bi_hv6_8_end_neon · 24 unmodified lines
4648endfunc4732endfunc
4649 4733
4650function hevc_put_hevc_qpel_bi_hv8_8_end_neon4734function hevc_put_hevc_qpel_bi_hv8_8_end_neon
4651 mov x9, #(MAX_PB_SIZE * 2)4735 mov x9, #(HEVC_MAX_PB_SIZE * 2)
4652 load_qpel_filterh x7, x64736 load_qpel_filterh x7, x6
4653 ld1 {v16.8h}, [sp], x94737 ld1 {v16.8h}, [sp], x9
4654 ld1 {v17.8h}, [sp], x94738 ld1 {v17.8h}, [sp], x9
@@ -4678,7 +4762,7 @@ endfunc · 23 unmodified lines
4678 4762
4679function hevc_put_hevc_qpel_bi_hv16_8_end_neon4763function hevc_put_hevc_qpel_bi_hv16_8_end_neon
4680 load_qpel_filterh x7, x84764 load_qpel_filterh x7, x8
4681 mov x9, #(MAX_PB_SIZE * 2)4765 mov x9, #(HEVC_MAX_PB_SIZE * 2)
4682 mov x10, x64766 mov x10, x6
46830: mov x8, sp // src47670: mov x8, sp // src
4684 ld1 {v16.8h, v17.8h}, [x8], x94768 ld1 {v16.8h, v17.8h}, [x8], x9
libavcodec/aarch64/vvc/Makefile+1−0
@@ -3,4 +3,5 @@ clean:: · 2 unmodified lines
3 3
4OBJS-$(CONFIG_VVC_DECODER) += aarch64/vvc/dsp_init.o4OBJS-$(CONFIG_VVC_DECODER) += aarch64/vvc/dsp_init.o
5NEON-OBJS-$(CONFIG_VVC_DECODER) += aarch64/vvc/alf.o \5NEON-OBJS-$(CONFIG_VVC_DECODER) += aarch64/vvc/alf.o \
6 aarch64/h26x/qpel_neon.o \
6 aarch64/h26x/sao_neon.o7 aarch64/h26x/sao_neon.o
libavcodec/aarch64/vvc/dsp_init.c+14−0
@@ -46,6 +46,20 @@ void ff_vvc_dsp_init_aarch64(VVCDSPContext *const c, const int bd) · 45 unmodified lines
46 return;46 return;
47 47
48 if (bd == 8) {48 if (bd == 8) {
49 c->inter.put[0][1][0][1] = ff_vvc_put_qpel_h4_8_neon;
50 c->inter.put[0][2][0][1] = ff_vvc_put_qpel_h8_8_neon;
51 c->inter.put[0][3][0][1] = ff_vvc_put_qpel_h16_8_neon;
52 c->inter.put[0][4][0][1] =
53 c->inter.put[0][5][0][1] =
54 c->inter.put[0][6][0][1] = ff_vvc_put_qpel_h32_8_neon;
55
56 c->inter.put_uni[0][1][0][1] = ff_vvc_put_qpel_uni_h4_8_neon;
57 c->inter.put_uni[0][2][0][1] = ff_vvc_put_qpel_uni_h8_8_neon;
58 c->inter.put_uni[0][3][0][1] = ff_vvc_put_qpel_uni_h16_8_neon;
59 c->inter.put_uni[0][4][0][1] =
60 c->inter.put_uni[0][5][0][1] =
61 c->inter.put_uni[0][6][0][1] = ff_vvc_put_qpel_uni_h32_8_neon;
62
49 for (int i = 0; i < FF_ARRAY_ELEMS(c->sao.band_filter); i++)63 for (int i = 0; i < FF_ARRAY_ELEMS(c->sao.band_filter); i++)
50 c->sao.band_filter[i] = ff_h26x_sao_band_filter_8x8_8_neon;64 c->sao.band_filter[i] = ff_h26x_sao_band_filter_8x8_8_neon;
51 c->sao.edge_filter[0] = ff_vvc_sao_edge_filter_8x8_8_neon;65 c->sao.edge_filter[0] = ff_vvc_sao_edge_filter_8x8_8_neon;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t