RGBA >> YUV420SP 

  • C/C++ 朴素实现版
void encodeYUV420SP_CPU(unsigned char *__restrict__ yuv420sp,
                        unsigned char *__restrict__ argb, int width, int height) {
    int frameSize = width * height;
    int yIndex = 0;
    int uvIndex = frameSize;

    for (int j = 0; j < height; j++) {
        for (int i = 0; i < width; i++) {

            uint8_t R = argb[2];
            uint8_t G = argb[1];
            uint8_t B = argb[0];
            argb += 4;

            // well known RGB to YUV algorithm
            uint8_t Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16;
            uint8_t U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128;
            uint8_t V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128;

            // NV21有一个 Y 平面和 V-U 交叉平面,每一个平面的采样值都是 2
            // 意思是每4个 Y 像素(上下左右,不是横向连续的四个)对应1个 V 和1个 U
            // 像素和其他扫描线。
            yuv420sp[yIndex++] = Y;
            if (j % 2 == 0 && i % 2 == 0) {
                yuv420sp[uvIndex++] = V;
                yuv420sp[uvIndex++] = U;
            }
        }
    }
}
  • Neon 实现版(Github上找的)
void encodeYUV420SP_NEON_Intrinsics(unsigned char *__restrict__ yuv420sp,
                                    unsigned char *__restrict__ argb, int width, int height) {
    const uint16x8_t u16_rounding = vdupq_n_u16(128);
    const int16x8_t s16_rounding = vdupq_n_s16(128); // +128, u/v 中内层的 +128
    const int8x8_t s8_rounding = vdup_n_s8(
            128); // -128,即 0x80,最高成了符号位,实际只有 7 位用来表示数字,用来处理符号位, u/v 中外层的 +128
    const uint8x16_t offset = vdupq_n_u8(16);
    const uint16x8_t mask = vdupq_n_s16(255);

//    测试
//    int16x8_t test = vaddl_s8 (s8_rounding, s8_rounding);// -256
//    int8x8_t test_0 = vdup_n_s8(127); // 正常为 127
//    int8x8_t test_1 = vadd_s8(test_0, test_0); // -2,因为计算溢出到符号位

    int frameSize = width * height;

    int yIndex = 0;
    int uvIndex = frameSize;

    int i;
    int j;
    for (j = 0; j < height; j++) {
        for (i = 0; i < width >> 4; i++) {
            // Load rgb
            uint8x16x4_t pixel_argb = vld4q_u8(argb);
            argb += 4 * 16;

            uint8x8x2_t uint8_r;
            uint8x8x2_t uint8_g;
            uint8x8x2_t uint8_b;
            uint8_r.val[0] = vget_low_u8(pixel_argb.val[2]);
            uint8_r.val[1] = vget_high_u8(pixel_argb.val[2]);
            uint8_g.val[0] = vget_low_u8(pixel_argb.val[1]);
            uint8_g.val[1] = vget_high_u8(pixel_argb.val[1]);
            uint8_b.val[0] = vget_low_u8(pixel_argb.val[0]);
            uint8_b.val[1] = vget_high_u8(pixel_argb.val[0]);

            // Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16;
            uint16x8x2_t uint16_y;

            uint8x8_t scalar = vdup_n_u8(66);
            uint8x16_t y;

            uint16_y.val[0] = vmull_u8(uint8_r.val[0], scalar);
            uint16_y.val[1] = vmull_u8(uint8_r.val[1], scalar);
            scalar = vdup_n_u8(129);
            uint16_y.val[0] = vmlal_u8(uint16_y.val[0], uint8_g.val[0], scalar);
            uint16_y.val[1] = vmlal_u8(uint16_y.val[1], uint8_g.val[1], scalar);
            scalar = vdup_n_u8(25);
            uint16_y.val[0] = vmlal_u8(uint16_y.val[0], uint8_b.val[0], scalar);
            uint16_y.val[1] = vmlal_u8(uint16_y.val[1], uint8_b.val[1], scalar);

            uint16_y.val[0] = vaddq_u16(uint16_y.val[0], u16_rounding);
            uint16_y.val[1] = vaddq_u16(uint16_y.val[1], u16_rounding);

            y = vcombine_u8(vqshrn_n_u16(uint16_y.val[0], 8), vqshrn_n_u16(uint16_y.val[1], 8));
            y = vaddq_u8(y, offset);

            vst1q_u8(yuv420sp + yIndex, y);
            yIndex += 16;

            // 在偶数行中计算 U 和 V
            if (j % 2 == 0) {

//                uint8_t U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128;
//                uint8_t V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128;

                int16x8_t u_scalar = vdupq_n_s16(-38);
                int16x8_t v_scalar = vdupq_n_s16(112);

#if 1
                // 因为 u,v 的值只有 y 的一半,所以只取高位计算
                int16x8_t r = vreinterpretq_s16_u16(
                        vandq_u16(vreinterpretq_u16_u8(pixel_argb.val[2]), mask));

//                 测试
//                uint16x8_t test_0 = vreinterpretq_u16_u8(pixel_argb.val[2]);
//                uint16x8_t test_1 = vandq_u16(test_0, mask);
//                int16x8_t  test_2 = vreinterpretq_s16_u16(test_1);

                int16x8_t g = vreinterpretq_s16_u16(
                        vandq_u16(vreinterpretq_u16_u8(pixel_argb.val[1]), mask));
                int16x8_t b = vreinterpretq_s16_u16(
                        vandq_u16(vreinterpretq_u16_u8(pixel_argb.val[0]), mask));
#else // 两者效果是一样的,但是没第一种快
                int16x8_t r = vreinterpretq_s16_u16(vmovl_u8(
                        vqshrn_n_u16(vshlq_n_u16(vreinterpretq_u16_u8(pixel_argb.val[2]), 8), 8)));
                int16x8_t g = vreinterpretq_s16_u16(vmovl_u8(
                        vqshrn_n_u16(vshlq_n_u16(vreinterpretq_u16_u8(pixel_argb.val[1]), 8), 8)));
                int16x8_t b = vreinterpretq_s16_u16(vmovl_u8(
                        vqshrn_n_u16(vshlq_n_u16(vreinterpretq_u16_u8(pixel_argb.val[0]), 8), 8)));

                // vshlq_n_u16,结果是 uint16x8_t
                // vqshrn_n_u16,结果是 uint8x8_t
                // vmovl_u8,结果是 uint16x8_t
#endif
                int16x8_t u;
                int16x8_t v;
                uint8x8x2_t uv;

                u = vmulq_s16(r, u_scalar);
                v = vmulq_s16(r, v_scalar);

                u_scalar = vdupq_n_s16(-74);
                v_scalar = vdupq_n_s16(-94);
                u = vmlaq_s16(u, g, u_scalar);
                v = vmlaq_s16(v, g, v_scalar);

                u_scalar = vdupq_n_s16(112);
                v_scalar = vdupq_n_s16(-18);
                u = vmlaq_s16(u, b, u_scalar);
                v = vmlaq_s16(v, b, v_scalar);

                u = vaddq_s16(u, s16_rounding);
                v = vaddq_s16(v, s16_rounding);

                uv.val[1] = vreinterpret_u8_s8(vadd_s8(vqshrn_n_s16(u, 8), s8_rounding));
//                 测试
//                int8x8_t test_3 = vqshrn_n_s16(u, 8);
//                int8x8_t test_4 = vadd_s8(test_3, s8_rounding); //
//                uint8x8_t test_5 = vreinterpret_u8_s8(test_4);

                uv.val[0] = vreinterpret_u8_s8(vadd_s8(vqshrn_n_s16(v, 8), s8_rounding));

                vst2_u8(yuv420sp + uvIndex, uv);

                uvIndex += 2 * 8;
            }
        }

        // 处理余数的好办法
        for (i = ((width >> 4) << 4); i < width; i++) {
            uint8_t R = argb[2];
            uint8_t G = argb[1];
            uint8_t B = argb[0];
            argb += 4;

            // well known RGB to YUV algorithm
            uint8_t Y = ((66 * R + 129 * G + 25 * B + 128) >> 8) + 16;
            uint8_t U = ((-38 * R - 74 * G + 112 * B + 128) >> 8) + 128;
            uint8_t V = ((112 * R - 94 * G - 18 * B + 128) >> 8) + 128;

            // NV21有一个 Y 平面和 V-U 交叉平面,每一个平面的采样值都是 2
            // 意思是每4个 Y 像素(上下左右,不是横向连续的四个)对应1个 V 和1个 U
            // 像素和其他扫描线。
            yuv420sp[yIndex++] = Y;
            if (j % 2 == 0 && i % 2 == 0) {
                yuv420sp[uvIndex++] = V;
                yuv420sp[uvIndex++] = U;
            }
        }
    }
}

通过 objdump 生成 so 库的反汇编

 命令行如下:

>J:\Programs\Android\sdk\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-objdump.exe -d libnative-lib.so > objdump_d.txt

 

一.   arm-linux-objdump

常用来显示二进制文件信息,常用来查看反汇编代码

二.   常用选项:

1.-b bfdname 指定目标码格式

2.—disassemble或者-d 反汇编可执行段

3.—dissassemble-all或者-D 反汇编所有段

4.-EB,-EL指定字节序

5.—file-headers或者-f 显示文件的整体头部摘要信息

6.—section-headers,--headers或者-h 显示目标文件中各个段的头部摘要信息

7.—info 或者-I 显示支持的目标文件格式和CPU架构

8.—section=name或者-j name显示指定section 的信息

9.—architecture=machine或者-m machine 指定反汇编目标文件时使用的架构

 

三.   示例

Arm-linux-objdump –D elf_file > dis_file 或者

Arm-linux-objdump –D –b binary –m arm bin_file > dis_file

  •  C/C++  实现版:
