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. 也来说说C#异步委托 (转自 Rising_Sun)

    前些日子,看到园子里面有人用老王喝茶的例子讲解了一下同步和异步,虽然没有代码实现,但是能够通俗易懂的讲解了同步.异步.阻塞.非阻塞的关系了,今天借题发挥,用一个热水器加热洗澡的例子来具体演示一下C#使 ...

  2. Java虚拟机体系结构分析

    下图是JAVA虚拟机的结构图: 每个Java虚拟机都有一个类装载子系统,它根据给定的全限定名来装入类型(类或接口).同样,每个Java虚拟机都有一个执行引擎,它负责执行那些包含在被装载类的方法中的指令 ...

  3. powerdesigner安装图解

  4. 004PHP文件处理——目录操作:glob rewinddir opendir readdir

    <?php /** * 目录操作:glob rewinddir opendir readdir */ //glob 以数组形式返回,参数1这个目录的所有内容,可以置顶返回的具体类型 //只遍历输 ...

  5. jsr303 参考表

    下面是主要的验证注解及说明: 注解 适用的数据类型 说明 @AssertFalse Boolean, boolean 验证注解的元素值是false @AssertTrue Boolean, boole ...

  6. 为什么样本方差自由度(分母)为n-1

    一.概念.条件及目的 1.概念 要理解样本方差的自由度为什么是n-1,得先理解自由度的概念: 自由度,是指附加给独立的观测值的约束或限制的个数,即一组数据中可以自由取值的个数. 2.成立条件 所谓自由 ...

  7. iOS笔记之ScrollView

    ScrollView三个基本的要理解的属性: contentSize The size of the content view.所以很好理解,contentSize也就是scrollView可滚动的区 ...

  8. JSP Unable to compile class for JSP

    今天刚弄好MyEclipse环境,试了一下jsp的创建,然后就出现了一个很令人纠结的问题. 文档目录如下: Jsp代码如下: <%@page import="com.pd.Person ...

  9. 归并排序算法-Java实现

    简介: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序 基本思想: 将一个无序数组,利用 ...

  10. pyqt5事件与鼠标事件

    一,每个事件都被封装成相应的类: pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等.而它们的基类是QEvent. 二,基类QEvent ...