Enable video hole for TV 78/184078/4
authorVenugopal S M <sm.venugopal@samsung.com>
Fri, 13 Jul 2018 09:46:34 +0000 (15:16 +0530)
committerVenugopal S M <sm.venugopal@samsung.com>
Tue, 17 Jul 2018 08:51:45 +0000 (14:21 +0530)
Chromium on TV uses video hole feature for video playback. This way
rendering overhead is reduced. This commit enables video hole feature.

Change-Id: Ib293e22ac44663e78020a670d0da79232dbdee45
Signed-off-by: Venugopal S M <sm.venugopal@samsung.com>
atom/common/api/api_messages.h
atom/renderer/atom_render_view_observer.cc
atom/renderer/atom_render_view_observer.h
efl/build/system.gyp
packaging/electron-efl.spec
tizen/browser/tizen_browser_parts.cc
tizen/browser/tizen_browser_parts.h
tizen/common.gypi
wrt.gyp

index 8335a4ec9b39ae859dd7ee279ce289f00d8e5b69..befa47440597b231881260c47f7fd45f4a957d73 100644 (file)
@@ -76,4 +76,8 @@ IPC_MESSAGE_ROUTED1(WrtViewMsg_SetLongPolling,
 IPC_MESSAGE_ROUTED0(WrtViewMsg_SuspendScheduledTask)
 IPC_MESSAGE_ROUTED0(WrtViewMsg_ResumeScheduledTasks)
 
+#if defined(TIZEN_VIDEO_HOLE)
+IPC_MESSAGE_ROUTED1(WrtViewMsg_EnableVideoHole,
+                    bool)
+#endif
 
index 3870e612f755aa3999aee6f21bffde420fcc207e..d0ae78413f5fab5da82b295c77fd165f47b43a15 100644 (file)
@@ -141,6 +141,9 @@ bool AtomRenderViewObserver::OnMessageReceived(const IPC::Message& message) {
     IPC_MESSAGE_HANDLER(WrtViewMsg_SetLongPolling, OnSetLongPolling)
     IPC_MESSAGE_HANDLER(WrtViewMsg_SuspendScheduledTask, OnSuspendScheduledTasks)
     IPC_MESSAGE_HANDLER(WrtViewMsg_ResumeScheduledTasks, OnResumeScheduledTasks)
+#if defined(TIZEN_VIDEO_HOLE)
+    IPC_MESSAGE_HANDLER(WrtViewMsg_EnableVideoHole, OnEnableVideoHole)
+#endif
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
 
@@ -217,4 +220,12 @@ void AtomRenderViewObserver::OnSetLongPolling(unsigned long timeout) {
   view->setLongPollingGlobalTimeout(timeout);
 }
 
+#if defined(TIZEN_VIDEO_HOLE)
+void AtomRenderViewObserver::OnEnableVideoHole(bool is_enabled) {
+  blink::WebView* view = render_view()->GetWebView();
+  if (view)
+    view->setVideoHoleForRender(is_enabled);
+}
+#endif
+
 }  // namespace atom
index 00cfb3bb0b812d92eeee075ee30d45cda4c203c8..0d89cbf3f146a57d10ecf1621d5d97d56624fc20 100644 (file)
@@ -44,6 +44,10 @@ class AtomRenderViewObserver : public content::RenderViewObserver {
   void SetContentSecurityPolicy(blink::WebLocalFrame* frame);
   void OnSetLongPolling(unsigned long);
 
+#if defined(TIZEN_VIDEO_HOLE)
+  void OnEnableVideoHole(bool is_enabled);
+#endif
+
   AtomRendererClient* renderer_client_;
 
   // Whether the document object has been created.
index 32c429feb2ec137591f7785ec2fd181140a4d06b..c15c218cbad98da4f47930208be473472ce0d77e 100644 (file)
         }],
       ],
     }, # capi-appfw-application
+    {
+      'target_name': 'capi-media-player',
+      'type': 'none',
+      'conditions': [
+        ['tizen_product_tv==1', {
+          'direct_dependent_settings': {
+            'cflags': [
+              '<!@(<(pkg-config) --cflags capi-media-player)',
+            ],
+          },
+          'link_settings': {
+            'ldflags': [
+              '<!@(<(pkg-config) --libs-only-L --libs-only-other capi-media-player)',
+            ],
+            'libraries': [
+              '<!@(<(pkg-config) --libs-only-l capi-media-player)',
+            ],
+          },
+        }],
+      ],
+    }, # capi-media-player
   ],
 }
index fad12e01408b2ac7f40f2d3d3b65d35f5133c0be..88fc0097e375c63575ccb3cd957494698d323a07 100755 (executable)
@@ -50,6 +50,7 @@ BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(uuid)
 BuildRequires: pkgconfig(ttrace)
 %if "%{?TIZEN_PRODUCT_TV}" == "1"
