多媒体处理办法技术应用相关知识_第1页
多媒体处理办法技术应用相关知识_第2页
多媒体处理办法技术应用相关知识_第3页
多媒体处理办法技术应用相关知识_第4页
多媒体处理办法技术应用相关知识_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、多媒体处理办法技术应用相关知识主要内容数字图像的原始文件格式图像浏览工具YUVView视频解码流程基于DirectShow的多媒体编程数字图像的原始文件格式RGB格式bmp文件图像处理YUV格式yuv文件视频处理bmp文件位图文件头位图文件头BITMAP位图信息头位图信息头BITMAPINFOHEADER调色板调色板Palette实际的位图数据实际的位图数据ImageData/14bytestypedefstructtagBITMAPWORDbfType;DWORDbfSize;WORDbfReserved1;WORDbfReserved2;DWORDbfOffBits; BITMAP;/40

2、bytestypedef struct tagBITMAPINFOHEADERDWORDbiSize;LONGbiWidth;LONGbiHeight;WORDbiPlanes;WORDbiBitCountDWORDbiCompression;DWORDbiSizeImage;LONGbiXPelsPerMeter;LONGbiYPelsPerMeter;DWORDbiClrUsed;DWORDbiClrImportant; BITMAPINFOHEADER;typedef struct tagRGBQUADBYTErgbBlue;/该颜色的蓝色分量BYTErgbGreen;/该颜色的绿色分量

3、BYTErgbRed;/该颜色的红色分量BYTErgbReserved;/保留值 RGBQUAD;调色板调色板PalettePalette是对那些需要调色板的位图文是对那些需要调色板的位图文件而言的。件而言的。2424位和位和3232位是不需要调色板的。位是不需要调色板的。yuv文件亮度亮度Y数据数据色度色度U数据数据色度色度V数据数据浏览工具浏览工具YUVviewerYUVviewer:完成:完成YUVYUVRGBRGB转换转换yuv文件读取fileId = fopen(, r);subSampleMat = 1, 1; 1, 1;% read Y componentbuf = fread(

4、fileId, width * height, uchar);imgYuv(:, :, 1) = reshape(buf, width, height).; % reshape% read U componentbuf = fread(fileId, width / 2 * height / 2, uchar);imgYuv(:, :, 2) = kron(reshape(buf, width / 2, height / 2)., subSampleMat); % read V componentbuf = fread(fileId, width / 2 * height / 2, uchar

5、);imgYuv(:, :, 3) = kron(reshape(buf, width / 2, height / 2)., subSampleMat); % reshape and upsample% convert YUV to RGBimgRgb = reshape(convertYuvToRgb(reshape(imgYuv, height * width, 3), height, width, 3);fclose(fileId);imshow(imgRgb);dmdmdmdmNM位移矢量位移矢量前一帧中的前一帧中的最佳匹配子块最佳匹配子块前一帧中的前一帧中的搜索区域搜索区域当前帧中当

6、前帧中的子块的子块运动估计中的块匹配方法运动估计中的块匹配方法搜索范围搜索范围SR:SR=(M+2dm)(N+2dm)两个重要问题:两个重要问题:1. 匹配准则匹配准则2. 搜索方法搜索方法块匹配准则(1)归一化相关函数)归一化相关函数NCCF (Normalized Cross-Correction Function) (1)(2)平均均方误差函数)平均均方误差函数MSD (Mean Square Difference) (2)(3)平均绝对差函数)平均绝对差函数MAD (Mean Absolute Difference) (3)通常使用求和绝对差通常使用求和绝对差SAD(Sum of Ab

7、solut Difference)代替代替MAD,即,即( , )( , )SAD i jMNMAD i j110011111122220000(, )(,)( , )(, ) (,)MNkksmnMNMNkkNsmnmnfm n fNmi njNCCF i jfm nfk mi nj 112001( ,)(, )(,)MNkksmnMSD i ffm nfNmi njMN 11001( ,)( , )(,)MNkksmnMAD i ffm nfNmi njMN 搜索方法:搜索方法:1. 全搜索全搜索2. 二维对数法二维对数法3. 三步法三步法4. 共轭方向法共轭方向法5. 正交搜索法正交搜索

