Fix the issue that force close occurs after playing video.
authorYongGeol Jung <yg48.jung@samsung.com>
Mon, 6 May 2013 14:35:11 +0000 (23:35 +0900)
committerYongGeol Jung <yg48.jung@samsung.com>
Tue, 7 May 2013 04:38:29 +0000 (13:38 +0900)
[Title] Fix the issue that force close occurs after playing video.
[Issue#] N_SE-37608
[Problem] Force close occurs when try to play video second time.
[Cause] Video layers shared window object. And shared window object is deleted when one of video element is destroyed.
[Solution] Do not share window object.

Change-Id: Ibeea38f6f32f6378f410ce88d0daf02fc81d978c

Source/WebCore/platform/graphics/gstreamer/tizen/VideoLayerTizen.cpp
Source/WebCore/platform/graphics/gstreamer/tizen/VideoLayerTizen.h

index 113d914..2cb658c 100644 (file)
@@ -38,7 +38,6 @@
 
 #if !ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 static Display* g_nativeDisplay = 0;
-static int g_nativeWindow = 0;
 #endif
 
 namespace WebCore {
@@ -59,20 +58,21 @@ VideoLayerTizen::VideoLayerTizen(HTMLMediaElement* media)
     : m_videoSink(0)
 #else
     : m_platformSurfaceID(0)
+    , m_nativeWindow(0)
 #endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     , m_media(media)
 {
 #if !ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
     if (!g_nativeDisplay)
-           g_nativeDisplay = XOpenDisplay(0);
+        g_nativeDisplay = XOpenDisplay(0);
 
-       if (!g_nativeDisplay)
-           return;
+    if (!g_nativeDisplay)
+        return;
 
-       g_nativeWindow = XCreateSimpleWindow(g_nativeDisplay, XDefaultRootWindow(g_nativeDisplay),
+    m_nativeWindow = XCreateSimpleWindow(g_nativeDisplay, XDefaultRootWindow(g_nativeDisplay),
                                0, 0, 1, 1, 0,
                                BlackPixel(g_nativeDisplay, 0), WhitePixel(g_nativeDisplay, 0));
-       XFlush(g_nativeDisplay);
+    XFlush(g_nativeDisplay);
 #endif
 }
 
@@ -93,9 +93,9 @@ VideoLayerTizen::~VideoLayerTizen()
         XFreePixmap(g_nativeDisplay, m_platformSurfaceID);
         m_platformSurfaceID = 0;
     }
-    if (g_nativeWindow) {
-        XDestroyWindow(g_nativeDisplay, g_nativeWindow);
-        g_nativeWindow = 0;
+    if (m_nativeWindow) {
+        XDestroyWindow(g_nativeDisplay, m_nativeWindow);
+        m_nativeWindow = 0;
     }
 #endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 }
@@ -210,13 +210,13 @@ void VideoLayerTizen::paintVideoLayer(IntSize videoSize)
             XFreePixmap(g_nativeDisplay, m_platformSurfaceID);
             m_platformSurfaceID = 0;
         }
-        m_platformSurfaceID = XCreatePixmap(g_nativeDisplay, g_nativeWindow, m_videoSize.width(), m_videoSize.height(), DefaultDepth(g_nativeDisplay, DefaultScreen(g_nativeDisplay)));
+        m_platformSurfaceID = XCreatePixmap(g_nativeDisplay, m_nativeWindow, m_videoSize.width(), m_videoSize.height(), DefaultDepth(g_nativeDisplay, DefaultScreen(g_nativeDisplay)));
         XFlush(g_nativeDisplay);
     }
 
     RefPtr<cairo_surface_t> surface = adoptRef(cairo_xlib_surface_create(g_nativeDisplay, m_platformSurfaceID, DefaultVisual(g_nativeDisplay, DefaultScreen(g_nativeDisplay)), m_videoSize.width(), m_videoSize.height()));
     if (cairo_surface_status(surface.get()) != CAIRO_STATUS_SUCCESS)
-       return;
+        return;
 
     RefPtr<cairo_t> cr = adoptRef(cairo_create(surface.get()));
     OwnPtr<WebCore::GraphicsContext> context = adoptPtr(new GraphicsContext(cr.get()));
index 88bf140..427ef8c 100644 (file)
@@ -90,6 +90,7 @@ private:
 #else
     IntSize m_videoSize;
     int m_platformSurfaceID;
+    int m_nativeWindow;
 #endif // ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
 
     HTMLMediaElement* m_media;