From 417e4b6bc5054dac295d624a3921fedff7f984cb Mon Sep 17 00:00:00 2001 From: "k2.nagaraju" Date: Wed, 8 Jul 2015 15:37:09 +0530 Subject: [PATCH] [MM][CAPI] Handle CAPI callbacks on main thread. Handle all CAPI callbacks on main thread. Call CAPI API's only from main thread. Don't do any processing of data in capi callback function to avoid possible errors / deadlocks. This reverts commit http://165.213.202.130/gerrit/#/c/75385/4 Bug: http://web.sec.samsung.net/bugzilla/show_bug.cgi?id=11539 Reviewed by: SeungSeop Park, Venugopal S M Change-Id: Ife6f0c58f3bcad98546924a57ba1309bff53256c Signed-off-by: k2.nagaraju --- .../media/base/tizen/media_player_bridge_capi.cc | 98 +++++++++++++--------- .../media/base/tizen/media_player_bridge_capi.h | 18 ++-- 2 files changed, 70 insertions(+), 46 deletions(-) diff --git a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc index 6fdde74..cb129a4 100644 --- a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc +++ b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc @@ -73,7 +73,7 @@ void player_prepared_cb(void* user_data) { if (!player || player->IsPlayerDestructing()) return; - player->CompletedPrepare(); + player->OnCompletedPrepare(); } #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT) @@ -121,7 +121,7 @@ void playback_complete_cb(void* user_data) { if (!player) return; - player->PlaybackCompleteUpdate(); + player->OnPlaybackCompleteUpdate(); } // Called by player_set_play_position() / player_set_position() @@ -132,7 +132,7 @@ void seek_complete_cb(void* user_data) { if (!player) return; - player->SeekCompleteUpdate(); + player->OnSeekCompleteUpdate(); } // Called by player_set_buffering_cb() @@ -143,7 +143,7 @@ void changed_buffering_status_cb(int percent, void *user_data) { if (!player) return; - player->HandleBufferingStatus(percent); + player->OnHandleBufferingStatus(percent); } // Called by player_set_error_cb() @@ -154,7 +154,7 @@ void error_cb(int error_code, void *user_data) { if (!player) return; - player->HandleError(error_code, "error_cb"); + player->OnHandleError(error_code, "error_cb"); } // Called by player_set_interrupted_cb() @@ -335,17 +335,9 @@ void MediaPlayerBridgeCapi::Play() { if (device_power_request_lock(POWER_LOCK_DISPLAY, 0) != DEVICE_ERROR_NONE) LOG(ERROR) <<"Play() -> |device_power_request_lock| failed"; #endif - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartCurrentTimeUpdateTimer, - base::Unretained(this))); + StartCurrentTimeUpdateTimer(); if (!is_file_url_) - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartBufferingUpdateTimer, - base::Unretained(this))); + StartBufferingUpdateTimer(); is_paused_ = false; is_end_reached_ = false; } @@ -370,11 +362,7 @@ void MediaPlayerBridgeCapi::Pause(bool is_media_related_action) { } if (!is_file_url_) - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartBufferingUpdateTimer, - base::Unretained(this))); + StartBufferingUpdateTimer(); #if defined(OS_TIZEN_MOBILE) if (device_power_release_lock(POWER_LOCK_DISPLAY) != DEVICE_ERROR_NONE) @@ -437,11 +425,7 @@ void MediaPlayerBridgeCapi::Seek(const double time) { manager()->OnTimeUpdate(GetPlayerId(), time); if (!is_paused_) - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartCurrentTimeUpdateTimer, - base::Unretained(this))); + StartCurrentTimeUpdateTimer(); } void MediaPlayerBridgeCapi::Release() { @@ -618,11 +602,7 @@ void MediaPlayerBridgeCapi::SeekCompleteUpdate() { manager()->OnTimeChanged(GetPlayerId()); if (!is_file_url_) - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartBufferingUpdateTimer, - base::Unretained(this))); + StartBufferingUpdateTimer(); if (delayed_player_state_ == DELAYED_PLAYER_STATE_PLAY) { ExecuteDelayedPlayerState(); @@ -687,7 +667,7 @@ void MediaPlayerBridgeCapi::SetPixmap() { MediaPlayerEfl::NetworkStateLoaded); } #else -void MediaPlayerBridgeCapi::OnMediaPacketUpdated(media_packet_h packet) { +void MediaPlayerBridgeCapi::MediaPacketUpdated(media_packet_h packet) { // If packets are destroyed right away, error logs about TBM occur. if (previous_packet_) media_packet_destroy(previous_packet_); @@ -755,17 +735,11 @@ void MediaPlayerBridgeCapi::HandleBufferingStatus(int percent) { LOG(ERROR) << "HandleBufferingStatus:player_start failed"; return; } - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartCurrentTimeUpdateTimer, - base::Unretained(this))); + StartCurrentTimeUpdateTimer(); + if (!is_file_url_) - main_loop_->PostTask( - FROM_HERE, - base::Bind( - &MediaPlayerBridgeCapi::StartBufferingUpdateTimer, - base::Unretained(this))); + StartBufferingUpdateTimer(); + manager()->OnReadyStateChange(GetPlayerId(), MediaPlayerEfl::ReadyStateHaveEnoughData); manager()->OnNetworkStateChange(GetPlayerId(), @@ -839,4 +813,46 @@ void MediaPlayerBridgeCapi::ExecuteDelayedPlayerState() { } } +#if !defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT) +void MediaPlayerBridgeCapi::OnMediaPacketUpdated(media_packet_h packet) { + main_loop_->PostTask( + FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::MediaPacketUpdated, + base::Unretained(this), + packet)); +} +#endif + +void MediaPlayerBridgeCapi::OnPlaybackCompleteUpdate() { + main_loop_->PostTask( + FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::PlaybackCompleteUpdate, + base::Unretained(this))); +} + +void MediaPlayerBridgeCapi::OnSeekCompleteUpdate() { + main_loop_->PostTask( + FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::SeekCompleteUpdate, + base::Unretained(this))); +} + +void MediaPlayerBridgeCapi::OnCompletedPrepare() { + main_loop_->PostTask( + FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::CompletedPrepare, + base::Unretained(this))); +} + +void MediaPlayerBridgeCapi::OnHandleBufferingStatus(int percent) { + main_loop_->PostTask( + FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::HandleBufferingStatus, + base::Unretained(this), + percent)); +} + +void MediaPlayerBridgeCapi::OnHandleError(int error_code, const char *msg) { + main_loop_->PostTask( + FROM_HERE, base::Bind(&MediaPlayerBridgeCapi::HandleError, + base::Unretained(this), + error_code, + msg)); +} + } // namespace media diff --git a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h index 379e56e..2bc79f6 100644 --- a/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h +++ b/tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h @@ -47,8 +47,6 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi virtual double GetCurrentTime() override; void ExecuteDelayedPlayerState(); - void HandleBufferingStatus(int percent); - void HandleError(int ret, char const* from); #if defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT) void SetPixmap(); @@ -59,9 +57,11 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi void SendFrame(tbm_surface_h surface); #endif - void PlaybackCompleteUpdate(); - void SeekCompleteUpdate(); - void CompletedPrepare(); + void OnPlaybackCompleteUpdate(); + void OnSeekCompleteUpdate(); + void OnCompletedPrepare(); + void OnHandleBufferingStatus(int percent); + void OnHandleError(int ret, char const* from); protected: virtual void Release(); @@ -82,6 +82,14 @@ class MEDIA_EXPORT MediaPlayerBridgeCapi void UpdateSeekState(bool state); void UpdateDuration(); +#if !defined(TIZEN_MULTIMEDIA_PIXMAP_SUPPORT) + void MediaPacketUpdated(media_packet_h packet); +#endif + void PlaybackCompleteUpdate(); + void SeekCompleteUpdate(); + void CompletedPrepare(); + void HandleBufferingStatus(int percent); + void HandleError(int ret, char const* from); player_state_e GetPlayerState(); private: -- 2.7.4