8、法i-6 i-5 i-4 i-3 i-2 i-1 i i+1 i+2 i+3 i+4 i+5 i+6j+6j+5 j+4 j+3j+2 j+1 jj-1j-2 j-3j-4j-5 j-6 三步法(TSS)dmdmdmdmNM当前帧中当前帧中的子块的子块位移矢量位移矢量前一帧中的前一帧中的搜索区域搜索区域(i,j)前一帧中的最前一帧中的最佳匹配子块佳匹配子块视频解码流程视频文件视频文件(mpg/mov)相应解码器相应解码器YUV-RGB电视编码电视编码显显示示器器电电视视机机 DirectShow是微软公司提供的一套在是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,平台上进行流

9、媒体处理的开发包,与与DirectX开发包一起发布。为多媒体流的开发包一起发布。为多媒体流的捕捉和回放提供了强有力的支持。捕捉和回放提供了强有力的支持。DirectShow的设计初衷就是尽量让多媒体的设计初衷就是尽量让多媒体的应用开发得到简化,使程序员从复杂的数的应用开发得到简化,使程序员从复杂的数据传输、硬件差异、流同步等工作中解放出据传输、硬件差异、流同步等工作中解放出来。来。基于基于DirectShow的多媒体编程的多媒体编程DirectShow系统框图系统框图DirectShow原理Filter概述Filter Graph媒体类型数据传送状态转换速率调整事件通知音视频同步对硬件的支持F

10、ilter概述Directshow是基于模块化的,每个功能是基于模块化的,每个功能模块都采取模块都采取COM组件方式,称为组件方式,称为Filter。Directshow提供了一系列的标准的模块可提供了一系列的标准的模块可用于应用开发,开发者也可以开发自己的用于应用开发,开发者也可以开发自己的功能功能Filter来扩展来扩展Directshow的应用。的应用。Filter一般是有一个或多个一般是有一个或多个Pin组成,组成,Filter之间通过之间通过Pin相互连接。相互连接。DirectShow使用使用Filter Grpah来管理来管理Filter。Filter的类型源过滤器(Source

11、 Filter)分割过滤器(Splitter Filter)解码过滤器(Decoder Filter)渲染过滤器(Renderer Filter)过滤器的这些分类并不是绝对的,例如一个ASF读过滤器(ASF Reader Filter)既是一个源过滤器又是一个分割过滤器。下面我们用一个例子来说明如何采取下面我们用一个例子来说明如何采取Filter来播放一个来播放一个AVI的视频文件。的视频文件。1) 首先从一个文件中读取首先从一个文件中读取AVI数据,形成字节流。数据,形成字节流。(这个工作由源(这个工作由源Filter完成)完成)2) 检查检查AVI数据流的头格式,然后通过数据流的头格式,然

12、后通过AVI分割分割Filter将视频流和音频流分开。将视频流和音频流分开。3) 解码视频流,根据压缩格式的不同,选取不同的解码视频流,根据压缩格式的不同,选取不同的decoder filters 。4) 通过通过Renderer Filter重画视频图像。重画视频图像。5) 音频流送到声卡进行播放,一般采用缺省的音频流送到声卡进行播放,一般采用缺省的 DirectSound DeviceFilter。Filter GraphAVI格式媒体的格式媒体的Filter GraphFilter Graph建立在在DirectShow中,中,Filter Graph是由是由接口对象接口对象IGraph

13、Builder实现的,可以调实现的,可以调用用Win32 API函数函数CoCreateInstance()建立一个实体。建立一个实体。Filter Graph实体建立之实体建立之后不包含任何的后不包含任何的Filter,因此不具有任何,因此不具有任何实际用途。需要连接合适的实际用途。需要连接合适的Filter来完成来完成FilterGraph的构建。的构建。1)RenderFileIGraphBuilder提供了多种智能完成提供了多种智能完成FilterGraph构建的方法。构建的方法。最简单的是使用接口方法最简单的是使用接口方法IGraphBuilder:Render Render lpw

