WEB开发网
开发学院手机开发Android 开发 Android 下的PVPlayer的实现 阅读

Android 下的PVPlayer的实现

 2010-09-10 01:08:00 来源:WEB开发网   
核心提示:NODE,MIO主要负责和硬件打交道的一部分,Android 下的PVPlayer的实现(11),这几行代码首先创建一个AndroidSurfaceOutput的MIO,创建了之后设置一些基本的属性set函数,这里有几个自己特色的函数:// For frame buffervirtual bool initCheck(
NODE,MIO主要负责和硬件打交道的一部分,这几行代码首先创建一个AndroidSurfaceOutput的MIO,创建了之后设置一些基本的属性set函数,然后,由MIO创建OutPutNode,这就是一个NOde了,这个东东创建了之后,就要把这个Node添加到整个数据链路中,并且设置一下基本的属性。这样我们的输出Node就添加到了数据链路中了,那么我们的MIO是如何工作的呢?

创建MIO之后有这样的一个函数

status_t AndroidSurfaceOutput::set(PVPlayer* pvPlayer, const sp& surface, bool emulation)

{

mPvPlayer = pvPlayer;

mSurface = surface;

mEmulation = emulation;

return NO_ERROR;

}

这个函数就设置了我们Vedio out MIO最主要的几个属性,一个是pvPlayer,一个是surface,最后的一个参数应该是表明是不是模拟器。

我们来看看这个MIO。关于MIO前面我们基本已经讲过,可能没有放在blog上。一般由这几个接口派生:

public OsclTimerObject, public PvmiMIOControl,

public PvmiMediaTransfer, public PvmiCapabilityAndConfig

但是作为一个视频输出的MIO,这里有几个自己特色的函数:

// For frame buffer

virtual bool initCheck();

virtual PVMFStatus writeFrameBuf(uint8* aData, uint32 aDataLen, const PvmiMediaXferHeader& data_header_info);

virtual void postLastFrame();

virtual void closeFrameBuf();

bool GetVideoSize(int *w, int *h);

我们一跳一条的分析:

首先是initCheck,这个函数什么时候开始调用?

// create a frame buffer for software codecs

OSCL_EXPORT_REF bool AndroidSurfaceOutput::initCheck()

{

// initialize only when we have all the required parameters

//首先看看是不是视频相关的属性发生改变了,如果不是视频就不用管他,直接返回

if (!checkVideoParameterFlags())

return mInitialized;

// release resources if previously initialized 删除以前分配的缓存

closeFrameBuf();

// reset flags in case display format changes in the middle of a stream

上一页  6 7 8 9 10 11 12 13 14  下一页

Tags:Android PVPlayer 实现

编辑录入:coldstar [复制链接] [打 印]
赞助商链接