}
};
+struct xVImageDeleter
+{
+ void operator()(XvImage* pXvImage)
+ {
+ XFree(pXvImage);
+ pXvImage = null;
+ }
+};
+
_OverlayAgent::_OverlayVisualElement::_OverlayVisualElement(void)
: __pOverlayTimer(null)
, __pImageObject(null)
XShmDetach((Display*)ecore_x_display_get(), __pShmInfo);
shmdt(__pShmInfo->shmaddr);
shmctl(__pShmInfo->shmid, IPC_RMID, NULL);
+ delete __pShmInfo;
__pShmInfo = null;
}
if (__pRendererVE != null)
{
- __pRendererVE->SetSurface(null);
__pRendererVE->Destroy();
__pRendererVE = null;
}
if (__xvPort > 0 && (__xvPort - __baseXvPort) >= 0 && __isPortGrabbed[__xvPort - __baseXvPort])
{
Display* pDisplay = (Display*) ecore_x_display_get();
- Atom atom = XInternAtom(pDisplay, "_USER_WM_PORT_ATTRIBUTE_STREAM_OFF", False);
+ Atom atom = XInternAtom(pDisplay, "_USER_WM_PORT_ATTRIBUTE_STREAM_OFF", False);
XvSetPortAttribute(pDisplay, __xvPort, atom, 1);
XvUngrabPort(pDisplay, __xvPort, 0);
{
SysTryReturnResult(NID_UI_CTRL, __pixmap != 0, E_SYSTEM, "The current value of pixmap is null");
- Display* pDisplay = (Display*)ecore_x_display_get();
+ Display* pDisplay = (Display*) ecore_x_display_get();
SysTryReturnResult(NID_UI_CTRL, pDisplay != null, E_SYSTEM, "The current value of Display is null");
if (__pXvImage == null || __needToRellaocImage)
if (__needToRellaocImage)
{
- XShmSegmentInfo* pShmInfo = new (std::nothrow) XShmSegmentInfo();
+ unique_ptr<XShmSegmentInfo> pShmInfo(new (std::nothrow) XShmSegmentInfo());
SysTryReturnResult(NID_UI_CTRL, pShmInfo != null, E_SYSTEM, "Failed to create XShmSegmentInfo");
- XvImage* pXvImage = XvShmCreateImage(pDisplay, __xvPort, __savedColorFormat, 0, __currentSourceBufferSize.width, __currentSourceBufferSize.height, pShmInfo);
+ unique_ptr<XvImage, xVImageDeleter> pXvImage(XvShmCreateImage(pDisplay, __xvPort, __savedColorFormat, 0, __currentSourceBufferSize.width, __currentSourceBufferSize.height, pShmInfo.get()));
SysTryReturnResult(NID_UI_CTRL, pXvImage != null, E_SYSTEM, "Failed to create XvImage");
pShmInfo->shmid = shmget(IPC_PRIVATE, pXvImage->data_size, IPC_CREAT | 0777);
pShmInfo->shmaddr = pXvImage->data = (char*)shmat(pShmInfo->shmid, 0, 0);
pShmInfo->readOnly = False;
+ SysTryReturnResult(NID_UI_CTRL, XShmAttach(pDisplay, pShmInfo.get()), E_SYSTEM, "[E_SYSTEM] Failed to XShmAttach.");
- if (!XShmAttach(pDisplay, pShmInfo))
- {
- XFree(pXvImage);
- SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] Failed to XShmAttach.");
- return E_SYSTEM;
- }
-
- __pXvImage = pXvImage;
- __pShmInfo = pShmInfo;
+ __pShmInfo = pShmInfo.release();
+ __pXvImage = pXvImage.release();
}
if (__pXvImage == null)
unique_ptr<VisualElementSurface> pRendererSurface(_VisualElementSurfaceImpl::CreateSurfaceUsingExistingObjectN(*pDisplayContext, (Handle)__pImageObject, Dimension(physicalBounds.width, physicalBounds.height)));
SysTryReturnResult(NID_UI_CTRL, pRendererSurface != null, E_SYSTEM, "[E_SYSTEM] The current value of RootWindow's DisplayContext is null.");
- r = pRendererVE->SetSurface(pRendererSurface.release());
+ r = pRendererVE->SetSurface(pRendererSurface.get());
SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
r = pRendererVE->SetFlushNeeded();