[MM][CAPI] Handle CAPI callbacks on main thread.
authork2.nagaraju <k2.nagaraju@samsung.com>
Wed, 8 Jul 2015 10:07:09 +0000 (15:37 +0530)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
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 <k2.nagaraju@samsung.com>
tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.cc
tizen_src/chromium_impl/media/base/tizen/media_player_bridge_capi.h

index 6fdde74..cb129a4 100644 (file)
@@ -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
index 379e56e..2bc79f6 100644 (file)
@@ -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: