//-------------------------------------------------- // Event handlers void LocAVPlayer::onPrepare() { SL_LOGD("LocAVPlayer::onPrepare()"); sp<IMediaPlayerService> mediaPlayerService(getMediaPlayerService()); if (mediaPlayerService != NULL) { switch (mDataLocatorType) { case kDataLocatorUri: mPlayer = mediaPlayerService->create(mPlayerClient /*IMediaPlayerClient*/, mPlaybackParams.sessionId); if (mPlayer == NULL) { SL_LOGE("media player service failed to create player by URI"); } else if (mPlayer->setDataSource( CreateHTTPServiceInCurrentJavaContext(), mDataLocator.uriRef, NULL /*headers*/) != NO_ERROR) { SL_LOGE("setDataSource failed"); mPlayer.clear(); } break; case kDataLocatorFd: mPlayer = mediaPlayerService->create(mPlayerClient /*IMediaPlayerClient*/, mPlaybackParams.sessionId); if (mPlayer == NULL) { SL_LOGE("media player service failed to create player by FD"); } else if (mPlayer->setDataSource(mDataLocator.fdi.fd, mDataLocator.fdi.offset, mDataLocator.fdi.length) != NO_ERROR) { SL_LOGE("setDataSource failed"); mPlayer.clear(); } // Binder dups the fd for use by mediaserver, so if we own the fd then OK to close now if (mDataLocator.fdi.mCloseAfterUse) { (void) ::close(mDataLocator.fdi.fd); mDataLocator.fdi.fd = -1; mDataLocator.fdi.mCloseAfterUse = false; } break; case kDataLocatorNone: SL_LOGE("no data locator for MediaPlayer object"); break; default: SL_LOGE("unsupported data locator %d for MediaPlayer object", mDataLocatorType); break; } } if (mPlayer == NULL) { mStateFlags |= kFlagPreparedUnsuccessfully; } // blocks until mPlayer is prepared GenericMediaPlayer::onPrepare(); SL_LOGD("LocAVPlayer::onPrepare() done"); }
//-------------------------------------------------- // Event handlers void StreamPlayer::onPrepare() { SL_LOGD("StreamPlayer::onPrepare()"); sp<IMediaPlayerService> mediaPlayerService(getMediaPlayerService()); if (mediaPlayerService != NULL) { mPlayer = mediaPlayerService->create(getpid(), mPlayerClient /*IMediaPlayerClient*/, mPlaybackParams.sessionId); if (mPlayer == NULL) { SL_LOGE("media player service failed to create player by app proxy"); } else if (mPlayer->setDataSource(mAppProxy /*IStreamSource*/) != NO_ERROR) { SL_LOGE("setDataSource failed"); mPlayer.clear(); } } if (mPlayer == NULL) { mStateFlags |= kFlagPreparedUnsuccessfully; } GenericMediaPlayer::onPrepare(); SL_LOGD("StreamPlayer::onPrepare() done"); }