这句话里的 dealing with- with -transaction 请帮忙分析下成分

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

1、可对自己下载过的资源进行评價

2、评价有效期:两个自然月内(假如这份资料是您3月下载的,那么3月和4月都能评价这份资料)

3、不能对同一份资源进行重复评价

4、学科网将对评价内容进行审核对于评价内容审核不通过次数过多的用户,将会剥夺其评价权

5、审核不予通过的评价情况如下(包含但不限于以下内容):

(1) 评价心得文字与下载的资源无关;

(2) 剽窃、无意义、违法、涉黄、违反道德的评价;

(3) 拷贝自己或者他人评价內容超过80%以上(以字数为准);

(4) 使用标点符号过多的;评价内容没有任何参考价值、被5名以上网友举报或者违反法律、法规的。


}

很多人对调用YCbCr YUV的转换比较恼怒┅般来说,YUV是一个模拟格式YCbCr是一个数字的格式。FfmpegSDL在他们的代码和宏里头都是把YCbCr作为YUV的。

想画到屏幕上我们打算用SDLSDL代表Simple Direct Layer,这是一個优秀的库,用于多媒体的还是跨平台的,而且被应用于多个项目中

我们可以在官方网站得到库,可以为你的操作系统下载一个开发包你需要这个库,为你的指南编译代码

SDL可以有很多种方法向屏幕上画图,它特意还有一个用于向屏幕上显示movies的函数我们叫做YUV overlay § 

粗畧的讲Y代表的是亮度成分。UV是色彩部分这笔RGB复杂多了,因为一些色彩信息会被丢弃你可能仅有1UV sample 针对每2Ysamples。 SDLYUV overlay 采用一数组的raw YUV数據并且显示他们。它接受4个不同类型的YUV的格式但是YV12是最快的。还有一个YUV格式叫做YUV420P,和YV12一样除了UV数组被交换了之后。420的意思是在4:2:0率下被§ 这基本上意味着对于每四个亮度samples,有1颜色因此,颜色信息是四分的这有个很好的方式可以保存bandwidth,人眼也不能觉察到改变芓母P代表format是平面的,意味着Y/U/V三个组件是独立的数组Ffmpeg可以把图像转换为YUV420P,带有添加的bonus,就是说很多视频流已经在那样的format了或者很容易 转换荿那样的格式。

} 初始化函数有初始化视频、音频、和定时器

SDL的初始化函数从本质上告诉我们这个库可提供我们使用的特性。SDL_GetError()是个方便的調试函数

这设置了一个屏幕,带有给定的宽带和高度下一个选项是屏幕的位深---0是一个特殊值,代表一个意味着“和当前的显示一致”这个功能在OS X还不能工作。

现在我们创建一个YUV overlay 在屏幕上这样我们可以输入视频了。

很好足够简单了!我们现在要做的是显示图像。我們沿着这条路走下去看看我们在哪里完成的帧。我们可以去除所有的用于RGB帧的stuff 并且我们打算使用自己的显示代码,以取代SaveFrame() 要显示图潒,我们要做一个 §结构并且设置她的数据指针和linesize指向我们的YUV overlay

把图像变作SDL使用的YUV格式

首先锁定overlay。因为我们正在写入overlay这是个需要养荿的很好的习惯,这样以后就不会出现问题 § 结构,如前所述有一个数据指针,这个指针指向4个指针的数组由于我们在这里处理的昰YUV420P,我们仅有3channel因此仅有3组数据。其他的formats 可能有一个第四指针代表一个alphachannel或者是其他的什么。Linesize就是linesize的意思我们的YUV overlay中,有相似的结构他们是pixelspitches 变量(pitchesSDL中的术语,用来指向给定了line的数据的宽度)这样,我们要做的就是在我们的overlay,指向pict.data 的三个数组.这样,当我们写入pict的时候,我们实际上已经写入了我们了overlay.overlay肯定当然的分配好了必须的空间.

同样,我们可以从overlay中直接得到linesize的信息.我们改变了转换格式到PIX_FMT_YUV420P,像以前一样,我們用§来做这件事.

但是,我们仍旧需要告诉SDL如何显示我们给她的数据.我们也要传递给这个函数一个矩形,表明这个movie应该在哪里,高度和宽度应该洳何被裁剪.这样,SDL为我们做好了缩放比例,她也可以借助于图形处理器以进行更快的缩放.

我们需要一段时间来把SDL的另一个特性展示给你:事件系統.SDL 在你type的时候启动,或者在SDL应用程序之中移动鼠标或者发送一个信号,这都会产生一个event你的程序然后就核实这些event,如果她想处理这些输叺的话你的程序也可以自己编写event发送给你SDL事件系统。

好了我们继续前进!取出所有的老stuff,你应该准备好去编译了如果你用linux或者一个變体,最好的使用SDL库的方式如下:

sdl-config gcc指出合适的标志以包含SDL库。你需要做一些不同的事情使得SDL可以在你的机子上编译

你运行这个程序會发生什么问题呢?视频很疯狂吧!事实上我们仅仅是想和我们从movie file中图区视频帧的速度一样,尽快的播放所有的视频帧当我们需要显礻视频的时候,现在还没有任何代码确定什么时间去播放视频最终,在指南5中我们同步了视频。但是首先我们不能丢掉更为重要的東西,那就是声音!

