summaryrefslogtreecommitdiff
path: root/libcamera/convert.S
blob: 5254a30430d63b7b4b9d05bb9014c5860ae93f6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
        .arch   armv7-a
        .fpu    neon
        .text

        .globl  yuyv422_to_yuv420sp
        .type   yuyv422_to_yuv420sp, STT_FUNC
        .func   yuyv422_to_yuv420sp
yuyv422_to_yuv420sp:
        push            {r4-r5,lr}
        mul             r12, r2,  r3
        add             r4,  r0,  r2,  lsl #1   @ in_1
        add             r5,  r1,  r2            @ out_1
        add             lr,  r1,  r12           @ out_uv
1:
        mov             r12, r2
2:
        vld1.8          {q0},     [r0]!
        vld1.8          {q1},     [r4]!
        vuzp.8          d0,  d1
        vuzp.8          d2,  d3
        vhadd.u8        d1,  d1,  d3
        vrev16.8        d1,  d1
        vst1.8          {d0},     [r1]!
        vst1.8          {d2},     [r5]!
        vst1.8          {d1},     [lr]!
        subs            r12, r12, #8
        bgt             2b
        add             r0,  r0,  r2,  lsl #1
        add             r4,  r4,  r2,  lsl #1
        add             r1,  r1,  r2
        add             r5,  r5,  r2
        subs            r3,  r3,  #2
        bgt             1b
        pop             {r4-r5,pc}
.endfunc