作家
登录

谈谈关于Android视频编码的那些坑

作者: 来源: 2017-08-28 16:58:12 阅读 我要评论

"q2""q3"              // Clobber List 
  •   ); 
  • 膳绫擎应用的Neon指令每次只能攫取和存储8或者16位的数据,对于多出来的数据,只须要用同样的算法改采取C说话实现即可。

    在应用上述的算法优化之后,进行每帧缩放,在Nexus 6p上,只须要不到 5ms 就能完成了,而对于缩放质量来说,ffmpeg的SWS_FAST_BILINEAR算法和上述算法缩放出来的图片进行比较,峰值信噪比(psnr)在大年夜部分场景下大年夜概在 38-40 阁下,质量也足够好了。

    2.扭转

    在android机械上,因为摄像头安装角度不合,>

  • char rotateStr[1024]; 
  • sprintf(rotateStr, "%d", rotate); 
  • av_dict_set(&out_stream->metadata, "rotate", rotateStr, 0); 
  • 于是可以在录制的时刻省下一大年夜笔扭转的开销了,excited!

    3.镜像

    在应用前置摄像头拍摄的时刻,如不雅纰谬YUV帧进行处理,那么直接拍出来的视频是会 镜像翻转 的,这里道理就跟照镜子一样,早年置摄像头偏向拿出来的YUV帧刚好是反的,但有些时刻拍出来的镜像视频可能不合我们的需求,是以这个时刻我们就须要对YUV帧进行镜像翻转。

    大年夜体上就是大年夜摄像头输出的YUV帧经由预处理之后,送入编码器,获得编码好的h264视频流。

    但因为摄像头安装角度一般是90或者270度,所以实际上原生的YUV帧是程度翻转过来的,是以做镜像翻转的时刻,只须要刚好以中心为中轴,分别高低交换每行数据即可,留意Y跟UV要分开处理,这种算法用Neon实现相当简单:

    1. asm volatile ( 
    2.       "1:                                          \n" 
    3.         "vld4.8     {d0, d1, d2, d3}, [%2]!        \n"  // load 32 from src 
    4.         "vld4.8     {d4, d5, d6, d7}, [%3]!        \n"  // load 32 from dst 
    5.         "subs       %4, %4, #32                    \n"  // 32 processed per loop 
    6.         "vst4.8     {d0, d1, d2, d3}, [%1]!        \n"  // store 32 to dst 
    7.         "vst4.8     {d4, d5, d6, d7}, [%0]!        \n"  // store 32 to src 
    8.         "bgt        1b                             \n" 
    9.       : "+r"(src),   // %0 
    10.         "+r"(dst),   // %1 
    11.         

        推荐阅读

        开发一个Linux调试器(六):源码级逐步执行

      我们计算编写这些函数异常简单的版本,但真正的调试器有 thread plan 的概念,它封装了所有的单步信息。例如,调试器可能有一些复杂的逻辑去决定断点的地位,然后有一些回调函数用于断定>>>详细阅读


      本文标题:谈谈关于Android视频编码的那些坑

      地址:http://www.17bianji.com/lsqh/36974.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)