14、strFile, LPCWSTR lpwstrPlayList);2)Render这个接口方法从一个输出这个接口方法从一个输出Pin开始,自动构建剩余的开始,自动构建剩余的FilterGraph。这个方法自动添加必要的。这个方法自动添加必要的Filter,直到添加到一,直到添加到一个个Render Filter为止。为止。3)ConnectDriect这个方法尝试将两个这个方法尝试将两个Filter直接相连,如果不成功,直接返回。直接相连,如果不成功,直接返回。不作其他处理。这个接口方法一般用作两个不作其他处理。这个接口方法一般用作两个Pin之间的协商检查,之间的协商检查,而不直接用于两个而不

15、直接用于两个Filter的连接。的连接。4)Connect这个接口方法是这个接口方法是ConnectDirect接口方法的延伸和扩展。同接口方法的延伸和扩展。同样是连接两个样是连接两个Filter,但是与,但是与ConnectDirect方法不同的是,方法不同的是,这个接口方法首先尝试这个接口方法首先尝试ConnectDirect方法连接两个方法连接两个Filter,如果不能直接连接,则尝试使用中间如果不能直接连接,则尝试使用中间Filter连接。连接。5)AddFilter这个接口方法将指定的这个接口方法将指定的Filter加入到加入到Filter Graph中,但这中,但这个新加入的个新加

16、入的Filter并不会和并不会和Filter Graph中的其他中的其他Filter形成连形成连接。接。6) 手动构建手动构建Filter Graph手工构建手工构建Filter Graph的基础在于对于媒体文件所需要的的基础在于对于媒体文件所需要的Filter有着相当深入清晰地了解的基础上。否则,手工构架的有着相当深入清晰地了解的基础上。否则,手工构架的FilterGraph将存在可靠性、健壮性等问题。将存在可靠性、健壮性等问题。智能连接RenderFile、Render与与Connect这三种方法这三种方法都有自动的功能。在都有自动的功能。在DirectShow中,这种自动中,这种自动机制

17、称为智能连接。机制称为智能连接。为什么在智能连接中不同类型的为什么在智能连接中不同类型的Filter会连在各自的位置上呢?会连在各自的位置上呢?这是因为这些这是因为这些Filter能接受的媒体类型不同。一般来讲,从源能接受的媒体类型不同。一般来讲,从源Filter出来的数据流,只简单的带有属于哪种编码格式信息,其它信息都出来的数据流,只简单的带有属于哪种编码格式信息,其它信息都是未知的,所以音是未知的,所以音/视频解码视频解码Filter不能用,音不能用,音/视频渲染视频渲染Filter也不能也不能用,只有分离用,只有分离Filter可能匹配这种媒体类型,所以只会试连分离可能匹配这种媒体类型,

18、所以只会试连分离Filter。而从分离。而从分离Filter出来的数据分为音、视频两路,每路的数据出来的数据分为音、视频两路,每路的数据流都加上了是音频还是视频的信息,但没有标明这是何种音频或何流都加上了是音频还是视频的信息,但没有标明这是何种音频或何种视频的信息,所以可以被音种视频的信息,所以可以被音/视频解码器视频解码器Filter接受,但不会被音接受,但不会被音/视频渲染视频渲染Filter接受。而从解码接受。而从解码Filter出来的数据流带上了是何种格出来的数据流带上了是何种格式的音式的音/视频媒体类型的信息,所以能被音视频媒体类型的信息,所以能被音/视频渲染视频渲染Filter接受

19、。接受。媒体类型Filter总是要处理一定格式的数据流。总是要处理一定格式的数据流。DirectShow便是用媒体类型来描述特定便是用媒体类型来描述特定的数据流。媒体类型实际上是的数据流。媒体类型实际上是DirectShow定义的一个数据结构。当两定义的一个数据结构。当两个个Filter连接的时候,他们会就采用哪一种连接的时候,他们会就采用哪一种媒体类型达成一致的协议。媒体类型主要媒体类型达成一致的协议。媒体类型主要用三部分来描述:用三部分来描述:majortype、subtype和和formattype。这三部分各自用一个。这三部分各自用一个GUID来标示。来标示。majortype:定性地

