Fix the issue that short black glitch when switching bandwidth.
[framework/web/webkit-efl.git] / Source / WebCore / platform / graphics / gstreamer / tizen / VideoLayerTizen.cpp
index 0b21ecb..94a719d 100644 (file)
@@ -26,7 +26,7 @@
 #include "IntRect.h"
 #include "RenderLayerBacking.h"
 
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 #include <gst/interfaces/xoverlay.h>
 #include <gst/video/gstvideosink.h>
 #include <gst/video/video.h>
 #include <cairo-xlib.h>
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
-#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 
-#if !ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) || CPU(X86) || CPU(X86_64)
+#if !ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 static Display* g_nativeDisplay = 0;
 static int g_nativeWindow = 0;
 #endif
 
 namespace WebCore {
 
+#if USE(ACCELERATED_VIDEO_VAAPI)
+    void setVaapiEnv()
+    {
+        static bool envSet = false;
+        if (!envSet) {
+            envSet = true;
+            setenv("PSB_VIDEO_CTEXTURE", "1", true);
+        }
+    }
+#endif
+
 VideoLayerTizen::VideoLayerTizen(HTMLMediaElement* media)
     : m_media(media)
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     , m_videoSink(0)
 #else
     , m_platformSurfaceID(0)
-#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 {
-#if !ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) || CPU(X86) || CPU(X86_64)
+#if !ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     if (!g_nativeDisplay)
            g_nativeDisplay = XOpenDisplay(0);
 
@@ -69,7 +80,7 @@ VideoLayerTizen::~VideoLayerTizen()
 {
     syncLayer(0);
 
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     if (m_platformSurface)
         m_platformSurface.clear();
 
@@ -86,7 +97,7 @@ VideoLayerTizen::~VideoLayerTizen()
         XDestroyWindow(g_nativeDisplay, g_nativeWindow);
         g_nativeWindow = 0;
     }
-#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 }
 
 PlatformLayer* VideoLayerTizen::platformLayer() const
@@ -107,7 +118,7 @@ void VideoLayerTizen::syncLayer(VideoLayerTizen* layer)
     }
 }
 
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 static gboolean platformSurfaceUpdateTimeoutCallback(VideoLayerTizen* layer)
 {
     layer->notifySyncRequired();
@@ -132,8 +143,14 @@ void VideoLayerTizen::platformSurfaceUpdated()
 
 GstElement* VideoLayerTizen::createVideoSink()
 {
+#if !USE(ACCELERATED_VIDEO_VAAPI)
     GstElement* videoSink = gst_element_factory_make("xvimagesink", "xvimagesink");
     g_object_set(videoSink, "rotate", 0, NULL);
+#else
+    setVaapiEnv();
+    GstElement* videoSink = gst_element_factory_make("vaapisink", "vaapisink");
+    g_object_set(videoSink, "is-pixmap", 1, NULL);
+#endif
 
     m_videoSink = videoSink;
 
@@ -162,8 +179,15 @@ void VideoLayerTizen::setOverlay(IntSize size)
     m_platformSurface = SharedVideoPlatformSurfaceTizen::create(size);
     m_platformSurface->setVideoPlatformSurfaceUpdateListener(this);
 
+    if (m_platformSurfaceToBeRemoved)
+        m_platformSurface->copySurface(m_platformSurfaceToBeRemoved.get());
+
     gst_x_overlay_set_window_handle(GST_X_OVERLAY(m_videoSink), m_platformSurface->id());
+#if !USE(ACCELERATED_VIDEO_VAAPI)
     g_object_set(m_videoSink, "rotate", 0, NULL);
+#else
+    g_object_set(m_videoSink, "is-pixmap", 1, NULL);
+#endif
 }
 
 void VideoLayerTizen::paintCurrentFrameInContext(GraphicsContext* context, const IntRect& rect)
@@ -172,12 +196,7 @@ void VideoLayerTizen::paintCurrentFrameInContext(GraphicsContext* context, const
         m_platformSurface->paintCurrentFrameInContext(context, rect);
 }
 #else
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && (CPU(X86) || CPU(X86_64))
-bool VideoLayerTizen::swapPlatformSurfaces()
-{
-    return true;
-}
-#endif
+
 void VideoLayerTizen::paintVideoLayer(IntSize videoSize)
 {
     if (videoSize.isEmpty())
@@ -205,12 +224,12 @@ void VideoLayerTizen::paintVideoLayer(IntSize videoSize)
 
     syncLayer(this);
 }
-#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 
 #if USE(GRAPHICS_SURFACE) || ENABLE(TIZEN_CANVAS_GRAPHICS_SURFACE)
 uint64_t VideoLayerTizen::graphicsSurfaceToken() const
 {
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     return (m_platformSurface ? m_platformSurface->id() : 0);
 #else
     return m_platformSurfaceID;
@@ -219,7 +238,7 @@ uint64_t VideoLayerTizen::graphicsSurfaceToken() const
 
 uint32_t VideoLayerTizen::copyToGraphicsSurface()
 {
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     return (m_platformSurface ? m_platformSurface->id() : 0);
 #else
     return m_platformSurfaceID;
@@ -228,8 +247,8 @@ uint32_t VideoLayerTizen::copyToGraphicsSurface()
 
 int VideoLayerTizen::graphicsSurfaceFlags() const
 {
-#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE) && !(CPU(X86) || CPU(X86_64))
-    return GraphicsSurface::Is2D | GraphicsSurface::UseLinearFilter | GraphicsSurface::Alpha;
+#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
+    return m_platformSurface ? m_platformSurface->graphicsSurfaceFlags() : GraphicsSurface::Is2D;
 #else
     return GraphicsSurface::Is2D;
 #endif