diff options
author | Andreas Huber <andih@google.com> | 2011-08-29 13:01:23 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-08-29 13:01:23 -0700 |
commit | 63970b42f101c87db7cfd26d43b0d300260b1582 (patch) | |
tree | 5e358f4f34709bc1663723fc094b7d888b7a86d9 | |
parent | 1b5a697dc5435c76447eb5a2de373f5acdda119e (diff) | |
download | frameworks_av-63970b42f101c87db7cfd26d43b0d300260b1582.zip frameworks_av-63970b42f101c87db7cfd26d43b0d300260b1582.tar.gz frameworks_av-63970b42f101c87db7cfd26d43b0d300260b1582.tar.bz2 |
Return an error to the client instead of asserting if decoder instantiation fails
after a surface change.
Change-Id: Ic7758cbeb107032db68a1c3b8e2984710a12dd8b
related-to-bug: 5212725
-rw-r--r-- | media/libmediaplayerservice/StagefrightPlayer.cpp | 6 | ||||
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 27 | ||||
-rw-r--r-- | media/libstagefright/include/AwesomePlayer.h | 6 |
3 files changed, 24 insertions, 15 deletions
diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp index 40e055c..cd4b1ef 100644 --- a/media/libmediaplayerservice/StagefrightPlayer.cpp +++ b/media/libmediaplayerservice/StagefrightPlayer.cpp @@ -72,16 +72,14 @@ status_t StagefrightPlayer::setDataSource(const sp<IStreamSource> &source) { status_t StagefrightPlayer::setVideoSurface(const sp<Surface> &surface) { LOGV("setVideoSurface"); - mPlayer->setSurface(surface); - return OK; + return mPlayer->setSurface(surface); } status_t StagefrightPlayer::setVideoSurfaceTexture( const sp<ISurfaceTexture> &surfaceTexture) { LOGV("setVideoSurfaceTexture"); - mPlayer->setSurfaceTexture(surfaceTexture); - return OK; + return mPlayer->setSurfaceTexture(surfaceTexture); } status_t StagefrightPlayer::prepare() { diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index bc42a42..142dda0 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -1152,22 +1152,26 @@ bool AwesomePlayer::isPlaying() const { return (mFlags & PLAYING) || (mFlags & CACHE_UNDERRUN); } -void AwesomePlayer::setSurface(const sp<Surface> &surface) { +status_t AwesomePlayer::setSurface(const sp<Surface> &surface) { Mutex::Autolock autoLock(mLock); mSurface = surface; - setNativeWindow_l(surface); + return setNativeWindow_l(surface); } -void AwesomePlayer::setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture) { +status_t AwesomePlayer::setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture) { Mutex::Autolock autoLock(mLock); mSurface.clear(); + + status_t err; if (surfaceTexture != NULL) { - setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); + err = setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); } else { - setNativeWindow_l(NULL); + err = setNativeWindow_l(NULL); } + + return err; } void AwesomePlayer::shutdownVideoDecoder_l() { @@ -1190,11 +1194,11 @@ void AwesomePlayer::shutdownVideoDecoder_l() { LOGI("video decoder shutdown completed"); } -void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) { +status_t AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) { mNativeWindow = native; if (mVideoSource == NULL) { - return; + return OK; } LOGI("attempting to reconfigure to use new surface"); @@ -1206,7 +1210,12 @@ void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) { shutdownVideoDecoder_l(); - CHECK_EQ(initVideoDecoder(), (status_t)OK); + status_t err = initVideoDecoder(); + + if (err != OK) { + LOGE("failed to reinstantiate video decoder after surface change."); + return err; + } if (mLastVideoTimeUs >= 0) { mSeeking = SEEK; @@ -1217,6 +1226,8 @@ void AwesomePlayer::setNativeWindow_l(const sp<ANativeWindow> &native) { if (wasPlaying) { play_l(); } + + return OK; } void AwesomePlayer::setAudioSink( diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 14476d3..24cf77c 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -84,8 +84,8 @@ struct AwesomePlayer { bool isPlaying() const; - void setSurface(const sp<Surface> &surface); - void setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); + status_t setSurface(const sp<Surface> &surface); + status_t setSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); void setAudioSink(const sp<MediaPlayerBase::AudioSink> &audioSink); status_t setLooping(bool shouldLoop); @@ -298,7 +298,7 @@ private: void postAudioSeekComplete_l(); void shutdownVideoDecoder_l(); - void setNativeWindow_l(const sp<ANativeWindow> &native); + status_t setNativeWindow_l(const sp<ANativeWindow> &native); bool isStreamingHTTP() const; void sendCacheStats(); |