20、描述媒体类型,如指定这是一个视频:定性地描述媒体类型,如指定这是一个视频(MEDIATYPE_Video)、音频、音频(MEDIATYPE_Audio)或者字或者字节流节流(MEDIATYPE_Stream)等。等。subtype:辅助说明:辅助说明majortype,指明具体是哪种格式,指明具体是哪种格式,例如例如majortype是视频,是视频,subtype可以进一步指明是可以进一步指明是UYVY、YUY2、RGB24或或RGB32等;若等;若majortype是音频,是音频,subtype可以进一步指明是可以进一步指明是PCM格式还是格式还是AC3格式等。格式等。formattype:

21、指定了一种进一步描述格式细节的数据结构:指定了一种进一步描述格式细节的数据结构类型,格式细节描述的内容主要包括视频图像的大小、帧率,类型,格式细节描述的内容主要包括视频图像的大小、帧率,或音频的采样频率、量化精度等参数。或音频的采样频率、量化精度等参数。数据传送 Filter通过通过pin的连接来传递数据,数据流是从一个的连接来传递数据,数据流是从一个Filter的输出的输出pin流向相连的流向相连的Filter的输入的输入pin。输出。输出pin常用的传递数据的方式是调用常用的传递数据的方式是调用输入输入pin上的上的IMemInputPin:Receive方法。方法。 在在Directsh

22、ow中用来进行内存分配任务的是内存分配器中用来进行内存分配任务的是内存分配器(allocator),这是一个,这是一个COM对象。当两个对象。当两个pin连接的时候,必须有一个连接的时候,必须有一个pin提供一个提供一个allocator。Directshow定义了一系列函数来确定由哪个定义了一系列函数来确定由哪个pin提供提供allocator,以及,以及buffer的数量和大小。的数量和大小。 在数据流开始之前,在数据流开始之前,allocator会创建一个内存池,在开始发送数会创建一个内存池,在开始发送数据流以后,源据流以后,源Filter就会将数据填充到内存池中一个空闲的就会将数据填充

23、到内存池中一个空闲的buffer中,然中,然后传递给下面的后传递给下面的Filter。但是,源。但是,源Filter并不是直接将内存并不是直接将内存buffer的指针直的指针直接传递给下游的接传递给下游的Filter,而是通过一个,而是通过一个media samples的的COM对象,这对象,这个个sample是是allocator创建的用来管理内存创建的用来管理内存buffer。 当一个当一个Filter正在使用正在使用buffer,它就会保持一个,它就会保持一个sample的引用计的引用计数,数,allocator通过通过sample的引用计数用来确定是否可以重新使用一个的引用计数用来确定

24、是否可以重新使用一个buffer。这样就防止了。这样就防止了buffer的使用冲突,当所有的的使用冲突,当所有的Filter都释放了对都释放了对sample的引用,的引用,sample才返回到才返回到allocator的内存池,供重新使用。的内存池,供重新使用。状态转换 Filter Graph在任何时候只有三种状态:运行、暂停、在任何时候只有三种状态:运行、暂停、停止。其中暂停可以理解为数据就绪状态,是为了快速切换停止。其中暂停可以理解为数据就绪状态,是为了快速切换到运行状态而设计的。作为一种中间状态,暂停也是停止与到运行状态而设计的。作为一种中间状态,暂停也是停止与运行之间切换所必经的一种

25、状态。运行之间切换所必经的一种状态。 对对Filter Graph状态的控制也就集中在三种状态之间状态的控制也就集中在三种状态之间的切换。在的切换。在IGraphBuilder上申请上申请IMediaControl接口。获得接口。获得这个接口后,就可以使用其接口方法:这个接口后,就可以使用其接口方法:IMediaControl:Run();IMediaControl:Pause();IMediaControl:Stop();IMediaControl: GetState( LONG msTimeout, OAFilterState *pfs);速率调整 媒体文件播放时的当前位置和停止位置相对于

