毕业于上海大学通信与信息工程学院,从事流媒体和视频编解码的研究与开发工作; 研究领域包括视频编解码标准、视频处理和流媒体技术、移动互联网技术等。
帧内预测的参考像素值的获取在标准文档的8.4.4.2.2中指明。 举例说明,当前demo中,我们用来单步调试的第一个CU为64×64像素大小,那么参考像素由两部分组成,一部分包含2×64+1=129个,另一部分包含2×64=128个像素。
继续上一个section所讨论的问题。在section 33中讨论了HEVC帧内预测的几种不同模式,代表这几种模式的函数xPredIntraPlanar、xPredIntraAng和xDCPredFiltering调用的位置位于Void TComPrediction::predIntraLumaAng()中,所以也可以说,在一个PU内,函数Void TComPrediction::predIntraLumaAng实现了亮度分量的帧内预测。
在研究代码的过程中,调试运行是一种非常有效的方法。我们常用的Visual Studio建立的工程可以很方便地对程序进行调试运行。但是对于FFMpeg这样的工程,想要进行单步调试就没这么容易了。
在之前,我们成功地使用mingw+msys在windows平台下编译FFMpeg,并生成了ffplay.exe。现在再在Ubuntu平台上重新编译一次。
现在很多与视频相关的开源软件都是在Linux下编译的,因此在深入研究这些软件之前,有必要对PC上安装Ubuntu的方法做一个记录。我们使用的软件是VMWare Workstation 10.0.2和Ubuntu 12.04.3这两种软件都可以很容易地在网上下载到。
HEVC中一共定义了35中帧内编码预测模式,编号分别以0-34定义。其中模式0定义为平面模式(INTRA_PLANAR),模式1定义为均值模式(INTRA_DC),模式2~34定义为角度预测模式(INTRA_ANGULAR2~INTRA_ANGULAR34),分别代表了不同的角度。
寄存器是CPU中用于高速存取暂存数据的存储部件。通过改变寄存器中的数据,可以对CPU的行为进行控制。对于8086CPU,内部共有14个寄存器,位宽均为16位,分别是AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW。
1、原理 在应用程序成功启动后,应用程序就开始由外部事件进行驱动。应用程序不断获取事件,并作出响应并更新用户界面,然后等待下一个事件。
1. 总线 CPU对存储器的读写操作是通过链接CPU同其他芯片的导线完成的,这样的导线即称作总线。根据传输的信息的不同,总线在逻辑上分为地址总线、控制总线和数据总线3大类。
在一个compressSlice()中,在compressCU函数中实现对一个CU的编码,其中主要进行了CU的初始化,以及实际的编码操作。 Void TEncCu::compressCU( TComDataCU*& rpcCU ) { ...
基本概念 Javascript是一种基于事件和对象的脚本语言,其特点有:(1)安全性,不允许访问本地硬盘,只做信息的简单动态交互;(2)跨平台性。
通过解码器代码的研究,已经对HEVC的编解码技术有了一个初步的认识。现在我们就对照着编码器的代码进一步理解HEVC视频编码算法的各个技术细节。 编码器在整个HM解决方案中的工程名为TAppEncoder,入口点函数位于encmain.
1、HTML中实现超链接 超链接以标签实现,具体方法如: 无标题文档 打开百度 执行后发现网页中出现了“打开百度”的链接并链接到标签中的网址。
1、HTML简介 HTML语言,即超文本标记语言,HyperText Markup language,是用作web开发的最基本语言。HTML语言用一个个的标签定义;所谓标签,就是一对之间组合的信息。
上篇简单总结了如何在一个视图控制器中建立一个列表视图UITableView来显示信息。其最核心概念,在于设置表视图的代理和数据源,并实现其协议规定的方法。
列表视图,顾名思义就是将数据的内容用列表的形式显示在屏幕上的视图。在ios中列表视图以UITableView实现,这个类在实际应用中非常的频繁,但是对于初学者来说不是非常容易理解。
今天在做一个windows平台的小工具顺便熟悉一下windows开发的一些基础知识,在这个过程中,发现了MFC使用了一种数据类型叫做COleVariant类型,感觉比较新鲜,赶忙到网上查一下,做一下记录,以备以后查看。
一个CU结构可以认为是编码过程中作为实际处理过程的一个单元,标准文档的7.3.8.5节说明了CU的语法结构,如下图: 这个结构中,第一个元素cu_transquant_bypass_flag表示是否跳过scaling和变换过程,如果该元素不存在则默认为0。
对于刚刚接触iOS开发不久的新手来说,UIView中的frame、bound和center的确容易产生思维的误区,尤其是想要对视图类的bound这个概念若想要理解深入,真的要花一番功夫。
在开始研究这部分代码之前,重新回顾一下理论部分。 众所周知,H.264及其之前的编码标准中,VCL层的核心结构称作“宏块”(MacroBlock, MB),大小为16×16像素。
const关键字来源自constant,即是“常数、常量”的含义。在C/C++中,用于限定一个不能改变其值的变量。const类型的对象必须在定义的时候进行初始化(可以在编译时或者在运行时),并且一旦初始化完成后,这个值就不能再被改变。
前言:这段时间一直在研究一个项目就是改如何在LAV Video中加入DXVA1.0的相关功能。在LAV Filter中已经叫好地实现了DXVA 2.0的相关功能,但是我们知道DXVA 2.0仅能支持Windows Vista以上版本的操作系统。
1、Set/MultiSet容器的定义和创建 Set即集合类,可以在程序中按照次序来保存一组数值。在集合中,元素的关键字和数据二者相同,该集合本质上就是一个有序的排列。
STL提供的list容器实现了双向链表的功能。因此,list容器中的各个元素都是双向链表中的节点,可以很方便地插入和删除元素,但是无法对容器中的元素进行随机存取,必须从容器的头部或尾部遍历。
deque是一种双端队列容器,与vector一样,也可以看做是一种动态数组形式。与vector不同的是,deque可以高效率地在头部和尾部插入/移除元素,而在中间进行同样操作则效率较低。
经过了前面一段时间的研究,现在大致将这第一个宏块SAO由码流到语法元素值的解析过程完整整理一下。这里没有太多原理部分,更多的像是一篇流水账一样,聊作记录。
1、概念: 所谓键值观察者,是一个对象获取其他对象特定属性变化的通知机制。看上去KVO同通知机制类似,而不同点在于KVO没有提供一个所谓的通知中心为所有的观察者提供变化通知,而是当变化发生时,通知直接送达正在观察的对象。
在实现了利用控制台程序播放指定视频文件之后,接下来开始尝试编写一个带有界面的视频播放器,可以选择播放的视频,控制音量等更多的功能。为简单起见,界面的框架用MFC实现。
在前面的这篇博文中,我们开始利用的手动建立Filter Graph,已经完成了Splitter Source Filter和Audio/Video Decoder的建立和链接。
向量容器vector是STL中提供的最常用的容器之一,提供了随机访问数组的功能,可以实现对内部元素的随机访问以及方便地在末尾插入和删除数据。vector可以十分方便地实现数据结构中数组、堆栈功能,而且不需要手动编写管理数据结构的相关函数。
解析完成条带头之后下一步的工作是解析条带数据slice_segment_data。slice_segment_data数据主要由一个个的Coding_Tree_Unit(CTU)组成。
采用NSUserDefault类可以实现对系统的“default”信息进行操作的方法,简而言之可以理解为一种简单数据的持久化方法。除此之外在iOS中还存在多种保存数据的方法,如sqlite、core data等。
DirectShow通过事件通知(Event Notifation)机制使应用程序与Filter Graph Manager之间实现交互控制。当filter状态转换、播放完成、出错或者重绘视频窗口等时刻会发出特定事件消息,又filter graph manager处理或者转发给应用程序处理。
前文讲了一些开发DirectShow的基本配置方法以及一些基本的开发过程,如如何创造一个filter并加入filter graph中。这里继续上文的步骤讨论如何得到filter的pin,以及如何连接两个filter。
DiectShow工程的开发需要提前编译相关的两个静态库,具体方法在前文【视频处理工程】1、DirectShow基本概念中已有叙述。这里假设我们的开发环境是Windows 7+Visual Studio 2010 Ultimate,来看如何利用DirectShow开发视频处理的应用程序。
容器类是可以包含其他对象的类。STL中提供的较为常用的容器类有向量、链表、队列、集合和图等,每一种容器类都是一个模板,可以包含各种类型的对象。这些容器可以分为序列式和关联式两大类。
1、关于iOS设备上的摄像头 实现在摄像头上获取图像的方法:使用UIImagePickerController。这个视图控制器不使用storyboard生成,因此需要使用alloc、init方法手动建立。
关于HEVC的前25篇博文全文发表在新浪博客,地址为:http://blog.sina.com.cn/s/articlelist_1376260467_0_1.html。
一、STL简介 1、什么是STL: 标准模板库(Standard Template Library , STL)是一个C++通用库,其目的在于将组建标准化,节省开发者的时间和精力。
概念 DirectShow所采用的是一种模块化的结构,其基本单元是一类成为filter的COM对象。DirectShow提供了多种预定义的标准filter组件,同时开发者也可以根据需要开发自己的个性化filter。
所谓的DirectShow,通常指的是微软提供的Microsoft DirectShow API,这是一种可用于Windows平台上处理音视频回放、采集等工作的应用的流媒体框架。
我们知道,为了更加方便地处理内存管理问题,将开发人员从繁琐的内存的分配和释放工作中解放出来而专注于产品和逻辑,iOS提供了一种有效的方法,即自动引用计数ARC。
1、模板的概念: 模板并非是实实在在的类或函数,而是一个类或函数的描述,使之可以在编译时定义所需处理和返回的类型。模板可以重用逻辑相同而数据类型不同的代码以减轻开发和维护的工作量和难度。
在开始这篇博文之前,我心里一直忐忑不安七上八下。因为从最初的安装编译环境开始一直到最终编译完成,这整个工程堪称规模宏大,而且路途中陷阱重重,稍不注意就有可能前功尽弃。
几乎所有体验过iPhone、iPad的用户都会为iOS系统精巧的设计、流畅的运行和丰富的应用选择所叹服,因此无论其所为的“市场份额”被Android抢占了多少,亦无论有多少人对iOS7的新界面在不停吐槽,iPhone系列在消费者眼中依然是高端智能手机无可争议的代表作。
在C/C++的开发工作中,我们经常会新建一个控制台工程来测试某个与界面无关的功能。在处理与字符串相关的内容时,我们会遇到一个很麻烦的问题,即控制台程序不支持使用CString类,而这个类由于对字符串处理功能相当完善,因此用途还是非常广泛的。
有时候在开发过程中我们经常会遇到这样的问题,即本来编译运行都OK的程序,不知道修改了那个配置,突然变得无法编译,或者运行时出现了各种各样的bug。此时的办法只能是硬着头皮去一个个地修改,或者干脆全部推倒重来。
上文中记录了在手写代码实现UI的情况下,界面切换时不同视图控制器之间数据传递的机制。显示和消除界面使用的函数时presentViewController和dismissViewController函数,数据传递则可以采用代理、通知等机制。
这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的。本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据。
1、类的构造函数、析构函数和赋值函数:分别用于处理对象的创建、销毁和赋值操作 构造函数和析构函数有固定的函数名(与类名相同,析构函数前面再加上~),都没有返回值。