diff options
Diffstat (limited to 'webkit')
4 files changed, 18 insertions, 6 deletions
diff --git a/webkit/media/android/webmediaplayer_android.cc b/webkit/media/android/webmediaplayer_android.cc index 2044737..33fd2d9 100644 --- a/webkit/media/android/webmediaplayer_android.cc +++ b/webkit/media/android/webmediaplayer_android.cc @@ -360,6 +360,13 @@ void WebMediaPlayerAndroid::ReleaseMediaResources() { } void WebMediaPlayerAndroid::WillDestroyCurrentMessageLoop() { + if (manager_) + manager_->UnregisterMediaPlayer(player_id_); + Detach(); + main_loop_ = NULL; +} + +void WebMediaPlayerAndroid::Detach() { Destroy(); if (stream_id_) { @@ -369,11 +376,7 @@ void WebMediaPlayerAndroid::WillDestroyCurrentMessageLoop() { video_frame_.reset(); - if (manager_) - manager_->UnregisterMediaPlayer(player_id_); - manager_ = NULL; - main_loop_ = NULL; } void WebMediaPlayerAndroid::ReallocateVideoFrame() { diff --git a/webkit/media/android/webmediaplayer_android.h b/webkit/media/android/webmediaplayer_android.h index bba48dd..58d0d77 100644 --- a/webkit/media/android/webmediaplayer_android.h +++ b/webkit/media/android/webmediaplayer_android.h @@ -121,6 +121,9 @@ class WebMediaPlayerAndroid // Method inherited from DestructionObserver. virtual void WillDestroyCurrentMessageLoop() OVERRIDE; + // Detach the player from its manager. + void Detach(); + protected: // Construct a WebMediaPlayerAndroid object with reference to the // client, manager and stream texture factory. diff --git a/webkit/media/android/webmediaplayer_impl_android.cc b/webkit/media/android/webmediaplayer_impl_android.cc index c43605f..fe4d0a5 100644 --- a/webkit/media/android/webmediaplayer_impl_android.cc +++ b/webkit/media/android/webmediaplayer_impl_android.cc @@ -34,7 +34,8 @@ WebMediaPlayerImplAndroid::WebMediaPlayerImplAndroid( } WebMediaPlayerImplAndroid::~WebMediaPlayerImplAndroid() { - Destroy(); + if (proxy_) + proxy_->DestroyPlayer(player_id()); } void WebMediaPlayerImplAndroid::enterFullscreen() { @@ -125,7 +126,6 @@ void WebMediaPlayerImplAndroid::OnMediaPlayerPause() { } void WebMediaPlayerImplAndroid::Destroy() { - proxy_->DestroyPlayer(player_id()); proxy_ = NULL; } diff --git a/webkit/media/android/webmediaplayer_manager_android.cc b/webkit/media/android/webmediaplayer_manager_android.cc index 4d24ad43..c64de25 100644 --- a/webkit/media/android/webmediaplayer_manager_android.cc +++ b/webkit/media/android/webmediaplayer_manager_android.cc @@ -14,6 +14,12 @@ WebMediaPlayerManagerAndroid::WebMediaPlayerManagerAndroid() } WebMediaPlayerManagerAndroid::~WebMediaPlayerManagerAndroid() { + std::map<int32, WebMediaPlayerAndroid*>::iterator player_it; + for (player_it = media_players_.begin(); + player_it != media_players_.end(); ++player_it) { + WebMediaPlayerAndroid* player = player_it->second; + player->Detach(); + } } int WebMediaPlayerManagerAndroid::RegisterMediaPlayer( |