膳绫擎应用的Neon指令每次只能攫取和存储8或者16位的数据,对于多出来的数据,只须要用同样的算法改采取C说话实现即可。
在应用上述的算法优化之后,进行每帧缩放,在Nexus 6p上,只须要不到 5ms 就能完成了,而对于缩放质量来说,ffmpeg的SWS_FAST_BILINEAR算法和上述算法缩放出来的图片进行比较,峰值信噪比(psnr)在大年夜部分场景下大年夜概在 38-40 阁下,质量也足够好了。
2.扭转
在android机械上,因为摄像头安装角度不合,>
于是可以在录制的时刻省下一大年夜笔扭转的开销了,excited!
3.镜像
在应用前置摄像头拍摄的时刻,如不雅纰谬YUV帧进行处理,那么直接拍出来的视频是会 镜像翻转 的,这里道理就跟照镜子一样,早年置摄像头偏向拿出来的YUV帧刚好是反的,但有些时刻拍出来的镜像视频可能不合我们的需求,是以这个时刻我们就须要对YUV帧进行镜像翻转。
大年夜体上就是大年夜摄像头输出的YUV帧经由预处理之后,送入编码器,获得编码好的h264视频流。
但因为摄像头安装角度一般是90或者270度,所以实际上原生的YUV帧是程度翻转过来的,是以做镜像翻转的时刻,只须要刚好以中心为中轴,分别高低交换每行数据即可,留意Y跟UV要分开处理,这种算法用Neon实现相当简单:
- asm volatile (
- "1: \n"
- "vld4.8 {d0, d1, d2, d3}, [%2]! \n" // load 32 from src
- "vld4.8 {d4, d5, d6, d7}, [%3]! \n" // load 32 from dst
- "subs %4, %4, #32 \n" // 32 processed per loop
- "vst4.8 {d0, d1, d2, d3}, [%1]! \n" // store 32 to dst
- "vst4.8 {d4, d5, d6, d7}, [%0]! \n" // store 32 to src
- "bgt 1b \n"
- : "+r"(src), // %0
- "+r"(dst), // %1
推荐阅读
我们计算编写这些函数异常简单的版本,但真正的调试器有 thread plan 的概念,它封装了所有的单步信息。例如,调试器可能有一些复杂的逻辑去决定断点的地位,然后有一些回调函数用于断定>>>详细阅读
本文标题:谈谈关于Android视频编码的那些坑
地址:http://www.17bianji.com/lsqh/36974.html
1/2 1