x264改变输出分辨率的算法

在某些应用场景下,x264的输入视频分辨率与接收端输出的视频分辨率不同。
例如编码端摄像头采集到的YUV数据为1280x720,而接收端视频显示窗口为640x480。
对于这种场景,一般的处理方式是:
源端:采集,编码,传输 720p的码流
收端:接收,解码720p的码流,缩放到480p去显示。
这种方式的劣势在于编码,传输了接收端用不到的大分辨率码流。

一种改进的方式是在源端缩放720p的视频输入数据:
源端:采集720p,缩放到480p,输入480p给x264编码器编码,传输 480p的码流
收端:接收,解码,显示480p的码流。
这种方式处理掉了传输大分辨率码流的问题,但不是最有效率的方式。因为缩放本身也有计算量,同时增加了一次一帧数据读写的操作。

研究x264的代码发现,x264通过以下函数实现输入源图像到准备编码帧的格式转换:
    int x264_frame_copy_picture( x264_t *h, x264_frame_t *dst, x264_picture_t *src );
其中有从src->img.planet调捡数据拷贝到dst->plane的过程,目的是实现src和dst之间颜色空间转换(x264内部用的原始数据帧,参考帧都是NV12/NV16格式, src如果是YV12需要转成NV12)。x264在这里假设src和dst的分辨率是相同的,只做颜色空间转换。既然这里有一次因为色彩空间转换而引起的数据搬移,那么可以把图像缩放操作加入其中一并完成,这样就可以达到改变输出分辨率的需求。

ffmpeg的sws_scale函数可以一次性的实现输入图像和输出图像之间分辨率以及颜色空间的转换。在这里如果发现输入输出分辨率不同,就用sws_scale函数替换掉原来plane_copy,plane_copy_interleave函数。在计算量几乎不变的情况下(缩放计算稍微增加一些计算量,但一帧数据读写操作没有增加),完美实现改变输出分辨率的功能。

http://blog.csdn.net/huibailingyu/article/details/43206107

x264改变输出分辨率的算法<转>的更多相关文章

  1. ubuntu添加自定义vga输出分辨率

    Ubuntu有点折腾人....但是在折腾之后发现它更加方便,而且懂得更多的东西 最近在调试一个视频采集芯片的驱动,主要是接收vga输入和hdmi输入,在实验的过程中遇到了一个恼火的问题,就是同一台电脑 ...

  2. (64)Wangdao.com第十天_JavaScript 对象的 toString() 方法改变输出

    JavaScript 对象的 toString() 方法改变输出 在平常,我们 console.log(对象);    // 会打印 [Object Object] 但是我们想要更详细的输出,此时,我 ...

  3. JPEG压缩图像超分辨率重建算法

    压缩图像超分辨率重建算法学习 超分辨率重建是由一幅或多幅的低分辨率图像重构高分辨率图像,如由4幅1m分辨率的遥感图像重构分辨率0.25m分辨率图像.在军用/民用上都有非常大应用. 眼下的超分辨率重建方 ...

  4. linux终端c语言改变输出字体颜色

    Linux下C改变输出字体颜色 例: #include int main() { printf("\033[31mThis is RED.\n\033[0m"); return 0 ...

  5. CNN:扩张卷积输出分辨率计算

    扩张卷积(Dilated convolutions)是另一种卷积操作,也叫做空洞卷积(Atrous convolution).相比于普通的卷积,相同的卷积核,空洞卷积能够拥有更大的感受野. 相同的卷积 ...

  6. CNN:转置卷积输出分辨率计算

    上一篇介绍了卷积的输出分辨率计算,现在这一篇就来写下转置卷积的分辨率计算.转置卷积(Transposed convolution),转置卷积也有叫反卷积(deconvolution)或者fractio ...

  7. CNN:卷积输出分辨率计算

    卷积是CNN非常核心的操作,CNN主要就是通过卷积来实现特征提取的,在卷积操作的计算中会设计到几个概念:步长(strides).补充(padding).卷积核(kernel)等,那卷积的输出分辨率计算 ...

  8. shell中使用echo命令改变输出显示样式

    文本终端的颜色可以使用“ANSI非常规字符序列”来生成.举例:echo -e "\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色,前景白色,闪 ...

  9. python改变输出字体颜色==>colorama

    colorama是python第三方库中一个可以改变输出流颜色的玩意儿, 安装可以通过: pip install colorama 简单介绍 from colorama import Fore, Ba ...

随机推荐

  1. 配置Spring Boot通过@ConditionalOnProperty来控制Configuration是否生效

    Spring boot中有个注解@ConditionalOnProperty,这个注解能够控制某个configuration是否生效. 具体操作是通过其两个属性name以及havingValue来实现 ...

  2. 面筋: 奇虎360 c++ 后台开发 实习生 面试

    投的是360上海的商业化部门,岗位是C++服务端开发实习生,记录一下面试历程: 视频面试,但是是有代码框让你写代码的. 一面: Q:先说一下个人信息,做过的项目 A:.......... Q:先写个翻 ...

  3. C++轮子队

    团队Github地址:https://github.com/Pryriat/2048.git 团队展示: 队名:C++轮子队 队员组成: 黄家承(队长)              学号:3116005 ...

  4. 201621123005《Java程序设计》实验总结

    201621123005<Java程序设计>第七次实验总结 1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最 ...

  5. New Concept English Two 11 28

    $课文26 最佳艺术评论家 256. I am an art student and I paint a lot of pictures. 我是个学艺术的学生,画了很多画. 257. Many peo ...

  6. (转)高并发Web服务的演变——节约系统内存和CPU

    一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...

  7. UOJ117. 欧拉回路【欧拉回路模板题】

    LINK 题目大意 就是让你对有向图和无向图分别求欧拉回路 非常的模板,但是由于UOJ上毒瘤群众太多了 所以你必须加上一个小优化 就是每次访问过一个边就把它删掉 有点像Dinic的当前弧优化的感觉 注 ...

  8. CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑等

    Mac OS的一些:   华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 俪黑 P ...

  9. WinForm获取当前路径汇总

    Winform获取应用程序的当前路径的方法集合汇总,值得收藏备用 具体如下, //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembl ...

  10. flask第二十五篇——控制语句

    有兴趣的请加船长公众号:自动化测试实战 先和大家强调一个发邮件的问题 # coding: utf-8 import smtplib from email.mime.text import MIMETe ...