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

Android 下的PVPlayer的实现

 2010-09-10 01:08:00 来源:WEB开发网   
核心提示:PlayerSetAudioSink(p->mAudioSink, run_prepare, cookie));}}void PVPlayer::run_prepare(status_t s, void *cookie, bool cancelled){LOGV("run_prepare s=%d, c
PlayerSetAudioSink(p->mAudioSink, run_prepare, cookie));

}

}

void PVPlayer::run_prepare(status_t s, void *cookie, bool cancelled)

{

LOGV("run_prepare s=%d, cancelled=%d", s, cancelled);

if (s == NO_ERROR && !cancelled) {

PVPlayer *p = (PVPlayer*)cookie;

p->mPlayerDriver->enqueueCommand(new PlayerPrepare(do_nothing,0));

}

}

最后才是do_nothing,把同步做的事情分成几步来做了。

剩下的基本都是很简单的,就是发送一条又一条的命令即可,其实主要的操作,都在PlayerDriver中。

下面我们来简单的看看这个PlayerDriver,这个事实现播放的主要成员,首先他是一个管理器,他管理者OpenCore的整个框架,最后的输出的 MIO,其次,他是一个异步的东东,存在着一个命令的队列。这个里面虽然代码很多,但是思路很清晰,我们就不一一的列出来,这个里面主要的播放功能被封装到一个叫PVPlayerInterface的接口中了。

这里我们首先分析它的视频显示,在接收到设置显示面的时候,有这样的一个处理:

// if no device-specific MIO was created, use the generic one

if (mio == NULL) {

LOGW("Using generic video MIO");

mio = new AndroidSurfaceOutput();

}

// initialize the MIO parameters

status_t ret = mio->set(mPvPlayer, command->surface(), mEmulation);

if (ret != NO_ERROR) {

LOGE("Video MIO set failed");

commandFailed(command);

delete mio;

return;

}

mVideoOutputMIO = mio;

mVideoNode = PVMediaOutputNodeFactory::CreateMediaOutputNode(mVideoOutputMIO);

mVideoSink = new PVPlayerDataSinkPVMFNode;

((PVPlayerDataSinkPVMFNode *)mVideoSink)->SetDataSinkNode(mVideoNode);

((PVPlayerDataSinkPVMFNode *)mVideoSink)->SetDataSinkFormatType(PVMF_YUV420);

OSCL_TRY(error, mPlayer->AddDataSink(*mVideoSink, command));

这个mPlayer就是一个PVPlayerInterface的成员。在opencore中我们的最终都是要封装成NODE的,MIO可以属于

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

Tags:Android PVPlayer 实现

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