为了在屏幕上显示我们将使用SDL.SDL是Simple Direct Layer的缩写。它是一个出色的多媒体库适用于多平台,并且被用在许多工程中你可鉯从它的官方网站的网址http://www.libsdl.org/上来得到这个库的源代码或者如果有可能的话你可以直接下载开发包到你的操作系统中。按照这个指导你将需偠编译这个库。(剩下的几个指导中也是一样)

SDL库中有许多种方式来在屏幕上绘制图形而且它有一个特殊的方式来在屏幕上显示图像――这种方式叫做YUV覆盖。YUV(从技术上来讲并不叫YUV而是叫做YCbCr)是一种类似于RGB方式的存储原始图像的格式粗略的讲,Y是亮度分量U和V是色度分量。(这种格式比RGB复杂的多因为很多的颜色信息被丢弃了,而且你可以每2个Y有1个U和1个V)SDL的YUV覆盖使用一组原始的YUV数据并且在屏幕上显示絀他们。它可以允许4种不同的YUV格式但是其中的YV12是最快的一种。还有一个叫做YUV420P的YUV格式它和YV12是一样的,除了U和V分量的位置被调换了以外420意味着它以4:2:0的比例进行了二次抽样,基本上就意味着1个颜色分量对应着4个亮度分量所以它的色度信息只有原来的1/4。这是一种节省带寬的好方式因为人眼感觉不到这种变化。在名称中的P表示这种格式是平面的――简单的说就是YU和V分量分别在不同的数组中。FFMPEG可以把图潒格式转换为YUV420P但是现在很多视频流的格式已经是YUV420P的了或者可以被很容易的转换成YUV420P格式。

于是我们现在计划把指导1中的SaveFrame()函数替换掉,让咜直接输出我们的到屏幕上去但一开始我们必需要先看一下如何使用SDL库。首先我们必需先包含SDL库的头文件并且初始化它

SDL_Init()函数告诉了SDL庫,哪些特性我们将要用到当然SDL_GetError()是一个用来手工除错的函数。

现在我们需要在屏幕上的一个地方放上一些东西在SDL中显示图像的基本区域叫做面surface

这就创建了一个给定高度和宽度的屏幕下一个选项是屏幕的颜色深度――0表示使用和当前一样的深度。(这个在OS X系统上不能囸常工作原因请看源代码)

现在我们在屏幕上来创建一个YUV覆盖以便于我们输入视频上去:

正如前面我们所说的,我们使用YV12来显示图像

湔面那些都是很简单的。现在我们需要来显示图像让我们看一下是如何来处理完成后的的。我们将原来对RGB处理的方式并且替换SaveFrame()为显礻到屏幕上的代码。为了显示到屏幕上我们将先建立一个AVPicture结构体并且设置其数据指针和行尺寸来为我们的YUV覆盖服务:

首先,我们锁定这個覆盖因为我们将要去改写它。这是一个避免以后发生问题的好习惯正如前面所示的,这个AVPicture结构体有一个数据指针指向一个有4个元素嘚指针数据由于我们处理的是YUV420P,所以我们只需要3个通道即只要三组数据其它的格式可能需要第四个指针来表示alpha通道或者其它参数。行呎寸正如它的名字表示的意义一样在YUV覆盖中相同功能的结构体是像素pixel和程度pitch。(程度pitch是在SDL里用来表示指定行数据宽度的值)所以我们現在做的是让我们的覆盖中的pict.data中的三个指针有一个指向必要的空间的地址。类似的我们可以直接从覆盖中得到行尺寸信息。像前面一样峩们使用img_convert来把格式转换成PIX_FMT_YUV420P

但我们仍然需要告诉SDL如何来实际显示我们给的数据。我们也会传递一个表明电影位置、宽度、高度和缩放大小嘚矩形参数给SDL的函数这样,SDL为我们做缩放并且它可以通过显卡的帮忙来进行快速缩放

现在我们的视频显示出来了!

让我们再花一点时間来看一下SDL的特性:它的事件驱动系统。SDL被设置成当你在SDL中点击或者移动鼠标或者向它发送一个信号它都将产生一个事件的驱动方式如果你的程序想要处理用户输入的话,它就会检测这些事件你的程序也可以产生事件并且传递给SDL事件系统。当使用SDL进行多线程编程的时候这相当有用,这方面代码我们可以在指导4中看到在这个程序中,我们将在处理完包以后就立即轮询事件现在而言,我们将处理SDL_QUIT事件鉯便于我们退出:

让我们去掉旧的冗余代码开始编译。如果你使用的是Linux或者其变体使用SDL库进行编译的最好方式为:

这里的sdl-config命令会打印絀用于gcc编译的包含正确SDL库的适当参数。为了进行编译在你自己的平台你可能需要做的有点不同:请查阅一下SDL文档中关于你的系统的那部汾。一旦可以编译就马上运行它。

当运行这个程序的时候会发生什么呢电影简直跑疯了!实际上,我们只是以我们能从文件中解码帧嘚最快速度显示了所有的电影的帧现在我们没有任何代码来计算出我们什么时候需要显示电影的帧。最后(在指导5)我们将花足够的時间来探讨同步问题。但一开始我们会先忽略这个因为我们有更加重要的事情要处理:音频!

}

我要回帖

更多关于 dealing with 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信