26、开始位置媒体文件播放时的当前位置和停止位置相对于开始位置都是不变的。调用都是不变的。调用IMediaSeeking接口的接口的SetRate方法可以改变方法可以改变播放的速率。当应用程序执行了播放的速率。当应用程序执行了IMediaSeeking:SetRate后,后,Filter Graph Manager的内部响应如下:的内部响应如下:1)调用)调用IMediaSeeking:GetCurrentPosition得到当前播放得到当前播放位置位置2)如果当前)如果当前Filter Graph处于暂停或运行状态,则调用处于暂停或运行状态,则调用Stop3)调用)调用IMediaSeeking:

27、SetPosition将步骤将步骤(1)中取得的当中取得的当前位置重新设置一下前位置重新设置一下4)调用)调用IMediaSeeking:SetRate设置新的播放速率设置新的播放速率5)如果先前)如果先前Filter Graph的状态为暂停或运行,则恢复这个的状态为暂停或运行,则恢复这个暂停暂停 利用利用IMediaSeeking接口的接口的GetCurrentPosition和和SetPosition可以实现媒体的随机定位。可以实现媒体的随机定位。事件通知 DirectShow有一种机制,能够让应用程序与有一种机制,能够让应用程序与Filter Graph Manager之间实现交互控制。

28、这个机制就是事件之间实现交互控制。这个机制就是事件通知通知(Event Notification),即当,即当Filter状态转换、运行时状态转换、运行时遇到错误或要求重绘视频窗口时,都会发出一个特定的事遇到错误或要求重绘视频窗口时,都会发出一个特定的事件,由件,由Filter Graph Manager处理或者转发给应用程序,处理或者转发给应用程序,应用程序可以接受事件,并根据事件类型作出相应的处理。应用程序可以接受事件,并根据事件类型作出相应的处理。 应用程序调用应用程序调用IMediaEvent:GetEvent方法来接收方法来接收数据。这个方法会被阻断直到从一个队列中得到一个事件数据。

29、这个方法会被阻断直到从一个队列中得到一个事件或者超过时限。因为事件通知和消息循环都是异步的,所或者超过时限。因为事件通知和消息循环都是异步的,所以在应用程序对消息作出响应时,队列中有可能包含多个以在应用程序对消息作出响应时,队列中有可能包含多个事件消息。因此,在事件处理代码中,应不停地的调用事件消息。因此,在事件处理代码中,应不停地的调用GetEvent方法,直至返回失败码,即消息队列已为空。方法,直至返回失败码,即消息队列已为空。音视频同步 DirectShow的解决方案就是为的解决方案就是为Filter Graph选择一个公共的参考时钟,并且要求传送到选择一个公共的参考时钟,并且要求传送到

30、Render Filter的每个的每个Sample打上时间戳;打上时间戳;Video Render和和Audio Render根据根据Sample的时间戳以的时间戳以及参考时钟当前的参考时间,来正确安排及参考时钟当前的参考时间,来正确安排Sample的播放时机。如果的播放时机。如果Sample到底的时间晚了,则马到底的时间晚了,则马上播放这个上播放这个Sample或丢弃该或丢弃该Sample,然后发生消,然后发生消息要求加快息要求加快Sample的传送;如果的传送;如果Sample到达的时到达的时间早了,则间早了,则Render Filter等待,直到等待,直到Sample时间时间戳的开始时间再开始播放,并发生消息要求减慢戳的开始时间再开始播放,并发生消息要求减慢Sample的发送。的发送。硬件支持 为了提高系统的稳定性,为了提高系统的稳定性,Windows操作系统对硬件操作系统对硬件操作进行了隔离;应用程序一般不能直接访问硬件。操作进行了隔离;应用程序一般不能直接访问硬件。DirectShow?Filter工作在用户模式(工作在用户模式(User mode,操作,操作系统特权级别为系统特权级别为Ring 3),而硬件工作在内核模式),而硬件工作在内核模式(Kernel mode,操作系统特权级别为,操作系统特权级别为Ring 0),那么它),那么它们之间怎么协

温馨提示

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

评论

0/150

提交评论