+BuildRequires: pkgconfig(capi-media-player)
 BuildRequires: pkgconfig(vd-win-util)
 %endif
 BuildRequires: pkgconfig(wgt-manifest-handlers)
index 326e5cdd49ea03cfe9c9876a5b69d83454c9d844..13ceaf7c86186f9966e9560593a9a767886df362 100644 (file)
  */
 
 #include "atom/common/api/api_messages.h"
-#include "base/logging.h"
 #include "common/string_utils.h"
 #include "tizen/browser/tizen_browser_parts.h"
 
+#if defined(TIZEN_VIDEO_HOLE)
+#include "atom/browser/native_window_efl.h"
+#include "atom/browser/window_list.h"
+#include "media/base/tizen/media_player_efl.h"
+#endif
+
 namespace tizen {
 
 namespace {
@@ -82,6 +87,23 @@ void TizenBrowserParts::GetCSP(std::string &csp_rule, std::string &csp_report_ru
   csp_report_rule = csp_report_rule_;
 }
 
+#if defined(TIZEN_VIDEO_HOLE)
+void TizenBrowserParts::EnableVideoHole(content::RenderViewHost* render_view_host) {
+  Evas_Object* window_obj =
+      static_cast<atom::NativeWindowEfl*>(atom::WindowList::GetLastWindow())
+          ->evas_object();
+
+  // arg1 -> Evas object,
+  // arg2 -> 0 : WINDOWLESS_MODE_NORMAL,
+  //         1 : WINDOWLESS_MODE_FULL_SCREEN
+  media::MediaPlayerEfl::SetSharedVideoWindowHandle(window_obj, 0);
+
+  // For TV video hole is enabled by default.
+  render_view_host->Send(
+      new WrtViewMsg_EnableVideoHole(render_view_host->GetRoutingID(), true));
+}
+#endif
+
 void TizenBrowserParts::SetLongPollingTimeout(content::RenderViewHost* rvh) {
   auto setting = app_data_->setting_info();
   if (setting.get() != NULL &&
@@ -94,6 +116,9 @@ void TizenBrowserParts::SetLongPollingTimeout(content::RenderViewHost* rvh) {
 
 void TizenBrowserParts::RenderViewCreated(content::RenderViewHost* render_view_host) {
   SetLongPollingTimeout(render_view_host);
+#if defined(TIZEN_VIDEO_HOLE)
+  EnableVideoHole(render_view_host);
+#endif
 }
 
 void TizenBrowserParts::Suspend(content::RenderViewHost* rvh) {
index 09d6934e0b4f1ed3c6a530b429ebf9cbac5b51bf..3ef4c97575faded0c6bd85f1e87a2a388916ca8b 100644 (file)
@@ -20,8 +20,8 @@
 #include "content/public/browser/render_view_host.h"
 #include "tizen/common/app_control.h"
 #include "tizen/common/application_data.h"
-#include "tizen/common/resource_manager.h"
 #include "tizen/common/locale_manager.h"
+#include "tizen/common/resource_manager.h"
 
 namespace tizen {
 
@@ -34,7 +34,7 @@ class TizenBrowserParts {
   void RenderViewCreated(content::RenderViewHost* render_view_host);
   void Suspend(content::RenderViewHost* rvh);
   void Resume(content::RenderViewHost* rvh);
-  void GetCSP(std::string &csp_rule, std::string &csp_report_rule);
+  void GetCSP(std::string& csp_rule, std::string& csp_report_rule);
   bool ShouldAllowNavigation(const std::string &url);
   void Initialize();
 
@@ -44,6 +44,10 @@ class TizenBrowserParts {
   virtual ~TizenBrowserParts() {}
 
  private:
+#if defined(TIZEN_VIDEO_HOLE)
+  void EnableVideoHole(content::RenderViewHost* render_view_host);
+#endif
+
   void SetLongPollingTimeout(content::RenderViewHost* render_view_host);
 
   common::ApplicationData* app_data_;
index 5ec020d526a68550b943f7a68a60dd30e0a52e87..ec9cc58c6af6160ea1688c5846b59dce519953f1 100644 (file)
@@ -33,6 +33,7 @@
       'target_defaults': {
         'defines': [
           'OS_TIZEN_TV_PRODUCT',
+          'TIZEN_VIDEO_HOLE',
         ],
       },
     }],  # tizen_product_tv==1
diff --git a/wrt.gyp b/wrt.gyp
index 2410d1c270564dadad445d71455e869aa6aac5f2..5941ad9e3befa51895d8b6f3959031c3f64814ab 100644 (file)
--- a/wrt.gyp
+++ b/wrt.gyp
         }],
         ['tizen_product_tv==1', {
           'dependencies': [
+            # `media_player_efl.h` internally includes `player.h`.
+            '<(DEPTH)/efl/build/system.gyp:capi-media-player',
             '<(DEPTH)/efl/build/system.gyp:vd-win-util',
           ],
         }],