硕士学位论文-基于i.mx27硬件解码的播放器的实现.doc_第1页
硕士学位论文-基于i.mx27硬件解码的播放器的实现.doc_第2页
硕士学位论文-基于i.mx27硬件解码的播放器的实现.doc_第3页
硕士学位论文-基于i.mx27硬件解码的播放器的实现.doc_第4页
硕士学位论文-基于i.mx27硬件解码的播放器的实现.doc_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江大学硕士学位论文 摘要基于i.MX27硬解码的播放器的实现 摘要随着电子技术的不断发展,嵌入式已经是当前社会中的一个热门话题。同时也有越来越多的嵌入式商品在走入人们的生活,特别是在多媒体应用方面。飞思卡尔推出i.MX27芯片的目的正是为了迎合这个多媒体应用的热潮,本文提出的播放器的实现也正好符合了社会的需求。播放器涉及的知识范围特别广,如编解码技术,数据分离技术等等,所以为了简化实现方案,本播放器只针对特定的文件进行处理,首先必须是avi容器文件,而且其中的视频编码方式必须是mpeg4或h.264(由i.MX27的vpu模块决定)其中之一,音频部分的编码方式必须是mp3。虽然涉及到音视频的编解码技术,但是本文并不对这一技术做深入的研究,而是把重点放在播放器框架的建立,音画同步问题处理,i.MX27视频处理模块的调用等问题的解决,在其中更为详细研究了视频处理模块。本项目涉及的文件很多,所以采用模块化的处理方法。在linux下表现为库,把某些完成特定功能的文件链接成为一个库,向外部提供特定的接口,从而方便主程序的调用。这里涉及到Avi数据分离器库,mp3解码库和vpu库。采用库的优点在于可以对每个库进行检测,更加方便于调试,而且可以把程序分解成模块的方式,使开发流程更加清晰。嵌入式系统并不像pc机,有这么高的处理频率,可以不延时的处理大量的图像数据。所以即使在i.mx27融入了视频处理模块(vpu)的情况下,也只能对有限的mpeg4和h.264视频编码方式进行解码,播放形式比较单一,但是不影响大多数的视频文件的播放,必要时可以用特定的工具进行转化。本系统应用于电梯口视频播放,公交站台视频播放等多媒体应用领域。在嵌入式系统应用范围不断扩大,普适计算、云计算等新的概念不断推出的今天,该系统将会得到更加广阔的应用前景。通过对该项目的实现,使我对模块化的编程方法有了进一步的认识,不仅可以理清编程思路,方便调试,而且可以模块重用。对于视各种编码格式,容器格式,编解码的原理,数据存储的原理,还有播放器的播放原理等等方面都有了深入的认识,而且还特别的对linux下的文件的组织,层次结构的安排有了自己的理解,为以后开发更大的项目总结了重要的经验。关键词:视频处理模块,音画同步,音频编解码,视频编解码,库AbstractWith the constant development of electronic technology, embedded is a very hot topic in todays society. At the same time, we also have seen an increasing number of embedded products in peoples lives, especially in multimedia application. The purpose of Freescales i.MX27 chip is also aimed at the multimedia application to meet the upsurge, that this paper presents the realization of players is in line with the needs of the community. Players that involve in the scope of knowledge is particularly abroad, such as codec technology, the data separation and so on. So players only deal with some specific document that simplifies the realization of the program.First of all,this file must be avi files, and which the video encoding must be mpeg4 or h .264 (The i.MX27 module vpu decision), and the audio must encoded whith mp3.Although related to audio and video codec technology, this paper does not infiltrate into the technology, focusing on the establishment of the framework player, picture synchronization, call i.MX27 video processing module, in which detailed analysis of the video processing module. The project involves so much code, so that we use modular development. It is library in linux.Link the document that for one certain specific function, provide interface c to the external call, in order to facilitate the call of the main program. There are Avi data separator library, mp3 decoder library and vpu library. The advantages of using libraries are that you can test each library, and debug easier, and you can break the procedure into modules and make development more clearly. Embedded system does not like personal computer deal in such a high frequency and delay with a large number of image data. Therefore, even the i.mx27 have video processing module (vpu), it is also limited on encoding mpeg4 and h.264, but does not affect play most of the video, you can use specific tools to translate if it is necessary. This system can be used in the video playe in elevator, in bus station ,such as multimedia applications.Because of the increasing of embedded systems applications, some new concepts appear,such as pervasive computing, cloud computing, this system must be more widely used. I have further understanding on modular programming through the realization of the project.It not only have advantages on sort out programming ideas, but easy debugging and modules reuse. Accumulate experience for the major projects in the future.Keywords:Video processing unit(vpu), synchronized picture, audio codec, video codec, library iv浙江大学硕士学位论文 目录目录摘要iAbstractiii第1章 绪论11.1 课题背景11.1.1 国内研究现状21.2 研究内容31.3 拟解决关键问题51.4 本章小结6第2章 视频处理芯片72.1 i.MX27芯片72.2 视频处理模块82.3 本章小结10第3章 视频处理模块应用113.1 视频编解码处理过程113.2 视频编解码处理完成检测133.3 视频编解码处理实例143.4 帧缓冲173.5 工作缓冲区203.6 数据流缓冲区213.7 缓冲区需求分析223.8 视频编码与译码设计233.9 本章小结23第4章 视频处理单元244.1 视频处理单元软件操作244.2 Vpu库函数254.3 vpu驱动测试264.4 本章小结27第5章 视频输出单元285.1 液晶显示器驱动285.2 软件操作295.3 Linux菜单配置选项295.4 本章小结31第6章 音频输出单元326.1 驱动介绍326.2 驱动测试326.3 ALSA工具346.4 本章小结34第7章 总体实现方案设计及实现过程357.1 修改官方VPU测试程序357.2 移植Mplayer387.3 本章小结39第8章 播放器的实现408.1 文件结构分析408.2 各模块程序分析438.2.1 Vpu模块438.2.2 avi分离器模块468.2.3 mp3解码模块488.3 代码流程518.4 音视频同步实现548.5 播放器的测试568.6 本章小结57第9章 总结与展望58参考文献59作者简历60致谢61图目录图 1.1播放器总体流程图4图 2.1i.MX27内部框图8图 2.2视频编解码器体系结构图9图 3.1 视频编解码器应用软件接口框图11图 3.2解码过程状态图12图 3.3 H.264编解码流程实例16图 3.4帧缓冲配置18图 3.5小端模式下帧缓冲地址映射19图 3.6一路编码和三路译码23图 5.1LCD驱动内核配置30图 7.1视频解码播放流程图36图 7.2融入数据分离器的视频解码播放流程图36图 7.3没有同步机制的播放器流程图37图 7.4完整播放器流程图38图 8.1vpu模块结构操作流程图46图 8.2avi模块接口调用流程48图 8.3main函数流程图52图 8.4Decodevideo函数流程图53图 8.5DecodeAudio函数流程图54表目录表 3.1RunCodStd标准注册值13表 3.2缓冲需求20表 3.3工作缓冲组织21表 3.4缓冲需求概况22IV浙江大学硕士学位论文第1章 绪论第1章 绪论1.1 课题背景一个播放器的实现融合了很多关键的技术,这些技术都可以在特定的领域里面形成一门学科,而这些技术的进步都是由个个专属领域的人不断钻营后的劳动成果,是结合了很多程序员辛勤劳动的结晶。其中主要的技术包括有以下几个:1.播放器的架构技术2. 音视频的编解码技术3. 音视频容器技术。当然还有很多其他必备的技术,但是不是重点,这里不加以列出。现在市场上播放器的数量很多,但是其中大部分是国外的产品如:Realplayer,Mplayer,Medioplayer等等。这些播放器都是非常成熟的产品,但是产品的主要功能是面向应用的,也就是说是方便与客户使用而设计的,由此而产生的问题是并没有为编程人员留下很好的编程接口,基于此,后来又发展出了一种新的面向编程人员的播放器技术,Gstreamer技术。简单的说, GStreamer是一个开源的多媒体框架库。利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理。 应用程序可以透明的利用解码和过滤技术。开发者可以使用简洁通用的接口来编写一个简单的插件来添加新的解码器或滤镜的技术。基于Gstramer技术的软件也很多如:Acast,Amarok,Avisynth 3.0等。音视频的编解码技术已经是一项经历了漫长历史路程的技术。音视频的编解码的初衷就是为了降低音视频的存储空间而提出的。假设用MP3压缩率10:1压缩一个WAV文件,也就是说一个10M的WAV文件只要1M的MP3格式文件就可以存放了,而且音质上并没有很大的损失,这就大大的减少的存储空间,很好的达到了一个性能和空间上的平衡。在视频压缩方面道理也是大同小异的,但是视频压缩比音频压缩更加的复杂,要考虑前后两帧的动静问题,但是其实质也是用性能换取空间。随着计算机CPU性能的不断提高和DSP技术的发展,对音视频编解码速度和效率上也明显的提高,将会有更多更好的压缩率更加高的编解码技术的推出,可以说在音视频的编解码技术领域是百花齐放的一种状态。一个MP3文件包含了容器技术和MP3编码技术。容器就是文件的封装方式如:容器是封装方式比如,AVI ,MPG ,MKV,更加通俗一点说,容器就是数据的组织形式,文件中,每个特定字节和字节块分别赋予特定的含义。采用了什么容器可以由文件的后缀名看出,比如一个SONG.AVI的文件采用的就是AVI容器,是一种音视频交叉存储的容器格式。容器的发展也是朝着多元化的方向,并没有一种统一格式的容器穿在,当前主要容器有 AVI ,MPG ,MKV等等,但是相信未来会出现更多容器。1.1.1 国内研究现状国内的计算机技术起步较西方晚些,所以在播放器所涉及的的个个领域内的研究都还没有西方国家来的成熟,其表现为大多数的技术专利都掌握在美国等发达国家手中,所以在认清楚当前国内研究的现状同时,奋起直追才是我们的当务之急。国内播放器研究技术上的落后归根到底来说是整个计算机研究上的落后。就从计算机编解码技术的方向上说,国内也有属于自己专利的编解码技术,但是这些编解码技术大多数存在技术不够成熟,应用范伟小,影响力不大等缺点,多是内部公司采用而没有做到广泛的推广,这也是影响技术走向成熟的一个重要原因。但是对于国内视频编解码技术在未来的发展还是有相当的信心。目前视频传输可以选择的国际信源编码标准有:MPEG-2,MPEG-4,H.263和H.264等随着互联网的不断普及,使用互联网的人数也在不断的增加,每天的数据量是难以估计的,在这大么大的流量面前,势必造成网络的堵塞甚至于瘫痪,这就要求国内科研人员不断的提升编码技术的压缩率,减轻网络负载。目前的视频传输还缺乏统一的视频编码标准有多种的编码标准可以选择而有些系统,即使选择了同一种编码标准,比如MPEG-4,也因为各自为了具体的实现要求,对其中的部分编码方式进行了修改,而导致系统之间无法互连互通,同时考验我们的科研人员从中找到更好的解决互连互通的方法。1.2 研究内容本设计基于i.MX27芯片的开发板,在对视频的硬解码和音频的软解码的基础上来实现多媒体播放器的基本功能研究的目标是:根据芯片的特点和播放器实现的过程,探讨播放器实现的具体框架和实现的细节,进而实现播放器代码的编写工作,最后完成对播放器的测试评估完善工作因为i.MX27芯片与其他一般的ARM芯片不同之处就在于,它提供了一个硬件解码器,简称为VPU,用于解码MPEG-4和H.264等常见的视频编解码方式,所以在播放器的实现前必须充分了解VPU的调用方式,当然这只是和播放器相关的最为主要的一点,要完成播放器还要了解i.mx27播放器的媒体处理模块及其他配合使用的模块的调用方式。 所以,总的来说就是对与i.mx27应用层接口的研究,就是驱动和应用接口的研究。播放器虽然是一个比较复杂的项目,但是音视频编解码和容器上都已经有了成熟的技术,并不需要创造一种新的编解码形式来完成播放器,而且在代码的编写是也奉行拿来主意,所以把研究内容重点的转移到了播放器的框架和一些具体的实现细节上。本文要实现的播放器的框架由以下几部分组成:1.数据的分离器单元2.视频硬件解码单元3.视频数据输出单元4.音频的软件解码单元5.音频数据输出单元6.数据输出同步控制单元流程图如下:图 1.1播放器总体流程图图1.1所示为一个播放器实现的系统框架图,其中的数据分离器单元,i.MX27硬解码器单元,音频软解码器单元都采用现有的技术,不是工作的重心,所以从中可以看出,本文主要研究的就是个单元之间的接口如:音视频数据流和数据分离器之间的接口,i.MX27硬解码器和视频数据输出单元之间的接口等等,另外的更加主要的研究内容是那些没有现成技术的单元如:视频输出单元,音频的输出单元及音视频同步处理单元。单元之间的接口是研究的内容之一。i.MX27硬解码器有自己一定的数据输入和数据输出形式,在调用时候一定要按照规定的形式输入和输出,而视频数据输出单元也同样的有一定的数据输入形式和输出形式,所以其中的i.MX27硬解码器输出再到视频输出单元的输入就是它们的接口,这些接口在代码上可能就表现为一个缓冲或是一个函数的调用等等形式。在个个单元中音视频同步处理单元是一个比较重要的单元,也是一个难点单元。播放一个视频并不是简简单单的把数据送到设备上就可以。如果视频数据和音频数据送的不同步就会出现音画不同步的现象,这不是正常的播放器应该有的效果,所以该单元的主要任务就是在送出一帧画面数据的同时送出相应的音频数据,从而达到画面和声音的协调。在以上研究,以及对典型历程进行了分析的基础上,给出了基于i.MX27播放器的具体实现,并且进行了编码和调试工作,获得了良好的效果,为以后数字视频通信系统的进一步设计打下了基础,具有广阔的应用前景和实用价值基于i.MX27硬件平台的视频编解码系统的设计方案可用于可视电话,网络视频监控等应用场合,作为其中的视频压缩编解码核心模块也可用软件方法实现,但是效率没有硬件实现来的好在这个过程中总结了基于i.MX27视频编解码技术开发的一些方法和技巧,可为今后的基于i.MX27系统软件的开发提供借鉴1.3 拟解决关键问题iMX27硬解码器单元vpu的数据输入和输出问题是一个首先要解决的问题。由于i.MX27在解码方面的独特性决定了这是必须解决的一个关键问题。在音频软解码器单元的输入和输出上,并没有独特性,它不是基于特定硬件平台的解码方式,所以它采用的是软件解码方式,几乎在所有的ARM平台上都能应用,但是由于i.MX27配有了视频硬件解码单元,只有通过官方资料才能了解到具体的调用方式,存在一定的困难度,也是这个播放器区别于其他播放器的地方,所以在实现播放器前,要仔细的研究这一问题。音视频同步处理单元是一个比较重要的单元,也是一个难点单元,更是播放器实现的关键问题之一。播放一个视频并不是简简单单的把数据送到设备上就可以。如果视频数据和音频数据送的不同步就会出现音画不同步的现象,这不是正常的播放器应该有的效果,所以该单元的主要任务就是在送出一帧画面数据的同时送出相应的音频数据,从而达到画面和声音的协调。1.4 本章小结在当前的国内的计算机技术和国外有一定的差距的情况下,应该更多的培养计算机人才,发展科学创新的计算机技术。本章也同时介绍了本文研究的内容重点在个个单元之间的接口和视频输出单元,音频的输出单元及音视频同步处理单元。其中的单元接口和音视频同步处理单元是重点和难点,也是本文要解决的关键问题。6浙江大学硕士学位论文第2章视频处理芯片第2章 视频处理芯片2.1 i.MX27芯片将视频编解码功能嵌入到多媒体应用处理器中已经成为一个趋势飞思卡尔半导体DragonBall家族的最新成员i.MX27多媒体应用处理器,片内集成H.264/MPEG全双工硬件编解码视频处理单元,可广泛应用于视频监控、网络摄像机、数字录像机、网络广告机、V2IP可视电话、IPTV机顶盒、智能手机、便携式多媒体播放器、移动电视等产品 i.MX27处理器以i.MX21为基础进行设计,基于ARM926EJ-S处理器内部的硬件编解码模块性能强劲,可以达到H.264/MPEG4编解码D1分辨率:720X57625fps;720x48030fps;全双工编解码同时进行可以达到VGA分辨率:640x48030fps而且,i.MX27可以同时进行H.264VGA30fps的编码和MPEG4VGA30fps的解码;也能MPEG4VGA30fps编码和H.264VGA30fps解码同时进行i.MX27支持多方网络视频会议和多种视频格式编解码:H.264/AVC base line profile encoding/decoding;MPEG-4 part-II simple profile encoding/decoding;H.263 P3 encoding/decoding;多方会议:最多可同时处理4路图像/位流的编解码;全双工多格式支持:在做MPEG4编码的同时可以做H.264的解码;支持码率控制,支持CBR和VBR和某些含视频编解码功能的嵌入式处理器相比,i.MX27的硬件编解码是通过CPU内部ASIC实现的,而不是通过集成ARM和DSP的双核SOC实现因此,i.MX27的功耗更低,系统整体性能更强i.MX27处理器还带有eMMA多媒体加速器模块,包括prp预处理和pp后处理两部分,用来进行图像的缩放、旋转、镜像、YUV/RGB数据转换等i.MX27处理器主频400MHz,CPU内部集成有安全加密算法硬件加速器,支持DDR内存,90纳米生产工艺,动态电源管理技术等,使得基于i.MX27的解决方案极具竞争力i.MX27还带有高速USBOTG、高速USBHOST、快速以太网控制器、SD/SDIO、ATA硬盘控制器等接口下图是i.MX27的CPU内部框图:图 2.1i.MX27内部框图 i.MX27支持NAND Flash启动,可同时连接LCD和Smart LCD两块显示屏,可同时支持三个MMC/SD/SDIO接口,内含索尼的MemStick Pro控制器,高达六个UART接口,两个I2C,三个CSPI,同时支持AC97和I2S声卡因此,i.MX27在ARM9内核基础上最大限度地实现了低功耗和高性能的完美结合i.MX27既是一个功能强大的应用处理器,同时又是一个功能强劲的视频编解码处理器2.2 视频处理模块视频处理模块(VPU)是i.MX27芯片中的一个多媒体处理模块体系结构图如下所示:图 2.2视频编解码器体系结构图i.MX27设备的视频编解码模块支持全双工视频解码处理和多媒体部分调用它集成了多个视频的处理标准,其中包括H.264BP,MPEG-4 SP和H.263 P3(包括附件I型,J型,K型和T型)视频解码器使用了两个总线接口协议:用ip总线做寄存器的访问控制,用AHB总线进行数据传输在视频编解码模块中使用3个记忆体元件:嵌入式记忆体,系统内部内存和系统外部存储器嵌入式记忆体括两部分寄存器文件,单端口的寄存器文件,双端口SRAM和单端口SRAM系统内部存储器是用来增加编解码器的运动估计性能系统外部存储器是用来储存输入/输出图像像素数据和位流数据视频编码模块,主要包括两个硬件内容: 视频编解码处理器:这是视频编解码器处理的核心它支持多种视频处理标准,并集成了32位的AXI接口的编码和解码功能 视频解码器接口:由两部分组成,在32位的AXI总线接口和三个32位的AHB-lite主总线接口(两个读通道和一个写通道)之间响应总线协议其他在32位的APB总线和IP总线之间的响应总线协议编码器和解码器处理共享数据路径中的视频编解码模块有一个嵌入式位处理器,这是用来控制硬件序列以及流处理整个编码或解码控制的过程在位处理器固件上运行主处理器只需要访问视频编码寄存器,初始化视频编码或设置在编码/解码帧的框架参数 在视频编解码模块有3个时钟域:ip总线时钟,视频编解码器的核心频率,以及AHB总线时钟在视频编码处理模块中,IP核心频率不同于AHB时钟和IP时钟全部时序逻辑只能使用上升沿时钟2.3 本章小结飞思卡尔推出的i.MX27处理芯片,针对嵌入式芯片多媒体应用方面出发。使得这款芯片在主频性能并不是很高的情况下,显示流畅的视频画面。特别是内部的视频处理模块(VPU),是该芯片的一大特点。10浙江大学硕士学位论文第3章视频处理模块应用第3章 视频处理模块应用图3.1表明位处理器和编解码硬件加速器的作用,以及与应用软件的接口。在框架层面,主处理器通过视频编解码提供的API与视频编解码器进行通信。为了让视频编码更加的灵活和可调试,所有与码流有关的过程都分配给位处理器。图 3.1 视频编解码器应用软件接口框图3.1 视频编解码处理过程视频解码器可以最多同时处理4个进程。每个进程可以编码或解码不同的格式的MPEG-4,H.263P3,H.264以及不同的过程。图3.2表明一种简化的编解码器运行过程的状态图。图 3.2解码过程状态图每个解码过程包括三类: *创建过程:软件创建和配置过程。 *正在运行的进程:在适当的时候例如,软件将开始具体的进程。适当时间的就是指在编解码器和图像编码器是在空闲状态或码流准备在外部存储器解码。 *退出过程:软件可以退出某个特定进程如果有一个以上的进程准备运行,每个进程必须被分配一个从0到3的不同的进程编号,RunIndex。编号是根据进程建立秩序来分配的。例如,当1个MPEG-4解码+1个H.264解码+1个H.263解码+1个H.264编码在同时运行时,MPEG-4的解码过程分配“0”,H.264解码分配“1”,H.263解码分配到编号“2”,和H.264编码分配到编号“3”。执行过程没有任何优先权规则,在初始化步骤建立了所有进程后,位处理器执行指定编号的进程。所有进程中执行以时间片方式轮换,一个过程完成了一帧的编码或解码后,另一个进程才能接着执行。结合进程ID,需要设置RunCodStd,以确定哪些编码标准是用于创建进程和创造进程是否用于编码图像或解码流。表显示了每个编码标准的专用RunCodStd值。所有这一切可以通过视频编解码器的API来完成。Coding standardRunCodStdMPEG-4/H.263 P3 Decoding0MPEG-4/H.263 P3 Encoding1H.264 Decoding2H.264 Encoding3表 3.1RunCodStd标准注册值3.2 视频编解码处理完成检测当一帧命令处理完成时候,视频编解码模块会产生中断信号或改变忙碌状态。因此,有三种方法检测是否解码/编码帧完成: *查询视频编解码中断状态寄存器。中断状态寄存器指示中断产生。 *查询视频编码忙状态寄存器。在解码/编码过程中,一旦忙状态位变成0 ,就表示解码/编码处理已完成。 *从系统级捕获中断信号,响应中断请求系统内的中断服务例程。 3.3 视频编解码处理实例图3.3显示了同时解码H.264码流的和编码一幅H.264格式图像的流程的一个例子。首先创建解码和编码过程并初始化,然后每一个进程交替执行PICTURE_RUN命令。更详细介绍如下。图 3.3 H.264编解码流程实例RunCommand = 1 (SEQ_INIT); RunCommand = 2 (SEQ_END); RunCommand = 3 (PICTURE_RUN);1.初始化视频编解码 -位代码下载:下载位处理程序到固件内存。 -设置初始参数:一般是配置位处理器,设置工作缓冲区基地址,位代码的内存地址,码流缓冲区控制等。 -运行位处理:运行位处理器初始化视频编解码器。 2.创建和初始化H.264解码过程 -设置SEQ_INIT参数:配置基地址和码流缓冲区的大小,帧缓冲器的基地址等。 -运行SEQ_INIT命令:启动H.264解码过程。 -等待BusyFlag = 0 :等待位处理器完成SEQ_INIT命令。-读返回参数:读取的功能解码码流,如图片所示和一些参考帧的视频编解码的API 。这样,主机可以准备所需要的帧缓冲器。 3.创建和初始化一个H.264编码过程 -类似H.264解码的流过程,除了读返回参数,编码帧缓冲区大小可以根据视频剪辑细节来设定。 4.运行H.264解码过程 -设置PICTURE_RUN参数:设定帧的目的地址。 -运行PICTURE_RUN命令:启动H.264解码过程。 -等待BusyFlag = 0 :等待位处理器完成PICTURE_RUN命令。它意味着一帧过程完成。该解码帧可以被发送到EMMA做进一步的处理。实际操作取决于应用程序。 5 .运行H.264编码过程-类似H.264流解码过程。编码过程应配置除了目的地地址外的帧源地址。 6.交替执行第4和5步骤。 -在执行解码过程前,如果流缓冲是空的主机应加载新的流数据到流缓冲,并根据申请更新帧目标地址。至于编码,下一帧应该在过程在运行时做好准备。 7 .停止解码过程 -运行SEQ_END命令,终止每一个进程。基本上,编码和解码的流程是类似的,尽管它们在固件版本上有些许的不同。3.4 帧缓冲本节描述帧缓冲的大小和内存映射的要求。帧缓冲区包括基址和步幅线。一幅完整的图像由Y,U和V部分组成。因此,图像帧有3缓冲器来对应每个组件。步幅线是在像素单元中亮度部分缓冲区的宽度,而且必须8的倍数。色度部分缓冲区步幅线是亮度部分的一半。视频编解码器模块支持11位步幅线的配置,可以大于或等于图像帧的宽度。图像尺寸和步幅线之间的关系如图3.4。YUV数据逐行存储。一个图像帧中的u部分存储在同一帧数据的y部分的隔壁。接着是v部分。紧随其后的是下一帧的yuv数据。图像大小和步幅线之间的关系还决定外部存储空间的编解码图像数据在内存的映射图。每一个YUV行数据之间,存在大小为(Stride_Line-Image_Width)的一些可选的闲置内存空间。它大于或等于零字节,但是不能大于(211-Image_Width)(因为Stride_Line是11bit宽)。图 3.4帧缓冲配置图3.4显示了帧缓冲的内存映射。除了基地址以外,帧缓冲中V和U的内存映射是一样的。 视频编解码器支持小尾和大尾系统。这意味着Y(0,0)在图3.4可以定位在bit 31:24 。用户可以通过视频解码器的API指定字节序。图 3.5小端模式下帧缓冲地址映射表3.2也显示在QCIF/CIF/VGA图形模式下需要的内存。对于H.264 ,所需要参照帧的大小依赖与支持水平。视频编解码器最多可支持H.264标准3.0水平,其中最大的解码图片缓冲区字节标准大小是3037.5。为了支持H.264的CIF 3.0级,使用16个参考帧时需要2524字节。Mpeg-4 encoderMepg-4 decoderH.264 encoderH.264 decoderQcifReference frames11116Current frames1010Reconstruction frames1121Display frame0101Total frames33418Picture size37kbytes37kbytes37kbytes37kbytesTotal frame size111kbytes111kbytes148kbytes666kbytesCifReference frames1112376kbytesCurrent frames1010Reconstruction frames1121Display frame0101Total frames3342Picture size148kbytes148kbytes148kbytes148kbytesTotal frame size444kbytes444kbytes592kbytes2672kbytesVgaReference frames1113037.5kbytesCurrent frames1010Reconstruction frames1121Display frame0101Total frames3342Picture size450kbytes450kbytes450kbytes450kbytesTotal frame size1350kbytes1350kbytes1800kbytes3937.5kbytes表 3.2缓冲需求3.5 工作缓冲区除了帧缓冲和固件内存外,还需要介于位处理器和编解码器处理之间的工作缓冲。该缓冲,为MPEG-4格式的AC/DC预测或H.264帧内预测重建像素行缓冲,为运行的多个过程保存上下文,流数据为MPEG-4部分数据H.264FMO/ASO等等重新排列缓冲。根据编解码器大小决定所需要的工作缓冲区的大小,标准和能力。例如,AC/DC预测缓冲区大小取决于图片的宽度,数据分割的最大数据流缓冲区的排序由最高码流图片的大小决定。工作缓冲区大小可能由于不同的固件版本而发生改变。当前版本的固件需要256字节的工作缓冲区,在解码/编码720576(D1类大小)高达10Mbps的数据的时候。它的大小可以通过视频编解码器的API设置。工作缓冲区的组织细节如表3.3所示。Working bufferDescriptionSizeStatic bufferUsed commonly in whole process/codescs48 kbytesTemp_pic for mpeg4 decodingAc/dc prediction buffer and bitstream reordering buffer for data partition16kbytesTemp_pic for mpeg4 encodingAc/dc prediction buffer and bitstream reordering buffer for data partition16kbytesTemp_pic for AVC encodingIntra-prediction buffer,tmo grout status buffer,and slice information buffer208 kbytesTemp_pic for AVC encodingIntra-prediction buffer72kbytes表 3.3工作缓冲组织3.6 数据流缓冲区主处理器已经在每个实例的基础上指派了数据流的缓冲区。如果视频编码器在一个过程中同时处理n-bitstream时,主机应该分配n个数据流缓冲区,并指定基地址和大小。这个外部的流缓冲区是“环形缓冲区”。主机必须把环形缓冲区的起始地址和缓冲区的大小写入位处理器中。目前的环形缓冲区的读或写地址由固件自动更新。在解码时,主机写入数据流被解码后位处理器读取数据流。在这种情况下,可能会发生数据流的覆盖或溢出,一旦发生,解码就会失败。为了防止覆盖或溢出,目前流读/写指针必须由主机和位处理器交换操作。位处理器写当前的环形缓冲区的读指针到内部寄存器,主机必须写当前环形缓冲区的写指针到内部寄存器。位处理器通过比较当前的环形缓冲区的读指针和写指针检查位缓冲是否为空(在没有溢出的情况下)。如果没有更多的码流数据是可用来解码(缓冲处于空状态),位处理器停止数据流解码,以防止错读码流,等待主机更新写指针,写入更多的流数据。主机在写入更多的码流数据到环形缓冲区之前必须检查当前的读指针和写指针,以防止覆盖码流数据。读取512字节的码流数据到数据流缓冲区。读指针或写指针就要相应的增加512字节。3.7 缓冲区需求分析表3.4显示了每个解码实例的缓冲需求的摘要,因为规模不限,数据流缓冲区的大小还没有考虑在内。由于固件版本的不同总面积会发生改变。除位处理器的程序存储器外,其他类型的缓冲已被分配在每个实例中。应用程序总的缓冲区大小近似于每个解码实例的总和。Mpeg-r encoderMpeg-4 decoderH.264 encoderH,264 decoderQcifFrames size111kbytes111kbytes148kbytes666kbytesProgram size65kbytesWorking buffer64kbytes64kbytes120kbytes256kbytesTotal240kbytes240kbytes333kbytes987kbytesCifFrames size444kbytes444kbytes592kbytes2672kbytesProgram size65kbytesWorking buffer64kbytes64kbytes120kbytes256kbytesTotal573kbytes573kbytes777kbytes2993kbytesVgaFrames size1350kbytes1350kbytes1800kbytes3937.5kbytesProgram size65kbytesWorking buffer64kbytes64kbytes120kbytes256kbytesTotal1479kbytes1479kbytes1985kbytes4258.5kbytes表 3.4缓冲需求概况3.8 视频编码与译码设计视频编解码器模块允许4路管道编码/解码同时进行。扩展i.MX27视频加工应用领域,并有可能使多管道流/图像处理。例如,它可以同时在一个管道捕获图像编码,而在其它3个管道中做解码操作,如图3.6。在图3.6,灰色矩形代表码流数据。所有编解码器管道内的图像/位流可以用不同的编解码标准进行编码/解码,分别解码一路以H264/AVC编码的图像数据流,一路H264/AVC数据流,一路MPEG4码流,一路H263码流。图 3.6一路编码和三路译码3.9 本章小结视频处理模块是i.MX27的特点,它把视频编解码过程设计成用硬件来完成。这大大减少了主处理器的工作量。本章就是对视频处理模块的内部工作原理和缓冲机制做一个深入的分析。23浙江大学硕士学位论文第4章 视频处理单元第4章 视频处理单元VPU模块既视频编解码处理模块,它的输入和输出问题是本文要解决的关键问题,所以要对VPU驱动有深入的理解,才能利用VPU的硬件解码功能。因为VPU驱动提供了该模块的初始化,加密,解密等等功能,而且在此基础上,更是提供了一些VPU操作的库函数方便VPU的操作。在接下来软件的实现就是调用这些库函数,无需自己编写底层驱动,简化工作量。4.1 视频处理单元软件操作VPU软件可以分为两部分,内核驱动程序和以及应用程序的编解码器库。内核驱动程序负责系统控制和资源回收(内存/中断等)。它提供IOCTL接口为在用户空间的应用程序提供访问系统资源的路径。在用户空间应用程序调用IOCTL和编解码器库函数实现一个复杂的编解码器系统。VPU内核驱动程序功能如下。*模块初始化,初始化模块,设备的具体结构。*设备初始化,初始化VPU时钟和硬件,并申请中断。*中断服务例程,一帧任务完成时候的中断事件。*文件操作例程,给用户空间提供一下的接口。-打开文件-文件释放-文件同步-文件控制,提供内存分配和释放的接口。-寄存器和存储器内存映射到用户空间。*设备的关机-关闭VPU单元的时钟和硬件,并释放的中断。VPU用户空间驱动程序包含如下功能。*编解码库-下载可执行位代码到硬件;-初始化解码器系统;-设置编解码器的系统配置;-用命令控制编解码器系统;-报告的编解码器状态和结果;*系统IO操作-请求/释放内存;-MAP/UNMAP内存/寄存器到用户空间;-设备管理;4.2 Vpu库函数VPU库函数是用户程序与VPU驱动的接口,其代码位于misc/lib/vpu/目录下, 主要包含如下函数: RetCode vpu_Init(PhysicalAddress workBuf); RetCode vpu_GetVersionInfo(); RetCode vpu_EncOpen(EncHandle *, EncOpenParam *)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论