000410dc <_Z18encodeYUV420SP_CPUPhS_ii>:
   410dc:	b5b0      	push	{r4, r5, r7, lr}
   410de:	af02      	add	r7, sp, #8
   410e0:	b08f      	sub	sp, #60	; 0x3c
   410e2:	469c      	mov	ip, r3
   410e4:	4696      	mov	lr, r2
   410e6:	460c      	mov	r4, r1
   410e8:	4605      	mov	r5, r0
   410ea:	900e      	str	r0, [sp, #56]	; 0x38
   410ec:	910d      	str	r1, [sp, #52]	; 0x34
   410ee:	920c      	str	r2, [sp, #48]	; 0x30
   410f0:	930b      	str	r3, [sp, #44]	; 0x2c
   410f2:	980c      	ldr	r0, [sp, #48]	; 0x30
   410f4:	990b      	ldr	r1, [sp, #44]	; 0x2c
   410f6:	4348      	muls	r0, r1
   410f8:	900a      	str	r0, [sp, #40]	; 0x28
   410fa:	2000      	movs	r0, #0
   410fc:	9009      	str	r0, [sp, #36]	; 0x24
   410fe:	990a      	ldr	r1, [sp, #40]	; 0x28
   41100:	9108      	str	r1, [sp, #32]
   41102:	9007      	str	r0, [sp, #28]
   41104:	f8cd c00c 	str.w	ip, [sp, #12]
   41108:	f8cd e008 	str.w	lr, [sp, #8]
   4110c:	9401      	str	r4, [sp, #4]
   4110e:	9500      	str	r5, [sp, #0]
   41110:	e7ff      	b.n	41112 <_Z18encodeYUV420SP_CPUPhS_ii+0x36>
   41112:	9807      	ldr	r0, [sp, #28]
   41114:	990b      	ldr	r1, [sp, #44]	; 0x2c
   41116:	4288      	cmp	r0, r1
   41118:	f280 808c 	bge.w	41234 <_Z18encodeYUV420SP_CPUPhS_ii+0x158>
   4111c:	e7ff      	b.n	4111e <_Z18encodeYUV420SP_CPUPhS_ii+0x42>
   4111e:	2000      	movs	r0, #0
   41120:	9006      	str	r0, [sp, #24]
   41122:	e7ff      	b.n	41124 <_Z18encodeYUV420SP_CPUPhS_ii+0x48>
   41124:	9806      	ldr	r0, [sp, #24]
   41126:	990c      	ldr	r1, [sp, #48]	; 0x30
   41128:	4288      	cmp	r0, r1
   4112a:	da7e      	bge.n	4122a <_Z18encodeYUV420SP_CPUPhS_ii+0x14e>
   4112c:	e7ff      	b.n	4112e <_Z18encodeYUV420SP_CPUPhS_ii+0x52>
   4112e:	980d      	ldr	r0, [sp, #52]	; 0x34
   41130:	7880      	ldrb	r0, [r0, #2]
   41132:	f807 0c2d 	strb.w	r0, [r7, #-45]
   41136:	980d      	ldr	r0, [sp, #52]	; 0x34
   41138:	7840      	ldrb	r0, [r0, #1]
   4113a:	f807 0c2e 	strb.w	r0, [r7, #-46]
   4113e:	980d      	ldr	r0, [sp, #52]	; 0x34
   41140:	7800      	ldrb	r0, [r0, #0]
   41142:	f807 0c2f 	strb.w	r0, [r7, #-47]
   41146:	980d      	ldr	r0, [sp, #52]	; 0x34
   41148:	3004      	adds	r0, #4
   4114a:	900d      	str	r0, [sp, #52]	; 0x34
   4114c:	f817 0c2d 	ldrb.w	r0, [r7, #-45]
   41150:	eb00 1040 	add.w	r0, r0, r0, lsl #5
   41154:	f817 1c2e 	ldrb.w	r1, [r7, #-46]
   41158:	eb01 11c1 	add.w	r1, r1, r1, lsl #7
   4115c:	eb01 0040 	add.w	r0, r1, r0, lsl #1
   41160:	f817 1c2f 	ldrb.w	r1, [r7, #-47]
   41164:	2219      	movs	r2, #25
   41166:	fb11 0002 	smlabb	r0, r1, r2, r0
   4116a:	3080      	adds	r0, #128	; 0x80
   4116c:	2110      	movs	r1, #16
   4116e:	eb01 2010 	add.w	r0, r1, r0, lsr #8
   41172:	f88d 0014 	strb.w	r0, [sp, #20]
   41176:	f817 0c2d 	ldrb.w	r0, [r7, #-45]
   4117a:	f06f 0125 	mvn.w	r1, #37	; 0x25
   4117e:	fb10 f001 	smulbb	r0, r0, r1
   41182:	f817 1c2e 	ldrb.w	r1, [r7, #-46]
   41186:	224a      	movs	r2, #74	; 0x4a
   41188:	fb01 0012 	mls	r0, r1, r2, r0
   4118c:	f817 1c2f 	ldrb.w	r1, [r7, #-47]
   41190:	ebc1 01c1 	rsb	r1, r1, r1, lsl #3
   41194:	eb00 1001 	add.w	r0, r0, r1, lsl #4
   41198:	3080      	adds	r0, #128	; 0x80
   4119a:	2180      	movs	r1, #128	; 0x80
   4119c:	eb01 2010 	add.w	r0, r1, r0, lsr #8
   411a0:	f807 0c31 	strb.w	r0, [r7, #-49]
   411a4:	f817 0c2d 	ldrb.w	r0, [r7, #-45]
   411a8:	ebc0 00c0 	rsb	r0, r0, r0, lsl #3
   411ac:	f817 2c2e 	ldrb.w	r2, [r7, #-46]
   411b0:	235e      	movs	r3, #94	; 0x5e
   411b2:	fb12 f203 	smulbb	r2, r2, r3
   411b6:	ebc2 1000 	rsb	r0, r2, r0, lsl #4
   411ba:	f817 2c2f 	ldrb.w	r2, [r7, #-47]
   411be:	eb02 02c2 	add.w	r2, r2, r2, lsl #3
   411c2:	eba0 0042 	sub.w	r0, r0, r2, lsl #1
   411c6:	3080      	adds	r0, #128	; 0x80
   411c8:	eb01 2010 	add.w	r0, r1, r0, lsr #8
   411cc:	f807 0c32 	strb.w	r0, [r7, #-50]
   411d0:	f89d 0014 	ldrb.w	r0, [sp, #20]
   411d4:	990e      	ldr	r1, [sp, #56]	; 0x38
   411d6:	9a09      	ldr	r2, [sp, #36]	; 0x24
   411d8:	1c53      	adds	r3, r2, #1
   411da:	9309      	str	r3, [sp, #36]	; 0x24
   411dc:	5488      	strb	r0, [r1, r2]
   411de:	9807      	ldr	r0, [sp, #28]
   411e0:	eb00 71d0 	add.w	r1, r0, r0, lsr #31
   411e4:	f021 0101 	bic.w	r1, r1, #1
   411e8:	1a40      	subs	r0, r0, r1
   411ea:	2800      	cmp	r0, #0
   411ec:	d118      	bne.n	41220 <_Z18encodeYUV420SP_CPUPhS_ii+0x144>
   411ee:	e7ff      	b.n	411f0 <_Z18encodeYUV420SP_CPUPhS_ii+0x114>
   411f0:	9806      	ldr	r0, [sp, #24]
   411f2:	eb00 71d0 	add.w	r1, r0, r0, lsr #31
   411f6:	f021 0101 	bic.w	r1, r1, #1
   411fa:	1a40      	subs	r0, r0, r1
   411fc:	2800      	cmp	r0, #0
   411fe:	d10f      	bne.n	41220 <_Z18encodeYUV420SP_CPUPhS_ii+0x144>
   41200:	e7ff      	b.n	41202 <_Z18encodeYUV420SP_CPUPhS_ii+0x126>
   41202:	f817 0c32 	ldrb.w	r0, [r7, #-50]
   41206:	990e      	ldr	r1, [sp, #56]	; 0x38
   41208:	9a08      	ldr	r2, [sp, #32]
   4120a:	1c53      	adds	r3, r2, #1
   4120c:	9308      	str	r3, [sp, #32]
   4120e:	5488      	strb	r0, [r1, r2]
   41210:	f817 0c31 	ldrb.w	r0, [r7, #-49]
   41214:	990e      	ldr	r1, [sp, #56]	; 0x38
   41216:	9a08      	ldr	r2, [sp, #32]
   41218:	1c53      	adds	r3, r2, #1
   4121a:	9308      	str	r3, [sp, #32]
   4121c:	5488      	strb	r0, [r1, r2]
   4121e:	e7ff      	b.n	41220 <_Z18encodeYUV420SP_CPUPhS_ii+0x144>
   41220:	e7ff      	b.n	41222 <_Z18encodeYUV420SP_CPUPhS_ii+0x146>
   41222:	9806      	ldr	r0, [sp, #24]
   41224:	3001      	adds	r0, #1
   41226:	9006      	str	r0, [sp, #24]
   41228:	e77c      	b.n	41124 <_Z18encodeYUV420SP_CPUPhS_ii+0x48>
   4122a:	e7ff      	b.n	4122c <_Z18encodeYUV420SP_CPUPhS_ii+0x150>
   4122c:	9807      	ldr	r0, [sp, #28]
   4122e:	3001      	adds	r0, #1
   41230:	9007      	str	r0, [sp, #28]
   41232:	e76e      	b.n	41112 <_Z18encodeYUV420SP_CPUPhS_ii+0x36>
   41234:	b00f      	add	sp, #60	; 0x3c
   41236:	bdb0      	pop	{r4, r5, r7, pc}
  • Neon 实现版:
00041238 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii>:
   41238:	b5f0      	push	{r4, r5, r6, r7, lr}
   4123a:	af03      	add	r7, sp, #12
   4123c:	e92d 0b00 	stmdb	sp!, {r8, r9, fp}
   41240:	f5ad 6d35 	sub.w	sp, sp, #2896	; 0xb50
   41244:	466c      	mov	r4, sp
   41246:	f36f 0403 	bfc	r4, #0, #4
   4124a:	46a5      	mov	sp, r4
   4124c:	f50d 6cd6 	add.w	ip, sp, #1712	; 0x6b0
   41250:	f10d 0e30 	add.w	lr, sp, #48	; 0x30
   41254:	461c      	mov	r4, r3
   41256:	4615      	mov	r5, r2
   41258:	460e      	mov	r6, r1
   4125a:	4680      	mov	r8, r0
   4125c:	f8df 9c0c 	ldr.w	r9, [pc, #3084]	; 41e6c <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc34>
   41260:	44f9      	add	r9, pc
   41262:	f8d9 9000 	ldr.w	r9, [r9]
   41266:	f8d9 9000 	ldr.w	r9, [r9]
   4126a:	f8cd 9024 	str.w	r9, [sp, #36]	; 0x24
   4126e:	906f      	str	r0, [sp, #444]	; 0x1bc
   41270:	916e      	str	r1, [sp, #440]	; 0x1b8
   41272:	926d      	str	r2, [sp, #436]	; 0x1b4
   41274:	936c      	str	r3, [sp, #432]	; 0x1b0
   41276:	2080      	movs	r0, #128	; 0x80
   41278:	f8ad 01ee 	strh.w	r0, [sp, #494]	; 0x1ee
   4127c:	f50d 71f7 	add.w	r1, sp, #494	; 0x1ee
   41280:	f9e1 0c7f 	vld1.16	{d16[]-d17[]}, [r1 :16]
   41284:	a970      	add	r1, sp, #448	; 0x1c0
   41286:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   4128a:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   4128e:	a974      	add	r1, sp, #464	; 0x1d0
   41290:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41294:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41298:	a968      	add	r1, sp, #416	; 0x1a0
   4129a:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   4129e:	f8ad 0a4e 	strh.w	r0, [sp, #2638]	; 0xa4e
   412a2:	f60d 214e 	addw	r1, sp, #2638	; 0xa4e
   412a6:	f9e1 0c7f 	vld1.16	{d16[]-d17[]}, [r1 :16]
   412aa:	f50d 6122 	add.w	r1, sp, #2592	; 0xa20
   412ae:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   412b2:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   412b6:	f50d 6123 	add.w	r1, sp, #2608	; 0xa30
   412ba:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   412be:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   412c2:	a964      	add	r1, sp, #400	; 0x190
   412c4:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   412c8:	f88d 0a1f 	strb.w	r0, [sp, #2591]	; 0xa1f
   412cc:	f60d 201f 	addw	r0, sp, #2591	; 0xa1f
   412d0:	f9e0 2c0f 	vld1.8	{d18[]}, [r0]
   412d4:	edcc 2bd6 	vstr	d18, [ip, #856]	; 0x358
   412d8:	eddc 2bd6 	vldr	d18, [ip, #856]	; 0x358
   412dc:	edcc 2bd8 	vstr	d18, [ip, #864]	; 0x360
   412e0:	eddc 2bd8 	vldr	d18, [ip, #864]	; 0x360
   412e4:	edce 2b56 	vstr	d18, [lr, #344]	; 0x158
   412e8:	2010      	movs	r0, #16
   412ea:	f88d 0a07 	strb.w	r0, [sp, #2567]	; 0xa07
   412ee:	f60d 2007 	addw	r0, sp, #2567	; 0xa07
   412f2:	f9e0 0c2f 	vld1.8	{d16[]-d17[]}, [r0]
   412f6:	f50d 601e 	add.w	r0, sp, #2528	; 0x9e0
   412fa:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   412fe:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41302:	f50d 601f 	add.w	r0, sp, #2544	; 0x9f0
   41306:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   4130a:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   4130e:	a85c      	add	r0, sp, #368	; 0x170
   41310:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41314:	20ff      	movs	r0, #255	; 0xff
   41316:	f8ad 09de 	strh.w	r0, [sp, #2526]	; 0x9de
   4131a:	f60d 10de 	addw	r0, sp, #2526	; 0x9de
   4131e:	f9e0 0c7f 	vld1.16	{d16[]-d17[]}, [r0 :16]
   41322:	f50d 601b 	add.w	r0, sp, #2480	; 0x9b0
   41326:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   4132a:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   4132e:	f50d 601c 	add.w	r0, sp, #2496	; 0x9c0
   41332:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41336:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   4133a:	a858      	add	r0, sp, #352	; 0x160
   4133c:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41340:	986d      	ldr	r0, [sp, #436]	; 0x1b4
   41342:	996c      	ldr	r1, [sp, #432]	; 0x1b0
   41344:	4348      	muls	r0, r1
   41346:	9057      	str	r0, [sp, #348]	; 0x15c
   41348:	2000      	movs	r0, #0
   4134a:	9056      	str	r0, [sp, #344]	; 0x158
   4134c:	9957      	ldr	r1, [sp, #348]	; 0x15c
   4134e:	9155      	str	r1, [sp, #340]	; 0x154
   41350:	9053      	str	r0, [sp, #332]	; 0x14c
   41352:	f8cd c020 	str.w	ip, [sp, #32]
   41356:	f8cd e01c 	str.w	lr, [sp, #28]
   4135a:	9406      	str	r4, [sp, #24]
   4135c:	9505      	str	r5, [sp, #20]
   4135e:	9604      	str	r6, [sp, #16]
   41360:	f8cd 800c 	str.w	r8, [sp, #12]
   41364:	e7ff      	b.n	41366 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x12e>
   41366:	9853      	ldr	r0, [sp, #332]	; 0x14c
   41368:	996c      	ldr	r1, [sp, #432]	; 0x1b0
   4136a:	4288      	cmp	r0, r1
   4136c:	f280 856d 	bge.w	41e4a <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc12>
   41370:	e7ff      	b.n	41372 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x13a>
   41372:	2000      	movs	r0, #0
   41374:	9054      	str	r0, [sp, #336]	; 0x150
   41376:	e7ff      	b.n	41378 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x140>
   41378:	9854      	ldr	r0, [sp, #336]	; 0x150
   4137a:	996d      	ldr	r1, [sp, #436]	; 0x1b4
   4137c:	ebb0 1f21 	cmp.w	r0, r1, asr #4
   41380:	f280 84d5 	bge.w	41d2e <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xaf6>
   41384:	e7ff      	b.n	41386 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x14e>
   41386:	986e      	ldr	r0, [sp, #440]	; 0x1b8
   41388:	f960 010d 	vld4.8	{d16,d18,d20,d22}, [r0]!
   4138c:	f960 110f 	vld4.8	{d17,d19,d21,d23}, [r0]
   41390:	ef66 81f6 	vorr	q12, q11, q11
   41394:	ef62 a1f2 	vorr	q13, q9, q9
   41398:	ef64 c1f4 	vorr	q14, q10, q10
   4139c:	ef60 e1f0 	vorr	q15, q8, q8
   413a0:	f50d 602c 	add.w	r0, sp, #2752	; 0xac0
   413a4:	f940 eacf 	vst1.64	{d30-d31}, [r0]
   413a8:	f100 0120 	add.w	r1, r0, #32
   413ac:	f941 cacf 	vst1.64	{d28-d29}, [r1]
   413b0:	4602      	mov	r2, r0
   413b2:	f962 caed 	vld1.64	{d28-d29}, [r2 :128]!
   413b6:	f942 aacf 	vst1.64	{d26-d27}, [r2]
   413ba:	3030      	adds	r0, #48	; 0x30
   413bc:	f940 8acf 	vst1.64	{d24-d25}, [r0]
   413c0:	f50d 6330 	add.w	r3, sp, #2816	; 0xb00
   413c4:	f103 0c20 	add.w	ip, r3, #32
   413c8:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   413cc:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   413d0:	4619      	mov	r1, r3
   413d2:	f941 caed 	vst1.64	{d28-d29}, [r1 :128]!
   413d6:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   413da:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   413de:	f103 0230 	add.w	r2, r3, #48	; 0x30
   413e2:	f960 8aef 	vld1.64	{d24-d25}, [r0 :128]
   413e6:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   413ea:	986e      	ldr	r0, [sp, #440]	; 0x1b8
   413ec:	3040      	adds	r0, #64	; 0x40
   413ee:	906e      	str	r0, [sp, #440]	; 0x1b8
   413f0:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   413f4:	f50d 601a 	add.w	r0, sp, #2464	; 0x9a0
   413f8:	f940 8aef 	vst1.64	{d24-d25}, [r0 :128]
   413fc:	f960 8aef 	vld1.64	{d24-d25}, [r0 :128]
   41400:	eeb0 0b68 	vmov.f64	d0, d24
   41404:	9808      	ldr	r0, [sp, #32]
   41406:	ed80 0bba 	vstr	d0, [r0, #744]	; 0x2e8
   4140a:	ed90 0bba 	vldr	d0, [r0, #744]	; 0x2e8
   4140e:	f50d 622b 	add.w	r2, sp, #2736	; 0xab0
   41412:	f902 071d 	vst1.8	{d0}, [r2 :64]!
   41416:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   4141a:	f50d 6c18 	add.w	ip, sp, #2432	; 0x980
   4141e:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   41422:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   41426:	eeb0 0b69 	vmov.f64	d0, d25
   4142a:	ed80 0bb2 	vstr	d0, [r0, #712]	; 0x2c8
   4142e:	ed90 0bb2 	vldr	d0, [r0, #712]	; 0x2c8
   41432:	ed82 0b00 	vstr	d0, [r2]
   41436:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4143a:	f50d 6c16 	add.w	ip, sp, #2400	; 0x960
   4143e:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   41442:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   41446:	eeb0 0b68 	vmov.f64	d0, d24
   4144a:	ed80 0baa 	vstr	d0, [r0, #680]	; 0x2a8
   4144e:	ed90 0baa 	vldr	d0, [r0, #680]	; 0x2a8
   41452:	f50d 6c2a 	add.w	ip, sp, #2720	; 0xaa0
   41456:	f90c 071d 	vst1.8	{d0}, [ip :64]!
   4145a:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4145e:	f50d 6114 	add.w	r1, sp, #2368	; 0x940
   41462:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   41466:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4146a:	eeb0 0b69 	vmov.f64	d0, d25
   4146e:	ed80 0ba2 	vstr	d0, [r0, #648]	; 0x288
   41472:	ed90 0ba2 	vldr	d0, [r0, #648]	; 0x288
   41476:	ed8c 0b00 	vstr	d0, [ip]
   4147a:	f963 8aef 	vld1.64	{d24-d25}, [r3 :128]
   4147e:	f50d 6112 	add.w	r1, sp, #2336	; 0x920
   41482:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   41486:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4148a:	eeb0 0b68 	vmov.f64	d0, d24
   4148e:	ed80 0b9a 	vstr	d0, [r0, #616]	; 0x268
   41492:	ed90 0b9a 	vldr	d0, [r0, #616]	; 0x268
   41496:	f50d 6129 	add.w	r1, sp, #2704	; 0xa90
   4149a:	f901 071d 	vst1.8	{d0}, [r1 :64]!
   4149e:	f963 8aef 	vld1.64	{d24-d25}, [r3 :128]
   414a2:	f50d 6310 	add.w	r3, sp, #2304	; 0x900
   414a6:	f943 8aef 	vst1.64	{d24-d25}, [r3 :128]
   414aa:	f963 8aef 	vld1.64	{d24-d25}, [r3 :128]
   414ae:	eeb0 0b69 	vmov.f64	d0, d25
   414b2:	ed80 0b92 	vstr	d0, [r0, #584]	; 0x248
   414b6:	ed90 0b92 	vldr	d0, [r0, #584]	; 0x248
   414ba:	ed81 0b00 	vstr	d0, [r1]
   414be:	2342      	movs	r3, #66	; 0x42
   414c0:	f88d 38f7 	strb.w	r3, [sp, #2295]	; 0x8f7
   414c4:	f60d 03f7 	addw	r3, sp, #2295	; 0x8f7
   414c8:	f9a3 0c0f 	vld1.8	{d0[]}, [r3]
   414cc:	ed80 0b8c 	vstr	d0, [r0, #560]	; 0x230
   414d0:	ed90 0b8c 	vldr	d0, [r0, #560]	; 0x230
   414d4:	ed80 0b8e 	vstr	d0, [r0, #568]	; 0x238
   414d8:	ed90 0b8e 	vldr	d0, [r0, #568]	; 0x238
   414dc:	9b07      	ldr	r3, [sp, #28]
   414de:	ed83 0b44 	vstr	d0, [r3, #272]	; 0x110
   414e2:	f50d 6400 	add.w	r4, sp, #2048	; 0x800
   414e6:	ed94 0bac 	vldr	d0, [r4, #688]	; 0x2b0
   414ea:	ed93 1b44 	vldr	d1, [r3, #272]	; 0x110
   414ee:	ed80 0b8a 	vstr	d0, [r0, #552]	; 0x228
   414f2:	ed80 1b88 	vstr	d1, [r0, #544]	; 0x220
   414f6:	ed90 0b8a 	vldr	d0, [r0, #552]	; 0x228
   414fa:	ed90 1b88 	vldr	d1, [r0, #544]	; 0x220
   414fe:	ffc0 8c01 	vmull.u8	q12, d0, d1
   41502:	f50d 6e0c 	add.w	lr, sp, #2240	; 0x8c0
   41506:	f94e 8aef 	vst1.64	{d24-d25}, [lr :128]
   4150a:	f96e 8aef 	vld1.64	{d24-d25}, [lr :128]
   4150e:	f50d 6e27 	add.w	lr, sp, #2672	; 0xa70
   41512:	f94e 8aef 	vst1.64	{d24-d25}, [lr :128]
   41516:	ed92 0b00 	vldr	d0, [r2]
   4151a:	ed93 1b44 	vldr	d1, [r3, #272]	; 0x110
   4151e:	ed80 0b82 	vstr	d0, [r0, #520]	; 0x208
   41522:	ed80 1b80 	vstr	d1, [r0, #512]	; 0x200
   41526:	ed90 0b82 	vldr	d0, [r0, #520]	; 0x208
   4152a:	ed90 1b80 	vldr	d1, [r0, #512]	; 0x200
   4152e:	ffc0 8c01 	vmull.u8	q12, d0, d1
   41532:	f50d 620a 	add.w	r2, sp, #2208	; 0x8a0
   41536:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   4153a:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   4153e:	2281      	movs	r2, #129	; 0x81
   41540:	f88d 289f 	strb.w	r2, [sp, #2207]	; 0x89f
   41544:	f60d 029f 	addw	r2, sp, #2207	; 0x89f
   41548:	f9a2 0c0f 	vld1.8	{d0[]}, [r2]
   4154c:	ed80 0b76 	vstr	d0, [r0, #472]	; 0x1d8
   41550:	ed90 0b76 	vldr	d0, [r0, #472]	; 0x1d8
   41554:	ed80 0b78 	vstr	d0, [r0, #480]	; 0x1e0
   41558:	ed90 0b78 	vldr	d0, [r0, #480]	; 0x1e0
   4155c:	ed83 0b44 	vstr	d0, [r3, #272]	; 0x110
   41560:	4672      	mov	r2, lr
   41562:	f962 aa6d 	vld1.16	{d26-d27}, [r2 :128]!
   41566:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   4156a:	ed90 0bfc 	vldr	d0, [r0, #1008]	; 0x3f0
   4156e:	ed93 1b44 	vldr	d1, [r3, #272]	; 0x110
   41572:	f50d 6405 	add.w	r4, sp, #2128	; 0x850
   41576:	f944 aaef 	vst1.64	{d26-d27}, [r4 :128]
   4157a:	ed80 0b66 	vstr	d0, [r0, #408]	; 0x198
   4157e:	ed80 1b64 	vstr	d1, [r0, #400]	; 0x190
   41582:	f964 8aef 	vld1.64	{d24-d25}, [r4 :128]
   41586:	ed90 0b66 	vldr	d0, [r0, #408]	; 0x198
   4158a:	ed90 1b64 	vldr	d1, [r0, #400]	; 0x190
   4158e:	ed80 0b74 	vstr	d0, [r0, #464]	; 0x1d0
   41592:	ed80 1b72 	vstr	d1, [r0, #456]	; 0x1c8
   41596:	ed90 0b74 	vldr	d0, [r0, #464]	; 0x1d0
   4159a:	ed90 1b72 	vldr	d1, [r0, #456]	; 0x1c8
   4159e:	ffc0 ac01 	vmull.u8	q13, d0, d1
   415a2:	f50d 6406 	add.w	r4, sp, #2144	; 0x860
   415a6:	f944 aaef 	vst1.64	{d26-d27}, [r4 :128]
   415aa:	f964 aaef 	vld1.64	{d26-d27}, [r4 :128]
   415ae:	ef58 88ea 	vadd.i16	q12, q12, q13
   415b2:	f50d 6403 	add.w	r4, sp, #2096	; 0x830
   415b6:	f944 8aef 	vst1.64	{d24-d25}, [r4 :128]
   415ba:	f964 8aef 	vld1.64	{d24-d25}, [r4 :128]
   415be:	f94e 8aef 	vst1.64	{d24-d25}, [lr :128]
   415c2:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   415c6:	ed9c 0b00 	vldr	d0, [ip]
   415ca:	ed93 1b44 	vldr	d1, [r3, #272]	; 0x110
   415ce:	f50d 6c00 	add.w	ip, sp, #2048	; 0x800
   415d2:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   415d6:	ed80 0b52 	vstr	d0, [r0, #328]	; 0x148
   415da:	ed80 1b50 	vstr	d1, [r0, #320]	; 0x140
   415de:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   415e2:	ed90 0b52 	vldr	d0, [r0, #328]	; 0x148
   415e6:	ed90 1b50 	vldr	d1, [r0, #320]	; 0x140
   415ea:	ed80 0b5e 	vstr	d0, [r0, #376]	; 0x178
   415ee:	ed80 1b5c 	vstr	d1, [r0, #368]	; 0x170
   415f2:	ed90 0b5e 	vldr	d0, [r0, #376]	; 0x178
   415f6:	ed90 1b5c 	vldr	d1, [r0, #368]	; 0x170
   415fa:	ffc0 ac01 	vmull.u8	q13, d0, d1
   415fe:	f50d 6c01 	add.w	ip, sp, #2064	; 0x810
   41602:	f94c aaef 	vst1.64	{d26-d27}, [ip :128]
   41606:	f96c aaef 	vld1.64	{d26-d27}, [ip :128]
   4160a:	ef58 88ea 	vadd.i16	q12, q12, q13
   4160e:	f50d 6cfc 	add.w	ip, sp, #2016	; 0x7e0
   41612:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   41616:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   4161a:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   4161e:	f04f 0c19 	mov.w	ip, #25
   41622:	f88d c7df 	strb.w	ip, [sp, #2015]	; 0x7df
   41626:	f20d 7cdf 	addw	ip, sp, #2015	; 0x7df
   4162a:	f9ac 0c0f 	vld1.8	{d0[]}, [ip]
   4162e:	ed80 0b46 	vstr	d0, [r0, #280]	; 0x118
   41632:	ed90 0b46 	vldr	d0, [r0, #280]	; 0x118
   41636:	ed80 0b48 	vstr	d0, [r0, #288]	; 0x120
   4163a:	ed90 0b48 	vldr	d0, [r0, #288]	; 0x120
   4163e:	ed83 0b44 	vstr	d0, [r3, #272]	; 0x110
   41642:	f96e 8aef 	vld1.64	{d24-d25}, [lr :128]
   41646:	ed90 0bf8 	vldr	d0, [r0, #992]	; 0x3e0
   4164a:	ed93 1b44 	vldr	d1, [r3, #272]	; 0x110
   4164e:	f50d 6cf2 	add.w	ip, sp, #1936	; 0x790
   41652:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   41656:	ed80 0b36 	vstr	d0, [r0, #216]	; 0xd8
   4165a:	ed80 1b34 	vstr	d1, [r0, #208]	; 0xd0
   4165e:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   41662:	ed90 0b36 	vldr	d0, [r0, #216]	; 0xd8
   41666:	ed90 1b34 	vldr	d1, [r0, #208]	; 0xd0
   4166a:	ed80 0b44 	vstr	d0, [r0, #272]	; 0x110
   4166e:	ed80 1b42 	vstr	d1, [r0, #264]	; 0x108
   41672:	ed90 0b44 	vldr	d0, [r0, #272]	; 0x110
   41676:	ed90 1b42 	vldr	d1, [r0, #264]	; 0x108
   4167a:	ffc0 ac01 	vmull.u8	q13, d0, d1
   4167e:	f50d 6cf4 	add.w	ip, sp, #1952	; 0x7a0
   41682:	f94c aaef 	vst1.64	{d26-d27}, [ip :128]
   41686:	f96c aaef 	vld1.64	{d26-d27}, [ip :128]
   4168a:	ef58 88ea 	vadd.i16	q12, q12, q13
   4168e:	f50d 6cee 	add.w	ip, sp, #1904	; 0x770
   41692:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   41696:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   4169a:	f94e 8aef 	vst1.64	{d24-d25}, [lr :128]
   4169e:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   416a2:	ed91 0b00 	vldr	d0, [r1]
   416a6:	ed93 1b44 	vldr	d1, [r3, #272]	; 0x110
   416aa:	f50d 61e8 	add.w	r1, sp, #1856	; 0x740
   416ae:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   416b2:	ed80 0b22 	vstr	d0, [r0, #136]	; 0x88
   416b6:	ed80 1b20 	vstr	d1, [r0, #128]	; 0x80
   416ba:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   416be:	ed90 0b22 	vldr	d0, [r0, #136]	; 0x88
   416c2:	ed90 1b20 	vldr	d1, [r0, #128]	; 0x80
   416c6:	ed80 0b2e 	vstr	d0, [r0, #184]	; 0xb8
   416ca:	ed80 1b2c 	vstr	d1, [r0, #176]	; 0xb0
   416ce:	ed90 0b2e 	vldr	d0, [r0, #184]	; 0xb8
   416d2:	ed90 1b2c 	vldr	d1, [r0, #176]	; 0xb0
   416d6:	ffc0 ac01 	vmull.u8	q13, d0, d1
   416da:	f50d 61ea 	add.w	r1, sp, #1872	; 0x750
   416de:	f941 aaef 	vst1.64	{d26-d27}, [r1 :128]
   416e2:	f961 aaef 	vld1.64	{d26-d27}, [r1 :128]
   416e6:	ef58 88ea 	vadd.i16	q12, q12, q13
   416ea:	f50d 61e4 	add.w	r1, sp, #1824	; 0x720
   416ee:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   416f2:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   416f6:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   416fa:	f96e 8aef 	vld1.64	{d24-d25}, [lr :128]
   416fe:	a968      	add	r1, sp, #416	; 0x1a0
   41700:	f961 aaef 	vld1.64	{d26-d27}, [r1 :128]
   41704:	f50d 6ce2 	add.w	ip, sp, #1808	; 0x710
   41708:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   4170c:	f50d 64e0 	add.w	r4, sp, #1792	; 0x700
   41710:	f944 aaef 	vst1.64	{d26-d27}, [r4 :128]
   41714:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   41718:	f964 aaef 	vld1.64	{d26-d27}, [r4 :128]
   4171c:	ef58 88ea 	vadd.i16	q12, q12, q13
   41720:	f50d 6cde 	add.w	ip, sp, #1776	; 0x6f0
   41724:	f94c 8aef 	vst1.64	{d24-d25}, [ip :128]
   41728:	f96c 8aef 	vld1.64	{d24-d25}, [ip :128]
   4172c:	f94e 8aef 	vst1.64	{d24-d25}, [lr :128]
   41730:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   41734:	f961 aaef 	vld1.64	{d26-d27}, [r1 :128]
   41738:	f50d 61dc 	add.w	r1, sp, #1760	; 0x6e0
   4173c:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   41740:	f50d 6cda 	add.w	ip, sp, #1744	; 0x6d0
   41744:	f94c aaef 	vst1.64	{d26-d27}, [ip :128]
   41748:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4174c:	f96c aaef 	vld1.64	{d26-d27}, [ip :128]
   41750:	ef58 88ea 	vadd.i16	q12, q12, q13
   41754:	f50d 61d8 	add.w	r1, sp, #1728	; 0x6c0
   41758:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   4175c:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   41760:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   41764:	f96e 8aef 	vld1.64	{d24-d25}, [lr :128]
   41768:	a948      	add	r1, sp, #288	; 0x120
   4176a:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   4176e:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   41772:	ff88 0938 	vqshrn.u16	d0, q12, #8
   41776:	ed83 0b3a 	vstr	d0, [r3, #232]	; 0xe8
   4177a:	ed93 0b3a 	vldr	d0, [r3, #232]	; 0xe8
   4177e:	ed83 0b38 	vstr	d0, [r3, #224]	; 0xe0
   41782:	ed93 0b38 	vldr	d0, [r3, #224]	; 0xe0
   41786:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   4178a:	a940      	add	r1, sp, #256	; 0x100
   4178c:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   41790:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   41794:	ff88 1938 	vqshrn.u16	d1, q12, #8
   41798:	ed83 1b32 	vstr	d1, [r3, #200]	; 0xc8
   4179c:	ed93 1b32 	vldr	d1, [r3, #200]	; 0xc8
   417a0:	ed83 1b30 	vstr	d1, [r3, #192]	; 0xc0
   417a4:	ed93 1b30 	vldr	d1, [r3, #192]	; 0xc0
   417a8:	ed80 0b02 	vstr	d0, [r0, #8]
   417ac:	ed80 1b00 	vstr	d1, [r0]
   417b0:	ed90 0b02 	vldr	d0, [r0, #8]
   417b4:	ed90 1b00 	vldr	d1, [r0]
   417b8:	eef0 8b40 	vmov.f64	d24, d0
   417bc:	eef0 9b41 	vmov.f64	d25, d1
   417c0:	f50d 61d4 	add.w	r1, sp, #1696	; 0x6a0
   417c4:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   417c8:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   417cc:	a94c      	add	r1, sp, #304	; 0x130
   417ce:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   417d2:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   417d6:	aa5c      	add	r2, sp, #368	; 0x170
   417d8:	f962 aaef 	vld1.64	{d26-d27}, [r2 :128]
   417dc:	f50d 62d2 	add.w	r2, sp, #1680	; 0x690
   417e0:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   417e4:	f50d 6cd0 	add.w	ip, sp, #1664	; 0x680
   417e8:	f94c aaef 	vst1.64	{d26-d27}, [ip :128]
   417ec:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   417f0:	f96c aaef 	vld1.64	{d26-d27}, [ip :128]
   417f4:	ef48 88ea 	vadd.i8	q12, q12, q13
   417f8:	f50d 62ce 	add.w	r2, sp, #1648	; 0x670
   417fc:	f942 8aef 	vst1.64	{d24-d25}, [r2 :128]
   41800:	f962 8aef 	vld1.64	{d24-d25}, [r2 :128]
   41804:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   41808:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4180c:	a938      	add	r1, sp, #224	; 0xe0
   4180e:	f941 8aef 	vst1.64	{d24-d25}, [r1 :128]
   41812:	9a6f      	ldr	r2, [sp, #444]	; 0x1bc
   41814:	f8dd c158 	ldr.w	ip, [sp, #344]	; 0x158
   41818:	4462      	add	r2, ip
   4181a:	f961 8aef 	vld1.64	{d24-d25}, [r1 :128]
   4181e:	f942 8a0f 	vst1.8	{d24-d25}, [r2]
   41822:	9956      	ldr	r1, [sp, #344]	; 0x158
   41824:	3110      	adds	r1, #16
   41826:	9156      	str	r1, [sp, #344]	; 0x158
   41828:	9953      	ldr	r1, [sp, #332]	; 0x14c
   4182a:	eb01 72d1 	add.w	r2, r1, r1, lsr #31
   4182e:	f022 0201 	bic.w	r2, r2, #1
   41832:	1a89      	subs	r1, r1, r2
   41834:	2900      	cmp	r1, #0
   41836:	f040 8274 	bne.w	41d22 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xaea>
   4183a:	e7ff      	b.n	4183c <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x604>
   4183c:	f64f 70da 	movw	r0, #65498	; 0xffda
   41840:	f8ad 066e 	strh.w	r0, [sp, #1646]	; 0x66e
   41844:	f20d 606e 	addw	r0, sp, #1646	; 0x66e
   41848:	f9e0 0c7f 	vld1.16	{d16[]-d17[]}, [r0 :16]
   4184c:	f50d 60c8 	add.w	r0, sp, #1600	; 0x640
   41850:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41854:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41858:	f50d 60ca 	add.w	r0, sp, #1616	; 0x650
   4185c:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41860:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41864:	a834      	add	r0, sp, #208	; 0xd0
   41866:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   4186a:	2170      	movs	r1, #112	; 0x70
   4186c:	f8ad 163e 	strh.w	r1, [sp, #1598]	; 0x63e
   41870:	f20d 623e 	addw	r2, sp, #1598	; 0x63e
   41874:	f9e2 0c7f 	vld1.16	{d16[]-d17[]}, [r2 :16]
   41878:	f50d 62c2 	add.w	r2, sp, #1552	; 0x610
   4187c:	f942 0aef 	vst1.64	{d16-d17}, [r2 :128]
   41880:	f962 0aef 	vld1.64	{d16-d17}, [r2 :128]
   41884:	f50d 62c4 	add.w	r2, sp, #1568	; 0x620
   41888:	f942 0aef 	vst1.64	{d16-d17}, [r2 :128]
   4188c:	f962 0aef 	vld1.64	{d16-d17}, [r2 :128]
   41890:	aa30      	add	r2, sp, #192	; 0xc0
   41892:	f942 0aef 	vst1.64	{d16-d17}, [r2 :128]
   41896:	f50d 6330 	add.w	r3, sp, #2816	; 0xb00
   4189a:	f103 0c20 	add.w	ip, r3, #32
   4189e:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   418a2:	f50d 6cc0 	add.w	ip, sp, #1536	; 0x600
   418a6:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   418aa:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   418ae:	f50d 6cbe 	add.w	ip, sp, #1520	; 0x5f0
   418b2:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   418b6:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   418ba:	f50d 7cb0 	add.w	ip, sp, #352	; 0x160
   418be:	f96c 2aef 	vld1.64	{d18-d19}, [ip :128]
   418c2:	f50d 6ebc 	add.w	lr, sp, #1504	; 0x5e0
   418c6:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   418ca:	f50d 64ba 	add.w	r4, sp, #1488	; 0x5d0
   418ce:	f944 2aef 	vst1.64	{d18-d19}, [r4 :128]
   418d2:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   418d6:	f964 2aef 	vld1.64	{d18-d19}, [r4 :128]
   418da:	ef40 01f2 	vand	q8, q8, q9
   418de:	f50d 6eb8 	add.w	lr, sp, #1472	; 0x5c0
   418e2:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   418e6:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   418ea:	f50d 6eb6 	add.w	lr, sp, #1456	; 0x5b0
   418ee:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   418f2:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   418f6:	f50d 6eb4 	add.w	lr, sp, #1440	; 0x5a0
   418fa:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   418fe:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41902:	f10d 0eb0 	add.w	lr, sp, #176	; 0xb0
   41906:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   4190a:	f103 0410 	add.w	r4, r3, #16
   4190e:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   41912:	f50d 64b2 	add.w	r4, sp, #1424	; 0x590
   41916:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   4191a:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   4191e:	f50d 64b0 	add.w	r4, sp, #1408	; 0x580
   41922:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   41926:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   4192a:	f96c 2aef 	vld1.64	{d18-d19}, [ip :128]
   4192e:	f50d 64ae 	add.w	r4, sp, #1392	; 0x570
   41932:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   41936:	f50d 65ac 	add.w	r5, sp, #1376	; 0x560
   4193a:	f945 2aef 	vst1.64	{d18-d19}, [r5 :128]
   4193e:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   41942:	f965 2aef 	vld1.64	{d18-d19}, [r5 :128]
   41946:	ef40 01f2 	vand	q8, q8, q9
   4194a:	f50d 64aa 	add.w	r4, sp, #1360	; 0x550
   4194e:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   41952:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   41956:	f50d 64a8 	add.w	r4, sp, #1344	; 0x540
   4195a:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   4195e:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   41962:	f50d 64a6 	add.w	r4, sp, #1328	; 0x530
   41966:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   4196a:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   4196e:	ac28      	add	r4, sp, #160	; 0xa0
   41970:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   41974:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   41978:	f50d 63a4 	add.w	r3, sp, #1312	; 0x520
   4197c:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   41980:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   41984:	f50d 63a2 	add.w	r3, sp, #1296	; 0x510
   41988:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   4198c:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   41990:	f96c 2aef 	vld1.64	{d18-d19}, [ip :128]
   41994:	f50d 63a0 	add.w	r3, sp, #1280	; 0x500
   41998:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   4199c:	f50d 6c9e 	add.w	ip, sp, #1264	; 0x4f0
   419a0:	f94c 2aef 	vst1.64	{d18-d19}, [ip :128]
   419a4:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   419a8:	f96c 2aef 	vld1.64	{d18-d19}, [ip :128]
   419ac:	ef40 01f2 	vand	q8, q8, q9
   419b0:	f50d 639c 	add.w	r3, sp, #1248	; 0x4e0
   419b4:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   419b8:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   419bc:	f50d 639a 	add.w	r3, sp, #1232	; 0x4d0
   419c0:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   419c4:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   419c8:	f50d 6398 	add.w	r3, sp, #1216	; 0x4c0
   419cc:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   419d0:	f963 0aef 	vld1.64	{d16-d17}, [r3 :128]
   419d4:	ab24      	add	r3, sp, #144	; 0x90
   419d6:	f943 0aef 	vst1.64	{d16-d17}, [r3 :128]
   419da:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   419de:	f960 2aef 	vld1.64	{d18-d19}, [r0 :128]
   419e2:	f50d 6c96 	add.w	ip, sp, #1200	; 0x4b0
   419e6:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   419ea:	f50d 6594 	add.w	r5, sp, #1184	; 0x4a0
   419ee:	f945 2aef 	vst1.64	{d18-d19}, [r5 :128]
   419f2:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   419f6:	f965 2aef 	vld1.64	{d18-d19}, [r5 :128]
   419fa:	ef50 09f2 	vmul.i16	q8, q8, q9
   419fe:	f50d 6c92 	add.w	ip, sp, #1168	; 0x490
   41a02:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   41a06:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   41a0a:	f10d 0c80 	add.w	ip, sp, #128	; 0x80
   41a0e:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   41a12:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41a16:	f962 2aef 	vld1.64	{d18-d19}, [r2 :128]
   41a1a:	f50d 6e90 	add.w	lr, sp, #1152	; 0x480
   41a1e:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   41a22:	f50d 658e 	add.w	r5, sp, #1136	; 0x470
   41a26:	f945 2aef 	vst1.64	{d18-d19}, [r5 :128]
   41a2a:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41a2e:	f965 2aef 	vld1.64	{d18-d19}, [r5 :128]
   41a32:	ef50 09f2 	vmul.i16	q8, q8, q9
   41a36:	f50d 6e8c 	add.w	lr, sp, #1120	; 0x460
   41a3a:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   41a3e:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41a42:	f10d 0e70 	add.w	lr, sp, #112	; 0x70
   41a46:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   41a4a:	f64f 75b6 	movw	r5, #65462	; 0xffb6
   41a4e:	f8ad 545e 	strh.w	r5, [sp, #1118]	; 0x45e
   41a52:	f20d 455e 	addw	r5, sp, #1118	; 0x45e
   41a56:	f9e5 0c7f 	vld1.16	{d16[]-d17[]}, [r5 :16]
   41a5a:	f50d 6586 	add.w	r5, sp, #1072	; 0x430
   41a5e:	f945 0aef 	vst1.64	{d16-d17}, [r5 :128]
   41a62:	f965 0aef 	vld1.64	{d16-d17}, [r5 :128]
   41a66:	f50d 6588 	add.w	r5, sp, #1088	; 0x440
   41a6a:	f945 0aef 	vst1.64	{d16-d17}, [r5 :128]
   41a6e:	f965 0aef 	vld1.64	{d16-d17}, [r5 :128]
   41a72:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41a76:	f64f 75a2 	movw	r5, #65442	; 0xffa2
   41a7a:	f8ad 542e 	strh.w	r5, [sp, #1070]	; 0x42e
   41a7e:	f20d 452e 	addw	r5, sp, #1070	; 0x42e
   41a82:	f9e5 0c7f 	vld1.16	{d16[]-d17[]}, [r5 :16]
   41a86:	f50d 6580 	add.w	r5, sp, #1024	; 0x400
   41a8a:	f945 0aef 	vst1.64	{d16-d17}, [r5 :128]
   41a8e:	f965 0aef 	vld1.64	{d16-d17}, [r5 :128]
   41a92:	f50d 6582 	add.w	r5, sp, #1040	; 0x410
   41a96:	f945 0aef 	vst1.64	{d16-d17}, [r5 :128]
   41a9a:	f965 0aef 	vld1.64	{d16-d17}, [r5 :128]
   41a9e:	f942 0aef 	vst1.64	{d16-d17}, [r2 :128]
   41aa2:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   41aa6:	f964 2aef 	vld1.64	{d18-d19}, [r4 :128]
   41aaa:	f960 4aef 	vld1.64	{d20-d21}, [r0 :128]
   41aae:	adfc      	add	r5, sp, #1008	; 0x3f0
   41ab0:	f945 0aef 	vst1.64	{d16-d17}, [r5 :128]
   41ab4:	aef8      	add	r6, sp, #992	; 0x3e0
   41ab6:	f946 2aef 	vst1.64	{d18-d19}, [r6 :128]
   41aba:	f50d 7874 	add.w	r8, sp, #976	; 0x3d0
   41abe:	f948 4aef 	vst1.64	{d20-d21}, [r8 :128]
   41ac2:	f965 0aef 	vld1.64	{d16-d17}, [r5 :128]
   41ac6:	f966 2aef 	vld1.64	{d18-d19}, [r6 :128]
   41aca:	f968 4aef 	vld1.64	{d20-d21}, [r8 :128]
   41ace:	ef52 09e4 	vmla.i16	q8, q9, q10
   41ad2:	adf0      	add	r5, sp, #960	; 0x3c0
   41ad4:	f945 0aef 	vst1.64	{d16-d17}, [r5 :128]
   41ad8:	f965 0aef 	vld1.64	{d16-d17}, [r5 :128]
   41adc:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   41ae0:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41ae4:	f964 2aef 	vld1.64	{d18-d19}, [r4 :128]
   41ae8:	f962 4aef 	vld1.64	{d20-d21}, [r2 :128]
   41aec:	acec      	add	r4, sp, #944	; 0x3b0
   41aee:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   41af2:	ade8      	add	r5, sp, #928	; 0x3a0
   41af4:	f945 2aef 	vst1.64	{d18-d19}, [r5 :128]
   41af8:	aee4      	add	r6, sp, #912	; 0x390
   41afa:	f946 4aef 	vst1.64	{d20-d21}, [r6 :128]
   41afe:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   41b02:	f965 2aef 	vld1.64	{d18-d19}, [r5 :128]
   41b06:	f966 4aef 	vld1.64	{d20-d21}, [r6 :128]
   41b0a:	ef52 09e4 	vmla.i16	q8, q9, q10
   41b0e:	ace0      	add	r4, sp, #896	; 0x380
   41b10:	f944 0aef 	vst1.64	{d16-d17}, [r4 :128]
   41b14:	f964 0aef 	vld1.64	{d16-d17}, [r4 :128]
   41b18:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   41b1c:	f8ad 137e 	strh.w	r1, [sp, #894]	; 0x37e
   41b20:	f20d 317e 	addw	r1, sp, #894	; 0x37e
   41b24:	f9e1 0c7f 	vld1.16	{d16[]-d17[]}, [r1 :16]
   41b28:	a9d4      	add	r1, sp, #848	; 0x350
   41b2a:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41b2e:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41b32:	a9d8      	add	r1, sp, #864	; 0x360
   41b34:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41b38:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41b3c:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41b40:	f64f 71ee 	movw	r1, #65518	; 0xffee
   41b44:	f8ad 134e 	strh.w	r1, [sp, #846]	; 0x34e
   41b48:	f20d 314e 	addw	r1, sp, #846	; 0x34e
   41b4c:	f9e1 0c7f 	vld1.16	{d16[]-d17[]}, [r1 :16]
   41b50:	a9c8      	add	r1, sp, #800	; 0x320
   41b52:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41b56:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41b5a:	a9cc      	add	r1, sp, #816	; 0x330
   41b5c:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41b60:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41b64:	f942 0aef 	vst1.64	{d16-d17}, [r2 :128]
   41b68:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   41b6c:	f963 2aef 	vld1.64	{d18-d19}, [r3 :128]
   41b70:	f960 4aef 	vld1.64	{d20-d21}, [r0 :128]
   41b74:	a8c4      	add	r0, sp, #784	; 0x310
   41b76:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41b7a:	a9c0      	add	r1, sp, #768	; 0x300
   41b7c:	f941 2aef 	vst1.64	{d18-d19}, [r1 :128]
   41b80:	acbc      	add	r4, sp, #752	; 0x2f0
   41b82:	f944 4aef 	vst1.64	{d20-d21}, [r4 :128]
   41b86:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41b8a:	f961 2aef 	vld1.64	{d18-d19}, [r1 :128]
   41b8e:	f964 4aef 	vld1.64	{d20-d21}, [r4 :128]
   41b92:	ef52 09e4 	vmla.i16	q8, q9, q10
   41b96:	a8b8      	add	r0, sp, #736	; 0x2e0
   41b98:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41b9c:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41ba0:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   41ba4:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41ba8:	f963 2aef 	vld1.64	{d18-d19}, [r3 :128]
   41bac:	f962 4aef 	vld1.64	{d20-d21}, [r2 :128]
   41bb0:	a8b4      	add	r0, sp, #720	; 0x2d0
   41bb2:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41bb6:	a9b0      	add	r1, sp, #704	; 0x2c0
   41bb8:	f941 2aef 	vst1.64	{d18-d19}, [r1 :128]
   41bbc:	aaac      	add	r2, sp, #688	; 0x2b0
   41bbe:	f942 4aef 	vst1.64	{d20-d21}, [r2 :128]
   41bc2:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41bc6:	f961 2aef 	vld1.64	{d18-d19}, [r1 :128]
   41bca:	f962 4aef 	vld1.64	{d20-d21}, [r2 :128]
   41bce:	ef52 09e4 	vmla.i16	q8, q9, q10
   41bd2:	a8a8      	add	r0, sp, #672	; 0x2a0
   41bd4:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41bd8:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41bdc:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   41be0:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   41be4:	a864      	add	r0, sp, #400	; 0x190
   41be6:	f960 2aef 	vld1.64	{d18-d19}, [r0 :128]
   41bea:	a9a4      	add	r1, sp, #656	; 0x290
   41bec:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41bf0:	aaa0      	add	r2, sp, #640	; 0x280
   41bf2:	f942 2aef 	vst1.64	{d18-d19}, [r2 :128]
   41bf6:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41bfa:	f962 2aef 	vld1.64	{d18-d19}, [r2 :128]
   41bfe:	ef50 08e2 	vadd.i16	q8, q8, q9
   41c02:	a99c      	add	r1, sp, #624	; 0x270
   41c04:	f941 0aef 	vst1.64	{d16-d17}, [r1 :128]
   41c08:	f961 0aef 	vld1.64	{d16-d17}, [r1 :128]
   41c0c:	f94c 0aef 	vst1.64	{d16-d17}, [ip :128]
   41c10:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41c14:	f960 2aef 	vld1.64	{d18-d19}, [r0 :128]
   41c18:	a898      	add	r0, sp, #608	; 0x260
   41c1a:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41c1e:	a994      	add	r1, sp, #592	; 0x250
   41c20:	f941 2aef 	vst1.64	{d18-d19}, [r1 :128]
   41c24:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41c28:	f961 2aef 	vld1.64	{d18-d19}, [r1 :128]
   41c2c:	ef50 08e2 	vadd.i16	q8, q8, q9
   41c30:	a890      	add	r0, sp, #576	; 0x240
   41c32:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41c36:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41c3a:	f94e 0aef 	vst1.64	{d16-d17}, [lr :128]
   41c3e:	f96c 0aef 	vld1.64	{d16-d17}, [ip :128]
   41c42:	a818      	add	r0, sp, #96	; 0x60
   41c44:	f940 0aef 	vst1.64	{d16-d17}, [r0 :128]
   41c48:	f960 0aef 	vld1.64	{d16-d17}, [r0 :128]
   41c4c:	efc8 6930 	vqshrn.s16	d22, q8, #8
   41c50:	9807      	ldr	r0, [sp, #28]
   41c52:	edc0 6b0a 	vstr	d22, [r0, #40]	; 0x28
   41c56:	edd0 6b0a 	vldr	d22, [r0, #40]	; 0x28
   41c5a:	edc0 6b08 	vstr	d22, [r0, #32]
   41c5e:	edd0 6b08 	vldr	d22, [r0, #32]
   41c62:	edd0 7b56 	vldr	d23, [r0, #344]	; 0x158
   41c66:	edc0 6b82 	vstr	d22, [r0, #520]	; 0x208
   41c6a:	edc0 7b80 	vstr	d23, [r0, #512]	; 0x200
   41c6e:	edd0 6b82 	vldr	d22, [r0, #520]	; 0x208
   41c72:	edd0 7b80 	vldr	d23, [r0, #512]	; 0x200
   41c76:	ef46 68a7 	vadd.i8	d22, d22, d23
   41c7a:	edc0 6b7e 	vstr	d22, [r0, #504]	; 0x1f8
   41c7e:	edd0 6b7e 	vldr	d22, [r0, #504]	; 0x1f8
   41c82:	edc0 6b7c 	vstr	d22, [r0, #496]	; 0x1f0
   41c86:	edd0 6b7c 	vldr	d22, [r0, #496]	; 0x1f0
   41c8a:	edc0 6b7a 	vstr	d22, [r0, #488]	; 0x1e8
   41c8e:	edd0 6b7a 	vldr	d22, [r0, #488]	; 0x1e8
   41c92:	9908      	ldr	r1, [sp, #32]
   41c94:	edc1 6bee 	vstr	d22, [r1, #952]	; 0x3b8
   41c98:	f96e 0aef 	vld1.64	{d16-d17}, [lr :128]
   41c9c:	aa10      	add	r2, sp, #64	; 0x40
   41c9e:	f942 0aef 	vst1.64	{d16-d17}, [r2 :128]
   41ca2:	f962 0aef 	vld1.64	{d16-d17}, [r2 :128]
   41ca6:	efc8 6930 	vqshrn.s16	d22, q8, #8
   41caa:	edc0 6b02 	vstr	d22, [r0, #8]
   41cae:	edd0 6b02 	vldr	d22, [r0, #8]
   41cb2:	edc0 6b00 	vstr	d22, [r0]
   41cb6:	edd0 6b00 	vldr	d22, [r0]
   41cba:	edd0 7b56 	vldr	d23, [r0, #344]	; 0x158
   41cbe:	edc0 6b78 	vstr	d22, [r0, #480]	; 0x1e0
   41cc2:	edc0 7b76 	vstr	d23, [r0, #472]	; 0x1d8
   41cc6:	edd0 6b78 	vldr	d22, [r0, #480]	; 0x1e0
   41cca:	edd0 7b76 	vldr	d23, [r0, #472]	; 0x1d8
   41cce:	ef46 68a7 	vadd.i8	d22, d22, d23
   41cd2:	edc0 6b74 	vstr	d22, [r0, #464]	; 0x1d0
   41cd6:	edd0 6b74 	vldr	d22, [r0, #464]	; 0x1d0
   41cda:	edc0 6b72 	vstr	d22, [r0, #456]	; 0x1c8
   41cde:	edd0 6b72 	vldr	d22, [r0, #456]	; 0x1c8
   41ce2:	edc0 6b70 	vstr	d22, [r0, #448]	; 0x1c0
   41ce6:	edd0 6b70 	vldr	d22, [r0, #448]	; 0x1c0
   41cea:	edc1 6bec 	vstr	d22, [r1, #944]	; 0x3b0
   41cee:	f50d 6226 	add.w	r2, sp, #2656	; 0xa60
   41cf2:	f962 0acf 	vld1.64	{d16-d17}, [r2]
   41cf6:	f50d 6225 	add.w	r2, sp, #2640	; 0xa50
   41cfa:	f942 0acf 	vst1.64	{d16-d17}, [r2]
   41cfe:	9b6f      	ldr	r3, [sp, #444]	; 0x1bc
   41d00:	f8dd c154 	ldr.w	ip, [sp, #340]	; 0x154
   41d04:	4463      	add	r3, ip
   41d06:	f962 671d 	vld1.8	{d22}, [r2 :64]!
   41d0a:	edd2 7b00 	vldr	d23, [r2]
   41d0e:	eef0 0b66 	vmov.f64	d16, d22
   41d12:	eef0 1b67 	vmov.f64	d17, d23
   41d16:	f943 080f 	vst2.8	{d16-d17}, [r3]
   41d1a:	9a55      	ldr	r2, [sp, #340]	; 0x154
   41d1c:	3210      	adds	r2, #16
   41d1e:	9255      	str	r2, [sp, #340]	; 0x154
   41d20:	e7ff      	b.n	41d22 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xaea>
   41d22:	e7ff      	b.n	41d24 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xaec>
   41d24:	9854      	ldr	r0, [sp, #336]	; 0x150
   41d26:	3001      	adds	r0, #1
   41d28:	9054      	str	r0, [sp, #336]	; 0x150
   41d2a:	f7ff bb25 	b.w	41378 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x140>
   41d2e:	986d      	ldr	r0, [sp, #436]	; 0x1b4
   41d30:	f020 000f 	bic.w	r0, r0, #15
   41d34:	9054      	str	r0, [sp, #336]	; 0x150
   41d36:	e7ff      	b.n	41d38 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xb00>
   41d38:	9854      	ldr	r0, [sp, #336]	; 0x150
   41d3a:	996d      	ldr	r1, [sp, #436]	; 0x1b4
   41d3c:	4288      	cmp	r0, r1
   41d3e:	da7e      	bge.n	41e3e <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc06>
   41d40:	e7ff      	b.n	41d42 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xb0a>
   41d42:	986e      	ldr	r0, [sp, #440]	; 0x1b8
   41d44:	7880      	ldrb	r0, [r0, #2]
   41d46:	f88d 002f 	strb.w	r0, [sp, #47]	; 0x2f
   41d4a:	986e      	ldr	r0, [sp, #440]	; 0x1b8
   41d4c:	7840      	ldrb	r0, [r0, #1]
   41d4e:	f88d 002e 	strb.w	r0, [sp, #46]	; 0x2e
   41d52:	986e      	ldr	r0, [sp, #440]	; 0x1b8
   41d54:	7800      	ldrb	r0, [r0, #0]
   41d56:	f88d 002d 	strb.w	r0, [sp, #45]	; 0x2d
   41d5a:	986e      	ldr	r0, [sp, #440]	; 0x1b8
   41d5c:	3004      	adds	r0, #4
   41d5e:	906e      	str	r0, [sp, #440]	; 0x1b8
   41d60:	f89d 002f 	ldrb.w	r0, [sp, #47]	; 0x2f
   41d64:	eb00 1040 	add.w	r0, r0, r0, lsl #5
   41d68:	f89d 102e 	ldrb.w	r1, [sp, #46]	; 0x2e
   41d6c:	eb01 11c1 	add.w	r1, r1, r1, lsl #7
   41d70:	eb01 0040 	add.w	r0, r1, r0, lsl #1
   41d74:	f89d 102d 	ldrb.w	r1, [sp, #45]	; 0x2d
   41d78:	2219      	movs	r2, #25
   41d7a:	fb11 0002 	smlabb	r0, r1, r2, r0
   41d7e:	3080      	adds	r0, #128	; 0x80
   41d80:	2110      	movs	r1, #16
   41d82:	eb01 2010 	add.w	r0, r1, r0, lsr #8
   41d86:	f88d 002c 	strb.w	r0, [sp, #44]	; 0x2c
   41d8a:	f89d 002f 	ldrb.w	r0, [sp, #47]	; 0x2f
   41d8e:	f06f 0125 	mvn.w	r1, #37	; 0x25
   41d92:	fb10 f001 	smulbb	r0, r0, r1
   41d96:	f89d 102e 	ldrb.w	r1, [sp, #46]	; 0x2e
   41d9a:	224a      	movs	r2, #74	; 0x4a
   41d9c:	fb01 0012 	mls	r0, r1, r2, r0
   41da0:	f89d 102d 	ldrb.w	r1, [sp, #45]	; 0x2d
   41da4:	ebc1 01c1 	rsb	r1, r1, r1, lsl #3
   41da8:	eb00 1001 	add.w	r0, r0, r1, lsl #4
   41dac:	3080      	adds	r0, #128	; 0x80
   41dae:	2180      	movs	r1, #128	; 0x80
   41db0:	eb01 2010 	add.w	r0, r1, r0, lsr #8
   41db4:	f88d 002b 	strb.w	r0, [sp, #43]	; 0x2b
   41db8:	f89d 002f 	ldrb.w	r0, [sp, #47]	; 0x2f
   41dbc:	ebc0 00c0 	rsb	r0, r0, r0, lsl #3
   41dc0:	f89d 202e 	ldrb.w	r2, [sp, #46]	; 0x2e
   41dc4:	235e      	movs	r3, #94	; 0x5e
   41dc6:	fb12 f203 	smulbb	r2, r2, r3
   41dca:	ebc2 1000 	rsb	r0, r2, r0, lsl #4
   41dce:	f89d 202d 	ldrb.w	r2, [sp, #45]	; 0x2d
   41dd2:	eb02 02c2 	add.w	r2, r2, r2, lsl #3
   41dd6:	eba0 0042 	sub.w	r0, r0, r2, lsl #1
   41dda:	3080      	adds	r0, #128	; 0x80
   41ddc:	eb01 2010 	add.w	r0, r1, r0, lsr #8
   41de0:	f88d 002a 	strb.w	r0, [sp, #42]	; 0x2a
   41de4:	f89d 002c 	ldrb.w	r0, [sp, #44]	; 0x2c
   41de8:	996f      	ldr	r1, [sp, #444]	; 0x1bc
   41dea:	9a56      	ldr	r2, [sp, #344]	; 0x158
   41dec:	1c53      	adds	r3, r2, #1
   41dee:	9356      	str	r3, [sp, #344]	; 0x158
   41df0:	5488      	strb	r0, [r1, r2]
   41df2:	9853      	ldr	r0, [sp, #332]	; 0x14c
   41df4:	eb00 71d0 	add.w	r1, r0, r0, lsr #31
   41df8:	f021 0101 	bic.w	r1, r1, #1
   41dfc:	1a40      	subs	r0, r0, r1
   41dfe:	2800      	cmp	r0, #0
   41e00:	d118      	bne.n	41e34 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xbfc>
   41e02:	e7ff      	b.n	41e04 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xbcc>
   41e04:	9854      	ldr	r0, [sp, #336]	; 0x150
   41e06:	eb00 71d0 	add.w	r1, r0, r0, lsr #31
   41e0a:	f021 0101 	bic.w	r1, r1, #1
   41e0e:	1a40      	subs	r0, r0, r1
   41e10:	2800      	cmp	r0, #0
   41e12:	d10f      	bne.n	41e34 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xbfc>
   41e14:	e7ff      	b.n	41e16 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xbde>
   41e16:	f89d 002a 	ldrb.w	r0, [sp, #42]	; 0x2a
   41e1a:	996f      	ldr	r1, [sp, #444]	; 0x1bc
   41e1c:	9a55      	ldr	r2, [sp, #340]	; 0x154
   41e1e:	1c53      	adds	r3, r2, #1
   41e20:	9355      	str	r3, [sp, #340]	; 0x154
   41e22:	5488      	strb	r0, [r1, r2]
   41e24:	f89d 002b 	ldrb.w	r0, [sp, #43]	; 0x2b
   41e28:	996f      	ldr	r1, [sp, #444]	; 0x1bc
   41e2a:	9a55      	ldr	r2, [sp, #340]	; 0x154
   41e2c:	1c53      	adds	r3, r2, #1
   41e2e:	9355      	str	r3, [sp, #340]	; 0x154
   41e30:	5488      	strb	r0, [r1, r2]
   41e32:	e7ff      	b.n	41e34 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xbfc>
   41e34:	e7ff      	b.n	41e36 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xbfe>
   41e36:	9854      	ldr	r0, [sp, #336]	; 0x150
   41e38:	3001      	adds	r0, #1
   41e3a:	9054      	str	r0, [sp, #336]	; 0x150
   41e3c:	e77c      	b.n	41d38 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xb00>
   41e3e:	e7ff      	b.n	41e40 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc08>
   41e40:	9853      	ldr	r0, [sp, #332]	; 0x14c
   41e42:	3001      	adds	r0, #1
   41e44:	9053      	str	r0, [sp, #332]	; 0x14c
   41e46:	f7ff ba8e 	b.w	41366 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0x12e>
   41e4a:	4809      	ldr	r0, [pc, #36]	; (41e70 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc38>)
   41e4c:	4478      	add	r0, pc
   41e4e:	6800      	ldr	r0, [r0, #0]
   41e50:	6800      	ldr	r0, [r0, #0]
   41e52:	9909      	ldr	r1, [sp, #36]	; 0x24
   41e54:	4288      	cmp	r0, r1
   41e56:	d106      	bne.n	41e66 <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc2e>
   41e58:	e7ff      	b.n	41e5a <_Z30encodeYUV420SP_NEON_IntrinsicsPhS_ii+0xc22>
   41e5a:	f1a7 0418 	sub.w	r4, r7, #24
   41e5e:	46a5      	mov	sp, r4
   41e60:	e8bd 0b00 	ldmia.w	sp!, {r8, r9, fp}
   41e64:	bdf0      	pop	{r4, r5, r6, r7, pc}
   41e66:	f7f8 ec6e 	blx	3a744 <__stack_chk_fail@plt>
   41e6a:	bf00      	nop
   41e6c:	001ef0f8 	.word	0x001ef0f8
   41e70:	001ee50c 	.word	0x001ee50c

 

Neon 版在我的手机上是 “负优化” 。。。跑得比朴素 CPU 还慢。。。看来网上给的 NEON 代码也未必靠谱,还是得亲自实践对比!

RGBA 编码为 YUV420SP【NEON】_技术

经过我的优化后,NEON 版达到了 53ms 左右,展开(一次)版是51 ms左右,原图大小为 1600*1873 

RGBA 编码为 YUV420SP【NEON】_5e_02