diff options
author | qinmin <qinmin@chromium.org> | 2014-10-14 14:38:13 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-14 21:38:26 +0000 |
commit | 5f39149e06b561f79625450c0aaf69be3c5fc95b (patch) | |
tree | 7b869aaab4642f20739abd00c33813211a196d5b /media | |
parent | 89c4ad2345e6878428d3db748accf28cbf44bf9f (diff) | |
download | chromium_src-5f39149e06b561f79625450c0aaf69be3c5fc95b.zip chromium_src-5f39149e06b561f79625450c0aaf69be3c5fc95b.tar.gz chromium_src-5f39149e06b561f79625450c0aaf69be3c5fc95b.tar.bz2 |
Remove MediaPlayerAndroid::IsSurfaceInUse() call
When tearing down a MediaSourcePlayer, the video codec could still be decoding.
Therefore, we introduced IsSurfaceInUse() call to destroy the surface view after codec finishes decoding.
However, this function doesn't really help due to 2 reasons:
1. Surface view can go away any time. For example, user click exitfullscreen button.
So waiting for decoder to gracefully finish decoding is not applicable in many cases.
2. Waiting for decoder to finish before destroying the surface view might introduce the following racing issue:
Video A tries to exit fullscreen, but pending decoder job deletion.
Video B calls enter fullscreen, but since the surface is in use, it will fail to do so.
video A exits fullscreen, but video B doesn't know that, and it will wait forever.
This change removes the asynchronous behavior when ReleaseMediaResources() is called.
This makes the code more easy to read and avoids the racing issue above.
BUG=422158
Review URL: https://codereview.chromium.org/651243003
Cr-Commit-Position: refs/heads/master@{#299556}
Diffstat (limited to 'media')
-rw-r--r-- | media/base/android/media_player_android.h | 3 | ||||
-rw-r--r-- | media/base/android/media_player_bridge.cc | 7 | ||||
-rw-r--r-- | media/base/android/media_player_bridge.h | 4 | ||||
-rw-r--r-- | media/base/android/media_source_player.cc | 4 | ||||
-rw-r--r-- | media/base/android/media_source_player.h | 1 |
5 files changed, 0 insertions, 19 deletions
diff --git a/media/base/android/media_player_android.h b/media/base/android/media_player_android.h index b339215..fd558a1 100644 --- a/media/base/android/media_player_android.h +++ b/media/base/android/media_player_android.h @@ -73,9 +73,6 @@ class MEDIA_EXPORT MediaPlayerAndroid { // Associates the |cdm| with this player. virtual void SetCdm(BrowserCdm* cdm); - // Check whether the player still uses the current surface. - virtual bool IsSurfaceInUse() const = 0; - int player_id() { return player_id_; } GURL frame_url() { return frame_url_; } diff --git a/media/base/android/media_player_bridge.cc b/media/base/android/media_player_bridge.cc index c95d857..2a80377 100644 --- a/media/base/android/media_player_bridge.cc +++ b/media/base/android/media_player_bridge.cc @@ -47,7 +47,6 @@ MediaPlayerBridge::MediaPlayerBridge( can_pause_(true), can_seek_forward_(true), can_seek_backward_(true), - is_surface_in_use_(false), volume_(-1.0), allow_credentials_(allow_credentials), weak_factory_(this) { @@ -142,7 +141,6 @@ void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { JNIEnv* env = base::android::AttachCurrentThread(); CHECK(env); - is_surface_in_use_ = true; Java_MediaPlayerBridge_setSurface( env, j_media_player_bridge_.obj(), surface.j_surface().obj()); } @@ -384,7 +382,6 @@ void MediaPlayerBridge::Release() { pending_seek_ = GetCurrentTime(); prepared_ = false; pending_play_ = false; - is_surface_in_use_ = false; SetVideoSurface(gfx::ScopedJavaSurface()); JNIEnv* env = base::android::AttachCurrentThread(); Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); @@ -548,8 +545,4 @@ GURL MediaPlayerBridge::GetFirstPartyForCookies() { return first_party_for_cookies_; } -bool MediaPlayerBridge::IsSurfaceInUse() const { - return is_surface_in_use_; -} - } // namespace media diff --git a/media/base/android/media_player_bridge.h b/media/base/android/media_player_bridge.h index 2afdf5b..220094e 100644 --- a/media/base/android/media_player_bridge.h +++ b/media/base/android/media_player_bridge.h @@ -74,7 +74,6 @@ class MEDIA_EXPORT MediaPlayerBridge : public MediaPlayerAndroid { virtual bool IsPlayerReady() override; virtual GURL GetUrl() override; virtual GURL GetFirstPartyForCookies() override; - virtual bool IsSurfaceInUse() const override; // MediaPlayerListener callbacks. void OnVideoSizeChanged(int width, int height); @@ -184,9 +183,6 @@ class MEDIA_EXPORT MediaPlayerBridge : public MediaPlayerAndroid { // Listener object that listens to all the media player events. scoped_ptr<MediaPlayerListener> listener_; - // Whether player is currently using a surface. - bool is_surface_in_use_; - // Volume of playback. double volume_; diff --git a/media/base/android/media_source_player.cc b/media/base/android/media_source_player.cc index 6d933c9..830defa 100644 --- a/media/base/android/media_source_player.cc +++ b/media/base/android/media_source_player.cc @@ -200,10 +200,6 @@ void MediaSourcePlayer::SetVolume(double volume) { audio_decoder_job_->SetVolume(volume); } -bool MediaSourcePlayer::IsSurfaceInUse() const { - return video_decoder_job_ && video_decoder_job_->is_decoding(); -} - bool MediaSourcePlayer::CanPause() { return Seekable(); } diff --git a/media/base/android/media_source_player.h b/media/base/android/media_source_player.h index c3af71b..6655266 100644 --- a/media/base/android/media_source_player.h +++ b/media/base/android/media_source_player.h @@ -62,7 +62,6 @@ class MEDIA_EXPORT MediaSourcePlayer : public MediaPlayerAndroid, virtual bool CanSeekBackward() override; virtual bool IsPlayerReady() override; virtual void SetCdm(BrowserCdm* cdm) override; - virtual bool IsSurfaceInUse() const override; // DemuxerAndroidClient implementation. virtual void OnDemuxerConfigsAvailable(const DemuxerConfigs& params) override; |