Android MediaCodec trace

来自个人维基
2020年6月9日 (二) 21:43free6d1823讨论 | 贡献的版本

跳转至: 导航搜索
  • MediaPlayer calling flow
MediaPlayer mp = new MediaPlayer();
1.        mp.setDataSource(filePath);
2.        mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
3.        mp.prepare(); //获取和解码媒体数据
4.        mp.start();
5.        FillBuffer
6.        EmptyBuffer

1. setDataSource(filePath)

<MediaPlayerBase> mPlayer = Create form (playerType of source);
	//      => new NuPlayerDriver(pid) {
				mLooper->setName("NuPlayerDriver Looper")->start(PRIORITY_AUDIO);
				mPlayer = new NuPlayer(pid);
			}
	//绑定Extractor、omx、codec2服务的death监听,
	//mPlayer->setDataSource(dataSource)

2. setDisplay(SurfaceHolder sh)

{
   mSurfaceHolder = sh;
   _setVideoSurface(sh.getSurface());-->
   {
       MediaPlayer.cpp {
	  sp<IGraphicBufferProducer> new_st =  surface->getIGraphicBufferProducer();
	  MediaPlayerService mp->setVideoSurfaceTexture(new_st);
       }
       MediaPlayerService::Client::setVideoSurfaceTexture(<IGraphicBufferProducer>& bufferProducer)
       sp<ANativeWindow> anw;
      if (bufferProducer != NULL) {
        anw = new Surface(bufferProducer, true /* controlledByApp */);
        status_t err = native_window_api_connect(anw.get(),
                NATIVE_WINDOW_API_MEDIA);
 
        p->setVideoSurfaceTexture(bufferProducer);
        mConnectedWindow = anw; //decoder
    }
}