2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUiCtrl_OverlayAgent.cpp
20 * @brief This file contains implementation of _OverlayAgent class
25 #include <unique_ptr.h>
27 #define OVERLAY_PIXMAP_DUMP 0
29 #if OVERLAY_PIXMAP_DUMP
33 #include <X11/Xproto.h>
38 #include <tbm_bufmgr.h>
41 #endif //OVERLAY_PIXMAP_DUMP
43 #include <Ecore_Evas.h>
45 #include <FBaseResult.h>
46 #include <FUiIOrientationEventListener.h>
47 #include <FGrp_BufferInfoImpl.h>
48 #include <FGrp_Screen.h>
49 #include <FIo_RegistryImpl.h>
50 #include <FMedia_ImageUtil.h>
51 #include "FUi_Control.h"
52 #include "FUi_CoordinateSystemUtils.h"
53 #include "FUi_EcoreEvas.h"
54 #include "FUi_EcoreEvasMgr.h"
55 #include "FUiAnim_EflNode.h"
56 #include "FUiAnim_ControlVisualElement.h"
57 #include "FUiAnim_VisualElementSurfaceImpl.h"
58 #include "FUiAnim_VisualElementImpl.h"
59 #include "FUiCtrl_OverlayAgent.h"
61 #define B(c,s) ((((unsigned int)(c)) & 0xff) << (s))
62 #define FOURCC(a,b,c,d) (B(d,24) | B(c,16) | B(b,8) | B(a,0))
65 using namespace Tizen::Base;
66 using namespace Tizen::Base::Collection;
67 using namespace Tizen::Graphics;
68 using namespace Tizen::Io;
69 using namespace Tizen::Media;
70 using namespace Tizen::System;
71 using namespace Tizen::Ui::Controls;
72 using namespace Tizen::Ui::Animations;
76 const int _ROTATION_0 = 0;
77 const int _ROTATION_90 = 90;
78 const int _ROTATION_180 = 180;
79 const int _ROTATION_270 = 270;
80 const int _ROTATION_360 = 360;
82 #if OVERLAY_PIXMAP_DUMP
84 tbm_bufmgr gTbmBufmgr = null;
89 dump_bmp(const char* pFileName, const void* pData, int width, int height)
95 unsigned char magic[2];
96 } bmpfile_magic = { {'B', 'M'} };
101 unsigned short creator1;
102 unsigned short creator2;
103 unsigned int bmp_offset;
104 } bmpfile_header = { 0, 0, 0, 0x36 };
108 unsigned int header_sz;
111 unsigned short nplanes;
112 unsigned short bitspp;
113 unsigned int compress_type;
114 unsigned int bmp_bytesz;
117 unsigned int ncolors;
118 unsigned int nimpcolors;
119 } bmp_dib_v3_header_t = { 0x28, 0, 0, 1, 24, 0, 0, 0, 0, 0, 0 };
121 if (pFileName != null)
123 pFile = fopen(pFileName, "w+");
128 SysSecureLog(NID_UI_CTRL,"Failed to open %s", pFileName);
132 bmpfile_header.filesz = sizeof(bmpfile_magic) + sizeof(bmpfile_header) + sizeof(bmp_dib_v3_header_t) + width * height * 3;
133 bmp_dib_v3_header_t.header_sz = sizeof(bmp_dib_v3_header_t);
134 bmp_dib_v3_header_t.width = width;
135 bmp_dib_v3_header_t.height = -height;
136 bmp_dib_v3_header_t.nplanes = 1;
137 bmp_dib_v3_header_t.bmp_bytesz = width * height * 3;
139 fwrite(&bmpfile_magic, sizeof(bmpfile_magic), 1, pFile);
140 fwrite(&bmpfile_header, sizeof(bmpfile_header), 1, pFile);
141 fwrite(&bmp_dib_v3_header_t, sizeof(bmp_dib_v3_header_t), 1, pFile);
143 unsigned int* pBlocks = (unsigned int*)pData;
145 for (int i = 0; i < (height * width); i++)
147 fwrite(&pBlocks[i], 3, 1, pFile);
155 bufmgr_get(Display* pDisplay, Pixmap pixmap)
157 int screen = DefaultScreen(pDisplay);
162 if (!DRI2QueryExtension(pDisplay, &eventBase, &errorBase))
164 SysSecureLog(NID_UI_CTRL, "Failed to get value of DRI2QueryExtension.");
170 if (!DRI2QueryVersion(pDisplay, &dri2Major, &dri2Minor))
172 SysSecureLog(NID_UI_CTRL, "Failed to get value of DRI2QueryVersion.");
176 char* pDriverName = null;
177 char* pDeviceName = null;
178 if (!DRI2Connect(pDisplay, RootWindow(pDisplay, screen), &pDriverName, &pDeviceName))
180 SysSecureLog(NID_UI_CTRL, "Failed to get value of DRI2Connect.");
184 SysSecureLog(NID_UI_CTRL, "The current name of open drm device is %s.", pDeviceName);
186 // Get the drm_fd though opening the deviceName
187 gDrmFd = open(pDeviceName, O_RDWR);
190 SysSecureLog(NID_UI_CTRL, "Failed to open drm device (%s)", pDeviceName);
196 drmGetMagic(gDrmFd, &magic);
197 if (!DRI2Authenticate(pDisplay, RootWindow(pDisplay, screen), magic))
199 SysSecureLog(NID_UI_CTRL, "Failed to get value of DRI2Authenticate.");
205 // tbm buffer manager init
206 tbm_bufmgr bufmgr = tbm_bufmgr_init(gDrmFd);
209 SysSecureLog(NID_UI_CTRL, "Failed to initialize buffer manager.");
215 DRI2CreateDrawable(pDisplay, pixmap);
221 pixmap_update (Display* pDisplay, tbm_bufmgr bufmgr, Pixmap pixmap, int x, int y, int width, int height)
225 unsigned int attachments[1] = { DRI2BufferFrontLeft };
227 int dri2_out_count = 0;
229 int opt = TBM_OPTION_READ|TBM_OPTION_WRITE;
230 char imgFile[100] = {0,};
233 tbm_bo_handle bo_handle;
235 DRI2Buffer* pDri2_buffers = DRI2GetBuffers (pDisplay, pixmap, &dri2_width, &dri2_height, attachments, dri2_count, &dri2_out_count);
236 SysTryLogCatch(NID_UI_CTRL, pDri2_buffers != null, , "Failed to get buffers.");
237 SysTryLogCatch(NID_UI_CTRL, pDri2_buffers[0].name != null, , "Failed to get a handle of the dri2 buffer.");
239 SysSecureLog(NID_UI_CTRL, "The current name of Dri2_buffers[0] is %d.", pDri2_buffers[0].name);
241 bo = tbm_bo_import(bufmgr, pDri2_buffers[0].name);
242 SysTryLogCatch(NID_UI_CTRL, bo != null, , "Failed to import bo (key : %d).", pDri2_buffers[0].name);
244 bo_handle = tbm_bo_map(bo, TBM_DEVICE_CPU, opt);
245 SysTryLogCatch(NID_UI_CTRL, bo_handle.ptr != null, , "Failed to get map.");
247 memset(imgFile, 0, sizeof(imgFile));
248 sprintf(imgFile,"./dump%d.bmp", gFileCount++);
250 if (gFileCount == 5 || gFileCount == 20)
252 dump_bmp(imgFile, bo_handle.ptr, dri2_width, dri2_height);
271 #endif // OVERLAY_PIXMAP_DUMP
274 _CheckXvExtension(Display* pDisplay, int* pFirstPort, int* pCountPort)
276 unsigned int version = 0;
277 unsigned int release = 0;
278 unsigned int requestBase = 0;
279 unsigned int eventBase = 0;
280 unsigned int errorBase = 0;
282 // Query and print Xvideo properties
283 int returnValue = XvQueryExtension(pDisplay, &version, &release, &requestBase, &eventBase, &errorBase);
284 if (returnValue != Success)
286 if (returnValue == XvBadExtension)
288 SysSecureLog(NID_UI_CTRL, "XvBadExtension returned at XvQueryExtension!");
290 else if (returnValue == XvBadAlloc)
292 SysSecureLog(NID_UI_CTRL, "XvBadAlloc returned at XvQueryExtension!");
296 SysSecureLog(NID_UI_CTRL, "Other error happened at XvQueryExtension!");
302 // SysLog(NID_UI_CTRL, "========================================");
303 // SysLog(NID_UI_CTRL, "XvQueryExtension returned the following:");
304 // SysLog(NID_UI_CTRL, "version : %u", version);
305 // SysLog(NID_UI_CTRL, "release : %u", release);
306 // SysLog(NID_UI_CTRL, "request_base : %u", requestBase);
307 // SysLog(NID_UI_CTRL, "event_base : %u", eventBase);
308 // SysLog(NID_UI_CTRL, "error_base : %u", errorBase);
309 // SysLog(NID_UI_CTRL, "========================================");
311 unsigned int adaptors = 0;
312 XvAdaptorInfo* pAdaptorInfo = null;
313 returnValue = XvQueryAdaptors(pDisplay, DefaultRootWindow(pDisplay), &adaptors, &pAdaptorInfo);
314 if (returnValue != Success)
316 if (returnValue == XvBadExtension)
318 SysSecureLog(NID_UI_CTRL, "XvBadExtension returned at XvQueryExtension.");
320 else if (returnValue == XvBadAlloc)
322 SysSecureLog(NID_UI_CTRL, "XvBadAlloc returned at XvQueryExtension.");
326 SysSecureLog(NID_UI_CTRL, "Other error happaned at XvQueryAdaptors.");
329 if (pAdaptorInfo != null)
331 XvFreeAdaptorInfo(pAdaptorInfo);
337 // SysLog(NID_UI_CTRL, "XvQueryAdaptors returned the following:");
338 // SysLog(NID_UI_CTRL, "%d adaptors available.", adaptors);
341 if (adaptors > 0 && pAdaptorInfo != null)
343 for (unsigned int i = 0; i < adaptors; i++)
345 // SysLog(NID_UI_CTRL, " name: %s"
346 // " type: %s%s%s%s%s"
347 // " first port: %ld"
349 // pAdaptorInfo[i].name,
350 // (pAdaptorInfo[i].type & XvInputMask) ? "input | " : "",
351 // (pAdaptorInfo[i].type & XvOutputMask) ? "output | " : "",
352 // (pAdaptorInfo[i].type & XvVideoMask) ? "video | " : "",
353 // (pAdaptorInfo[i].type & XvStillMask) ? "still | " : "",
354 // (pAdaptorInfo[i].type & XvImageMask) ? "image | " : "",
355 // pAdaptorInfo[i].base_id,
356 // pAdaptorInfo[i].num_ports);
357 // SysLog(NID_UI_CTRL, " format list: %d", i);
359 for (unsigned int j = 0; j < pAdaptorInfo[i].num_formats; j++)
361 SysSecureLog(NID_UI_CTRL, "The current value of depth is %d and visual is %ld.",
362 pAdaptorInfo[i].formats[j].depth, pAdaptorInfo[i].formats[j].visual_id);
366 port = pAdaptorInfo[0].base_id;
369 *pCountPort = pAdaptorInfo[0].num_ports;
370 SysSecureLog(NID_UI_CTRL, "The current value of port is %d", port);
373 if (pAdaptorInfo != null)
375 XvFreeAdaptorInfo(pAdaptorInfo);
387 OnPixmapDamaged(void* pData, int type, void* pEvent)
389 Tizen::Ui::Controls::_OverlayAgent* pOverlayAgent = static_cast<Tizen::Ui::Controls::_OverlayAgent*>(pData);
391 Ecore_X_Event_Damage* pDamageEvent = (Ecore_X_Event_Damage*)pEvent;
392 SysTryReturn(NID_UI_CTRL, pDamageEvent != null, ECORE_CALLBACK_PASS_ON, E_INVALID_DATA, "[E_INVALID_DATA] The current value of DamageEvent is an invalid.");
394 Pixmap pixmap = pOverlayAgent->GetPixmap();
395 if (pDamageEvent->drawable != pixmap)
397 SysSecureLog(NID_UI_CTRL, "The current drawable[%d] is not for this overlay agent's pixmap[%d]", pDamageEvent->drawable, pixmap);
398 return ECORE_CALLBACK_PASS_ON;
401 Evas_Object* pImageObject = pOverlayAgent->GetPixmapImageObject();
402 SysTryReturn(NID_UI_CTRL, pImageObject != null, ECORE_CALLBACK_PASS_ON, E_INVALID_DATA, "[E_INVALID_DATA] The current value of ImageObject is an invalid.");
406 evas_object_geometry_get(pImageObject, null, null, &w, &h);
407 //evas_object_image_pixels_dirty_set(pImageObject, 1);
408 //evas_object_image_fill_set(pImageObject, 0, 0, w, h);
409 evas_object_image_filled_set(pImageObject, EINA_TRUE);
410 evas_object_image_data_update_add(pImageObject, 0, 0, w, h);
412 #if OVERLAY_PIXMAP_DUMP
422 tbm_bufmgr_deinit(gTbmBufmgr);
426 if (gTbmBufmgr == null)
428 gTbmBufmgr = bufmgr_get((Display*)ecore_x_display_get(), pixmap);
431 if (gTbmBufmgr != null)
433 pixmap_update((Display*)ecore_x_display_get(), gTbmBufmgr, pixmap, 0, 0, w, h);
437 SysSecureLog(NID_UI_CTRL, "can't get pixmap gBufmgr");
440 SysSecureLog(NID_UI_CTRL, "dump pixmap[%d]", pixmap);
442 #endif // OVERLAY_PIXMAP_DUMP
444 return ECORE_CALLBACK_DONE;
448 OnEvasImageDamaged(void* pData, Evas_Object* pImageObject)
450 Tizen::Ui::Controls::_OverlayAgent* pOverlayAgent = static_cast<Tizen::Ui::Controls::_OverlayAgent*>(pData);
452 Evas_Object* pMyImageObject = pOverlayAgent->GetPixmapImageObject();
453 SysTryReturn(NID_UI_CTRL, pMyImageObject != null, , E_INVALID_DATA, "[E_INVALID_DATA] The current value of ImageObject is an invalid.");
455 if (pMyImageObject == pImageObject)
457 Dimension curImgDim(0,0);
458 evas_object_image_size_get(pImageObject, &curImgDim.width, &curImgDim.height);
460 Dimension orgImgDim = pOverlayAgent->GetPrevCbImageDimension();
461 if (!orgImgDim.Equals(curImgDim))
463 SysSecureLog(NID_UI_CTRL,"org[%d, %d] cur[%d, %d]", orgImgDim.width, orgImgDim.height, curImgDim.width, curImgDim.height);
464 pOverlayAgent->SetPrevCbImageDimension(curImgDim);
465 pOverlayAgent->SetEvasImageDirtyFlag(false);
468 if(!(pOverlayAgent->GetEvasImageDirtyFlag()))
470 pOverlayAgent->AdjustImageObject();
471 pOverlayAgent->SetEvasImageDirtyFlag(true);
478 namespace Tizen { namespace Ui { namespace Controls
480 int _OverlayAgent::__overlayAgentXvPortCount = 0;
481 int _OverlayAgent::__baseXvPort = 0;
482 bool _OverlayAgent::__isPortGrapped[]={false,};
484 int _OverlayAgent::__overlayAgentcount = 0;
485 int _OverlayAgent::__dstRectMinWidth = -1;
486 int _OverlayAgent::__dstRectMinHegith = -1;
487 int _OverlayAgent::__srcRectMinWidth = -1;
488 int _OverlayAgent::__srcRectMinHegith = -1;
489 int _OverlayAgent::__overlayWidthUnit = -1;
490 int _OverlayAgent::__overlayHeightUnit = -1;
491 int _OverlayAgent::__overlayMaxCount = -1;
492 bool _OverlayAgent::__OverlayAgentBufferPixelFormat[] = {false, };
495 _OverlayAgent::CreateInstanceN(_OverlayAgentStyle style, const _Control& control, const FloatRectangle& logBounds, const Rectangle& phyBounds)
497 unique_ptr<_OverlayAgent> pOverlayAgent(new (std::nothrow) _OverlayAgent(style, control, logBounds, phyBounds));
498 SysTryReturn(NID_UI_CTRL, pOverlayAgent, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
500 result r = GetLastResult();
501 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
503 return pOverlayAgent.release();
506 _OverlayAgent::_OverlayAgent(_OverlayAgentStyle style, const _Control& control, const FloatRectangle& logBounds, const Rectangle& bounds)
507 : __pImageObject(null)
508 , __pRenderImageObject(null)
509 , __pSmartObject(null)
510 , __pixmapDamageHandle(0)
511 , __pPixmapEventHandler(null)
513 , __pVisualElement(null)
514 , __bgColor(0xff000000)
516 , __grabXvPort(false)
518 , __userRotation(_ROTATION_0)
519 , __flushRotate(false)
522 , __aspectRatio(false)
523 , __srcDimension(0, 0)
524 , __pixmapPhyRect(0, 0, 0, 0)
525 , __resizeRect(0, 0, 0, 0)
528 , __newColorFormat(0)
530 , __overlayAgentColorFormat(_OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888)
531 , __pRefUserByteBuffer(null)
532 , __pOrgUserByteBuffer(null)
533 , __orgUsrImgDimension(0, 0)
534 , __orgCbImgDimension(0, 0)
535 , __logicalOverlayRect(logBounds)
536 , __evasImageDamaged(false)
538 result r = E_SUCCESS;
542 case _OVERLAY_AGENT_STYLE_REGION_SW:
544 case _OVERLAY_AGENT_STYLE_REGION_GL:
545 r = CreateImageObjectForOverlayRegion(control, bounds);
548 case _OVERLAY_AGENT_STYLE_PANEL_GL:
550 case _OVERLAY_AGENT_STYLE_PANEL_SW:
551 r = CreateImageObject(control, bounds);
558 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
559 SysTryReturnVoidResult(NID_UI_CTRL, __pVisualElement != null, E_SYSTEM, "[E_SYSTEM] The VisualElement is null.");
561 __overlayAgentcount++;
562 SysLog(NID_UI_CTRL, "The overlayAgentcount in Constructor is [%d]", __overlayAgentcount);
565 _OverlayAgent::~_OverlayAgent(void)
567 SysLog(NID_UI_CTRL, "The overlayAgentcount in Destructor is [%d] and deleted.", __overlayAgentcount);
568 __overlayAgentcount--;
572 if (__pPixmapEventHandler)
574 ecore_event_handler_del(__pPixmapEventHandler);
575 __pPixmapEventHandler = null;
578 if (__pixmapDamageHandle)
580 ecore_x_damage_free(__pixmapDamageHandle);
581 __pixmapDamageHandle = 0;
586 XFreePixmap((Display*)ecore_x_display_get(), __pixmap);
592 XShmDetach((Display*)ecore_x_display_get(), __pShmInfo);
593 shmdt(__pShmInfo->shmaddr);
594 shmctl(__pShmInfo->shmid, IPC_RMID, NULL);
604 if (__pOrgUserByteBuffer)
606 delete __pOrgUserByteBuffer;
607 __pOrgUserByteBuffer = null;
612 evas_object_smart_member_del(__pImageObject);
613 evas_object_del(__pImageObject);
614 __pImageObject = null;
617 if (__pRenderImageObject)
619 evas_object_smart_member_del(__pRenderImageObject);
620 evas_object_del(__pRenderImageObject);
621 __pRenderImageObject = null;
624 if ((__style == _OVERLAY_AGENT_STYLE_REGION_SW || __style == _OVERLAY_AGENT_STYLE_REGION_GL)
625 && (__pVisualElement != null))
627 __pVisualElement->Destroy();
628 __pVisualElement = null;
631 #if OVERLAY_PIXMAP_DUMP
641 tbm_bufmgr_deinit(gTbmBufmgr);
645 #endif //OVERLAY_PIXMAP_DUMP
650 _OverlayAgent::Draw(void)
652 SysTryReturnResult(NID_UI_CTRL, __pRefUserByteBuffer->GetPointer() != null, E_SYSTEM, "The current user buffer is null. (nothing to draw)");
654 result r = E_SUCCESS;
655 if(__style == _OVERLAY_AGENT_STYLE_REGION_SW || __style == _OVERLAY_AGENT_STYLE_PANEL_SW)
663 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
669 _OverlayAgent::GetBufferInfo(BufferInfo& bufferInfo) const
672 evas_object_geometry_get(__pImageObject, NULL, NULL, &w, &h);
674 bufferInfo.width = w;
675 bufferInfo.pitch = w;
676 bufferInfo.height = h;
677 bufferInfo.bitsPerPixel = 32;
678 bufferInfo.pixelFormat = PIXEL_FORMAT_ARGB8888;
680 _BufferInfoImpl* pBufferInfoImpl = _BufferInfoImpl::GetInstance(bufferInfo);
682 if(__style == _OVERLAY_AGENT_STYLE_REGION_SW || __style == _OVERLAY_AGENT_STYLE_PANEL_SW)
684 pBufferInfoImpl->SetHandle(_BufferInfoImpl::HANDLE_TYPE_VE_SURFACE, reinterpret_cast<Handle>(__pImageObject));
685 SysSecureLog(NID_UI_CTRL,"return evas image object");
689 pBufferInfoImpl->SetHandle(_BufferInfoImpl::HANDLE_TYPE_OVERLAY_REGION, __pixmap);
690 SysSecureLog(NID_UI_CTRL,"return pixmap ID");
693 pBufferInfoImpl->SetBounds(Rectangle(0, 0, w, h));
699 _OverlayAgent::SetInputBuffer(const ByteBuffer& srcBuffer, const Dimension& srcDim, _OverlayAgentBufferPixelFormat srcFormat)
701 SysTryReturn(NID_UI_CTRL, srcBuffer.GetPointer() != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The srcBuffer which is input parameter is invalid.");
702 SysTryReturn(NID_UI_CTRL, srcBuffer.GetCapacity() > 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The srcBuffer which is input parameter is invalid.");
703 SysTryReturn(NID_UI_CTRL, IsValidSourceDimension(srcDim), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The srcDim which is input parameter is invalid.");
707 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888:
708 __newColorFormat = FOURCC('R','G','B','4');
710 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_RGB565:
711 __newColorFormat = FOURCC('R','G','B','P');
713 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR:
714 __newColorFormat = FOURCC('I','4','2','0');
716 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_NV12:
717 __newColorFormat = FOURCC('N','V','1','2');
719 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_UYVY:
720 __newColorFormat = FOURCC('U','Y','V','Y');
723 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_FORMAT, "The specified pixel format is not supported.");
724 return E_UNSUPPORTED_FORMAT;
727 __srcDimension.width = srcDim.width;
728 __srcDimension.height = srcDim.height;
730 __overlayAgentColorFormat = srcFormat;
731 __pRefUserByteBuffer = &srcBuffer;
733 SysLog(NID_UI_CTRL,"The current value of buffer is %x, size is %d, new color format is %x",
734 __pRefUserByteBuffer->GetPointer(), __pRefUserByteBuffer->GetCapacity(), __newColorFormat);
740 _OverlayAgent::SetRotation(_OverlayAgentRotation rotation)
742 SysTryReturnResult(NID_UI_CTRL, (rotation < _OVERLAY_AGENT_ROTATION_MAX), E_INVALID_ARG,
743 "[E_INVALID_ARG)] The rotation which is input parameter(%d) is invalid.", rotation);
745 int rotate = _ROTATION_0;
749 case _OVERLAY_AGENT_ROTATION_NONE:
751 case _OVERLAY_AGENT_ROTATION_NONE_LR:
753 case _OVERLAY_AGENT_ROTATION_NONE_UD:
754 rotate = _ROTATION_0;
757 case _OVERLAY_AGENT_ROTATION_90:
759 case _OVERLAY_AGENT_ROTATION_90_LR:
761 case _OVERLAY_AGENT_ROTATION_90_UD:
762 rotate = _ROTATION_90;
765 case _OVERLAY_AGENT_ROTATION_180:
767 case _OVERLAY_AGENT_ROTATION_180_LR:
769 case _OVERLAY_AGENT_ROTATION_180_UD:
770 rotate = _ROTATION_180;
773 case _OVERLAY_AGENT_ROTATION_270:
775 case _OVERLAY_AGENT_ROTATION_270_LR:
777 case _OVERLAY_AGENT_ROTATION_270_UD:
778 rotate = _ROTATION_270;
782 rotate = _ROTATION_0;
791 case _OVERLAY_AGENT_ROTATION_NONE_UD:
793 case _OVERLAY_AGENT_ROTATION_90_UD:
795 case _OVERLAY_AGENT_ROTATION_180_UD:
797 case _OVERLAY_AGENT_ROTATION_270_UD:
801 case _OVERLAY_AGENT_ROTATION_NONE_LR:
803 case _OVERLAY_AGENT_ROTATION_90_LR:
805 case _OVERLAY_AGENT_ROTATION_180_LR:
807 case _OVERLAY_AGENT_ROTATION_270_LR:
817 __userRotation = rotate;
818 __udMirroring = udMirroring;
819 __lrMirroring = lrMirroring;
820 __flushRotate = true;
822 result r = AdjustImageObject();
823 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
824 SysLog(NID_UI_CTRL, "The current value of userRotation is %d, udMirroring is %d, lrMirroring is %d", __userRotation, __udMirroring, __lrMirroring);
830 _OverlayAgent::SetDestination(const FloatDimension& dimension)
832 FloatDimension phyDimF = _CoordinateSystemUtils::Transform(dimension);
833 Dimension phyDim = _CoordinateSystemUtils::ConvertToInteger(phyDimF);
835 __resizeRect.width = phyDim.width;
836 __resizeRect.height = phyDim.height;
837 SysSecureLog(NID_UI_CTRL, "The current value of resizeRect is (%d, %d, %d, %d)",__resizeRect.x, __resizeRect.y, __resizeRect.width, __resizeRect.height);
839 result r = AdjustImageObject();
840 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
846 _OverlayAgent::SetAspectRatio(bool enable)
848 __aspectRatio = enable;
854 _OverlayAgent::CreateImageObjectForOverlayRegion(const _Control& control, const Rectangle& phyBounds)
856 _EflNode* pEflNode = null;
857 Evas_Object* pSmartObject = null;
859 Ecore_Evas* pEcoreEvas = null;
860 VisualElementSurface* pVisualElementSurface = null;
861 _VisualElementSurfaceImpl* pVisualElementSurfaceImpl = null;
862 Evas_Object* pTemp = null;
865 _VisualElement* pParentVE = control.GetVisualElement();
866 SysTryReturn(NID_UI_CTRL, pParentVE != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] pParentVE is null.");
868 _VisualElementImpl* pVisualElementImpl = null;
869 _VisualElement* pVisualElement = new (std::nothrow) _VisualElement();
871 SysTryReturn(NID_UI_CTRL, pVisualElement != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pVisualElement : Memory shortage.");
873 result r = pVisualElement->Construct();
874 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r) );
876 pVisualElement->SetName("OverlayRegion");
877 pVisualElement->SetShowState(true);
878 // pVisualElement->SetOpacity(1.0f);
879 pVisualElement->SetImplicitAnimationEnabled(false);
880 // pVisualElement->SetBackgroundColor(_Colorf(0.0f, 0.0f, 0.0f, 0.0f));
882 pVisualElementImpl = _VisualElementImpl::GetInstance(*pVisualElement);
884 pVisualElementImpl->SetZOrderGroup(_CONTROL_LAYER_OVERLAY);
885 r = pParentVE->InsertChild(*pVisualElement, null, true);
887 pVisualElement->SetBounds(__logicalOverlayRect);
889 // 2. remove origin VE image object buffer
890 pVisualElementSurface = pVisualElementImpl->GetSurfaceN();
891 SysTryCatch(NID_UI_CTRL, pVisualElementSurface != null, , E_SYSTEM, "[E_SYSTEM] pVisualElementSurface is null" );
893 pVisualElementSurfaceImpl = _VisualElementSurfaceImpl::GetInstance(*pVisualElementSurface);
894 SysTryCatch(NID_UI_CTRL, pVisualElementSurfaceImpl != null, , E_SYSTEM, "[E_SYSTEM] pVisualElementSurfaceImpl is null" );
896 pTemp = (Evas_Object*)pVisualElementSurfaceImpl->GetNativeHandle();
897 SysTryCatch(NID_UI_CTRL, pTemp != null, , E_SYSTEM, "[E_SYSTEM] pTemp is null" );
899 evas_object_image_data_set(pTemp, NULL);
900 delete pVisualElementSurface;
902 // 3. create image object
903 pEflNode = dynamic_cast<_EflNode*>(pVisualElement->GetNativeNode());
904 SysTryCatch(NID_UI_CTRL, pEflNode != null, , E_SYSTEM, "[E_SYSTEM] pEflNode is null" );
906 pSmartObject = (Evas_Object*)pEflNode->GetGroupContainer();
907 SysTryCatch(NID_UI_CTRL, pSmartObject != null, , E_SYSTEM, "[E_SYSTEM] pSmartObject is null" );
909 __pSmartObject = pSmartObject;
911 pEvas = evas_object_evas_get(pSmartObject);
912 SysTryCatch(NID_UI_CTRL, pEvas != null, , E_SYSTEM, "[E_SYSTEM] pEvas is null" );
914 pEcoreEvas = ecore_evas_ecore_evas_get(pEvas);
915 SysTryCatch(NID_UI_CTRL, pEcoreEvas != null, , E_SYSTEM, "[E_SYSTEM] pEcoreEvas is null" );
917 __pImageObject = evas_object_image_add(pEvas);
918 SysTryCatch(NID_UI_CTRL, __pImageObject != null, , E_SYSTEM, "[E_SYSTEM] __pImageObject is null" );
919 evas_object_name_set(__pImageObject, "OverlayRegionImageObj");
921 // 4. add image obj to smart object
922 evas_object_smart_member_add(__pImageObject, pSmartObject);
923 //evas_object_lower(__pImageObject);
925 SysSecureLog(NID_UI_CTRL, "phyBounds [%d, %d, %d, %d]", phyBounds.x, phyBounds.y, phyBounds.width, phyBounds.height);
927 evas_object_image_size_set(__pImageObject, phyBounds.width, phyBounds.height);
928 evas_object_image_filled_set(__pImageObject, EINA_TRUE);
929 evas_object_image_alpha_set(__pImageObject, false);
930 evas_object_resize(__pImageObject, phyBounds.width, phyBounds.height);
931 evas_object_move(__pImageObject, phyBounds.x, phyBounds.y);
932 evas_object_show(__pImageObject);
934 r = pVisualElement->SetFlushNeeded();
935 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
937 __pVisualElement = pVisualElement;
939 SysSecureLog(NID_UI_CTRL, "ImageObjectForOverlayRegion SUCCESS __pImageObject : %x, pSmartObject : %x", __pImageObject, pSmartObject);
946 evas_object_del(__pImageObject);
947 __pImageObject = null;
950 if (pVisualElementSurface)
952 delete pVisualElementSurface;
953 pVisualElementSurface = null;
958 pVisualElement->Destroy();
959 pVisualElement = null;
966 _OverlayAgent::CreateImageObject(const _Control& control, const Rectangle& phyBounds)
968 VisualElementSurface* pVisualElementSurface = null;
969 _VisualElementSurfaceImpl* pVisualElementSurfaceImpl = null;
970 _VisualElement* pVisualElement = null;
971 _VisualElementImpl* pVisualElementImpl = null;
973 Evas_Object* pTemp = null;
975 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
976 SysTryReturn(NID_UI_CTRL, pEflNode != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pEflNode is null.");
978 Evas_Object* pSmartObject = (Evas_Object*)pEflNode->GetGroupContainer();
979 SysTryReturn(NID_UI_CTRL, pSmartObject != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pSmartObject is null.");
980 __pSmartObject = pSmartObject;
982 pVisualElement = control.GetVisualElement();
983 SysTryReturn(NID_UI_CTRL, pVisualElement != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pVisualElement is null.");
985 pVisualElementImpl = _VisualElementImpl::GetInstance(*pVisualElement);
986 SysTryReturn(NID_UI_CTRL, pVisualElementImpl != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pVisualElementImpl is null.");
988 pVisualElementSurface = pVisualElementImpl->GetSurfaceN();
989 SysTryCatch(NID_UI_CTRL, pVisualElementSurface != null, , E_SYSTEM, "[E_SYSTEM] pVisualElementSurface is null" );
991 pVisualElementSurfaceImpl = _VisualElementSurfaceImpl::GetInstance(*pVisualElementSurface);
992 SysTryCatch(NID_UI_CTRL, pVisualElementSurfaceImpl != null, , E_SYSTEM, "[E_SYSTEM] pVisualElementSurfaceImpl is null" );
994 pTemp = (Evas_Object*)pVisualElementSurfaceImpl->GetNativeHandle();
995 SysTryCatch(NID_UI_CTRL, pTemp != null, , E_SYSTEM, "[E_SYSTEM] pTemp is null" );
997 evas_object_image_data_set(pTemp, NULL);
998 delete pVisualElementSurface;
999 pVisualElementSurface = null;
1001 pEvas = evas_object_evas_get(pSmartObject);
1002 SysTryReturn(NID_UI_CTRL, pEvas != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pEvas is null" );
1004 // create renderRect object
1005 __pRenderImageObject = evas_object_rectangle_add(pEvas);
1006 evas_object_name_set(__pRenderImageObject, "OverlayPanelRenderRect");
1007 SysTryReturn(NID_UI_CTRL, __pRenderImageObject != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] __pRenderImageObject is null");
1008 evas_object_smart_member_add(__pRenderImageObject, pSmartObject);
1009 evas_object_color_set(__pRenderImageObject, 0, 0, 0, 255); // 100% opaque black
1010 evas_object_resize(__pRenderImageObject, phyBounds.width, phyBounds.height);
1011 evas_object_move(__pRenderImageObject, phyBounds.x, phyBounds.y);
1012 evas_object_show(__pRenderImageObject);
1014 // create image object
1015 __pImageObject = evas_object_image_add(pEvas);
1016 //__pImageObject = evas_object_image_filled_add(pEvas);
1017 SysTryCatch(NID_UI_CTRL, __pImageObject != null, , E_SYSTEM, "[E_SYSTEM] __pImageObject is null");
1019 evas_object_smart_member_add(__pImageObject, pSmartObject);
1020 evas_object_name_set(__pImageObject, "OverlayPanelImageObj");
1021 evas_object_image_size_set(__pImageObject, phyBounds.width, phyBounds.height);
1022 //evas_object_image_fill_set(__pImageObject, 0, 0, phyBounds.width, phyBounds.height);
1023 evas_object_image_alpha_set(__pImageObject, false);
1024 evas_object_image_filled_set(__pImageObject, EINA_TRUE);
1025 evas_object_resize(__pImageObject, phyBounds.width, phyBounds.height);
1026 evas_object_move(__pImageObject, phyBounds.x, phyBounds.y);
1027 evas_object_show(__pImageObject);
1029 __pVisualElement = control.GetVisualElement();
1035 if (pVisualElementSurface)
1037 delete pVisualElementSurface;
1038 pVisualElementSurface = null;
1041 if (__pRenderImageObject)
1043 evas_object_del(__pRenderImageObject);
1044 __pRenderImageObject = null;
1051 _OverlayAgent::CreatePixmap(void)
1053 SysTryReturnResult(NID_UI_CTRL, __pImageObject != null, E_SYSTEM, "[E_SYSTEM] __pImageObject is null");
1060 evas_object_geometry_get(__pImageObject, &x, &y, &w, &h);
1061 SysSecureLog(NID_UI_CTRL,"__pImageObject rect is [%d, %d, %d, %d]", x, y, w, h);
1063 Rectangle phyRect(x, y, w, h);
1064 SysTryReturnResult(NID_UI_CTRL, (phyRect.width >= GetDstRectMinWidth()) && (phyRect.height >= GetDstRectMinHeight()), E_SYSTEM, "[E_SYSTEM] can't make a pixmap. dimension[%d, %d] is not proper",phyRect.width, phyRect.height);
1067 Display *pDisplay = (Display*)ecore_x_display_get();
1068 SysTryReturnResult(NID_UI_CTRL, pDisplay != null, E_SYSTEM, "[E_SYSTEM] pDisplay is null");
1070 __pixmap = XCreatePixmap(pDisplay, DefaultRootWindow(pDisplay), phyRect.width, phyRect.height, DefaultDepth(pDisplay, DefaultScreen(pDisplay)));
1071 SysTryReturnResult(NID_UI_CTRL, __pixmap != 0, E_SYSTEM, "[E_SYSTEM] failed to create a pixmap");
1073 GC gc = XCreateGC(pDisplay, __pixmap, 0,0);
1074 SysTryReturnResult(NID_UI_CTRL, gc > 0, E_SYSTEM, "[E_SYSTEM] failed to create GC");
1076 XSetForeground(pDisplay, gc, (long unsigned int)(__bgColor.GetRGB32()));
1077 XFillRectangle(pDisplay, __pixmap, gc, 0, 0, phyRect.width, phyRect.height);
1079 XFreeGC(pDisplay, gc);
1081 // Set native surface.
1082 Evas_Native_Surface surf = {0,};
1084 surf.version = EVAS_NATIVE_SURFACE_VERSION;
1085 surf.type = EVAS_NATIVE_SURFACE_X11;
1086 surf.data.x11.visual = ecore_x_default_visual_get(ecore_x_display_get(), ecore_x_default_screen_get());
1087 surf.data.x11.pixmap = __pixmap;
1089 evas_object_lower(__pImageObject);
1090 if (__style == _OVERLAY_AGENT_STYLE_PANEL_SW || __style == _OVERLAY_AGENT_STYLE_PANEL_GL)
1092 if(__pRenderImageObject)
1094 evas_object_lower(__pRenderImageObject);
1098 evas_object_image_native_surface_set(__pImageObject, &surf);
1101 __pixmapDamageHandle = ecore_x_damage_new(__pixmap, ECORE_X_DAMAGE_REPORT_RAW_RECTANGLES);
1102 SysTryCatch(NID_UI_CTRL, __pixmapDamageHandle != 0, , E_SYSTEM, "[E_SYSTEM] failed to create a damage object");
1104 __pPixmapEventHandler = ecore_event_handler_add(ECORE_X_EVENT_DAMAGE_NOTIFY, OnPixmapDamaged, (void*)this);
1105 SysTryCatch(NID_UI_CTRL, __pPixmapEventHandler != null, , E_SYSTEM, "[E_SYSTEM] failed to add a pixmap damage event handle");
1107 __pixmapPhyRect = Rectangle(0, 0, phyRect.width, phyRect.height);
1109 SysSecureLog(NID_UI_CTRL, "__pixmap : %d.", __pixmap);
1114 if (__pPixmapEventHandler)
1116 ecore_event_handler_del(__pPixmapEventHandler);
1117 __pPixmapEventHandler = null;
1120 if (__pixmapDamageHandle)
1122 ecore_x_damage_free(__pixmapDamageHandle);
1123 __pixmapDamageHandle = 0;
1128 XFreePixmap((Display*)ecore_x_display_get(), __pixmap);
1136 _OverlayAgent::GetPixmap(void) const
1142 _OverlayAgent::GetPixmapImageObject(void) const
1144 return __pImageObject;
1148 _OverlayAgent::Show(void) const
1154 _OverlayAgent::GrabXvPort(void)
1156 int firstXvPort = -1;
1159 Display* pDisplay = (Display*)ecore_x_display_get();
1160 SysTryReturn(NID_UI_CTRL, pDisplay != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1162 if (!_CheckXvExtension(pDisplay, &firstXvPort, &portCount))
1164 SysTryReturn(NID_UI_CTRL, false, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] _CheckXvExtension is failed.");
1167 SysTryReturn(NID_UI_CTRL, firstXvPort != -1, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] first XvPort[%d] is invalid.", firstXvPort);
1168 SysTryReturn(NID_UI_CTRL, portCount >= 1 && portCount <= _OVERLAYAGENT_XV_PORT , E_SYSTEM, E_SYSTEM, "[E_SYSTEM] portCount[%d] is invalid.", portCount);
1170 _OverlayAgent::__baseXvPort = firstXvPort;
1172 int i, tempPort = 0;
1173 for (i = 0; i < portCount; i++)
1175 if(!__isPortGrapped[i])
1177 tempPort = firstXvPort + i;
1178 if (XvGrabPort(pDisplay, tempPort, 0) != Success)
1180 SysSecureLog(NID_UI_CTRL, "this port[%d] is alreadly used by another process", tempPort);
1184 __xvPort = tempPort;
1185 __grabXvPort = true;
1186 __isPortGrapped[i] = true;
1192 SysTryReturn(NID_UI_CTRL, __xvPort != -1 , E_SYSTEM, E_SYSTEM, "XvGrabPort fail for pixmap : %d", __pixmap);
1194 SysSecureLog(NID_UI_CTRL, "XvGrabPort port: %d pixmap: %d style: %d", __xvPort, __pixmap, __style);
1196 __overlayAgentXvPortCount++;
1202 _OverlayAgent::PutXvImage(void)
1204 SysTryReturnResult(NID_UI_CTRL, __pixmap != 0, E_SYSTEM, "[E_SYSTEM] __pixmap is invalid. something wrong!");
1206 Display* pDisplay = (Display*)ecore_x_display_get();
1207 SysTryReturn(NID_UI_CTRL, pDisplay != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pDisplay is null.");
1209 GC gc = DefaultGCOfScreen(DefaultScreenOfDisplay(pDisplay));
1211 bool needRealloc = false;
1212 Dimension usrDim(__srcDimension.width,__srcDimension.height);
1213 if (__pXvImage == null
1214 || __newColorFormat != __colorFormat
1215 || !usrDim.Equals(__orgUsrImgDimension) /*|| __pXvImage->data_size != __pRefUserByteBuffer->GetCapacity()*/)
1221 SysSecureLog(NID_UI_CTRL, "Need to unGrap port[%d]!", __xvPort);
1225 if(__pXvImage != null)
1227 SysSecureLog(NID_UI_CTRL,"pXvImage->data_size : %d, userBufferSize : %d", __pXvImage->data_size, __pRefUserByteBuffer->GetCapacity());
1228 SysSecureLog(NID_UI_CTRL,"__newColorFormat : %x, __colorFormat : %x", __newColorFormat, __colorFormat);
1232 XShmDetach(pDisplay, __pShmInfo);
1233 shmdt(__pShmInfo->shmaddr);
1234 shmctl(__pShmInfo->shmid, IPC_RMID, NULL);
1247 SysSecureLog(NID_UI_CTRL, "__pXvImage is null!");
1253 SysSecureLog(NID_UI_CTRL, "port[%d] is invalid!", __xvPort);
1254 result r = GrabXvPort();
1255 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
1260 XvImage* pXvImage = null;
1261 XShmSegmentInfo* pShmInfo = null;
1263 pShmInfo = new (std::nothrow) XShmSegmentInfo();
1264 if (pShmInfo == null)
1266 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM]pShmInfo is null.");
1270 pXvImage = XvShmCreateImage(pDisplay, __xvPort, __newColorFormat, 0, __srcDimension.width, __srcDimension.height, pShmInfo);
1271 SysTryReturn(NID_UI_CTRL, pXvImage != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] failed to create a XvImage.");
1273 pShmInfo->shmid = shmget(IPC_PRIVATE, pXvImage->data_size, IPC_CREAT | 0777);
1274 pShmInfo->shmaddr = pXvImage->data = (char*)shmat(pShmInfo->shmid, 0, 0);
1275 pShmInfo->readOnly = False;
1277 if (!XShmAttach(pDisplay, pShmInfo))
1280 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] failed to XShmAttach.");
1284 __pXvImage = pXvImage;
1285 __pShmInfo = pShmInfo;
1286 __colorFormat = __newColorFormat;
1289 memcpy(__pXvImage->data, __pRefUserByteBuffer->GetPointer(), __pXvImage->data_size);
1290 __pRefUserByteBuffer = null;
1291 __orgUsrImgDimension = usrDim;
1293 XvShmPutImage(pDisplay, __xvPort, __pixmap, gc, __pXvImage, 0, 0, __srcDimension.width, __srcDimension.height,
1294 __pixmapPhyRect.x, __pixmapPhyRect.y, __pixmapPhyRect.width, __pixmapPhyRect.height, False);
1298 SysSecureLog(NID_UI_CTRL, "colorFormat : %x, src[%d,%d,%d, %d], dst [%d,%d,%d,%d]", __colorFormat, 0, 0, __srcDimension.width, __srcDimension.height,__pixmapPhyRect.x, __pixmapPhyRect.y, __pixmapPhyRect.width, __pixmapPhyRect.height);
1304 _OverlayAgent::PutEvasImage(void)
1306 SysTryReturn(NID_UI_CTRL, __pImageObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] __pImageObject is null.");
1307 SysTryReturn(NID_UI_CTRL, __pRefUserByteBuffer->GetPointer(), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] __pUserBuffer is null.");
1309 result r = E_SYSTEM;
1311 Dimension usrDim(__srcDimension.width,__srcDimension.height);
1312 if(!usrDim.Equals(__orgUsrImgDimension) || __pOrgUserByteBuffer == null)
1314 if(__pOrgUserByteBuffer)
1316 __pOrgUserByteBuffer->SetPosition(0);
1317 delete __pOrgUserByteBuffer;
1318 __pOrgUserByteBuffer = null;
1321 int bufSize = __srcDimension.width *__srcDimension.height * 4;
1322 __pOrgUserByteBuffer = new (std::nothrow) ByteBuffer;
1323 SysTryReturn(NID_UI_CTRL, __pOrgUserByteBuffer != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] __pOrgUserByteBuffer is null.");
1325 r = __pOrgUserByteBuffer->Construct(bufSize);
1328 SysLogException(NID_UI_CTRL, r, "[%s] Failed to construct a __pOrgUserByteBuffer.", GetErrorMessage(r));
1329 delete __pOrgUserByteBuffer;
1330 __pOrgUserByteBuffer = null;
1335 __pOrgUserByteBuffer->SetPosition(0);
1338 if(__overlayAgentColorFormat == _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888)
1340 r = __pOrgUserByteBuffer->SetArray(__pRefUserByteBuffer->GetPointer(), 0, __pOrgUserByteBuffer->GetCapacity());
1341 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r,"[%s] Propagating.", GetErrorMessage(r));
1343 pImg = (void*)__pOrgUserByteBuffer->GetPointer();
1344 //_ImageUtil::ConvertPixelFormat(srcBuffer, MEDIA_PIXEL_FORMAT_RGBA8888, __srcDimension.width, __srcDimension.height, *pDstbuf, MEDIA_PIXEL_FORMAT_RGBA8888);
1348 switch (__overlayAgentColorFormat)
1350 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_RGB565:
1351 r = _ImageUtil::ConvertPixelFormat(*__pRefUserByteBuffer, MEDIA_PIXEL_FORMAT_RGB565LE, __srcDimension.width, __srcDimension.height, *__pOrgUserByteBuffer, MEDIA_PIXEL_FORMAT_BGRA8888);
1353 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR:
1354 r = _ImageUtil::ConvertPixelFormat(*__pRefUserByteBuffer, MEDIA_PIXEL_FORMAT_YUV420P, __srcDimension.width, __srcDimension.height, *__pOrgUserByteBuffer, MEDIA_PIXEL_FORMAT_BGRA8888);
1356 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_NV12:
1357 r = _ImageUtil::ConvertPixelFormat(*__pRefUserByteBuffer, MEDIA_PIXEL_FORMAT_NV12, __srcDimension.width, __srcDimension.height, *__pOrgUserByteBuffer, MEDIA_PIXEL_FORMAT_BGRA8888);
1359 case _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_UYVY:
1360 r = _ImageUtil::ConvertPixelFormat(*__pRefUserByteBuffer, MEDIA_PIXEL_FORMAT_UYVY422, __srcDimension.width, __srcDimension.height, *__pOrgUserByteBuffer, MEDIA_PIXEL_FORMAT_BGRA8888);
1363 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_FORMAT, "The specified pixel format is not supported.");
1364 return E_UNSUPPORTED_FORMAT;
1367 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r,"[%s] Propagating.", GetErrorMessage(r));
1369 pImg = (void*)(__pOrgUserByteBuffer->GetPointer());
1373 SysTryReturnResult(NID_UI_CTRL, pImg != null, E_SYSTEM, "[E_SYSTEM] converted image data is invalid.");
1375 // SysLog(NID_UI_CTRL, "__pUserBuffer : %x, size : %d", __pRefUserByteBuffer->GetPointer(), __pRefUserByteBuffer->GetCapacity());
1376 // SysLog(NID_UI_CTRL, "__pOrgBuffer : %x, size : %d", __pOrgUserByteBuffer->GetPointer(), __pOrgUserByteBuffer->GetCapacity());
1377 // SysLog(NID_UI_CTRL, "__srcDimension[%d, %d]",__srcDimension.width, __srcDimension.height);
1379 evas_object_image_size_set(__pImageObject, __srcDimension.width, __srcDimension.height);
1380 evas_object_image_filled_set(__pImageObject, EINA_TRUE);
1381 evas_object_image_alpha_set(__pImageObject, false);
1382 evas_object_image_data_set(__pImageObject, pImg);
1383 evas_object_image_data_update_add(__pImageObject, 0, 0, __srcDimension.width, __srcDimension.height);
1384 evas_object_show(__pImageObject);
1386 AdjustImageObject();
1388 __pVisualElement->SetFlushNeeded();
1390 __orgUsrImgDimension = usrDim;
1391 __pRefUserByteBuffer = null;
1397 _OverlayAgent::UngrabXvPort(void)
1401 Display* pDisplay = (Display*) ecore_x_display_get();
1402 Atom atom = XInternAtom(pDisplay, "_USER_WM_PORT_ATTRIBUTE_STREAM_OFF", False);
1403 XvSetPortAttribute(pDisplay, __xvPort, atom, 1);
1404 XvUngrabPort(pDisplay, __xvPort, 0);
1406 SysSecureLog(NID_UI_CTRL, "The current value of UngrabXvPort port is %d, pixmap is %d and style is %d", __xvPort, __pixmap, __style);
1408 __isPortGrapped[__xvPort-__baseXvPort] = false;
1410 __grabXvPort = false;
1411 __overlayAgentXvPortCount--;
1416 _OverlayAgent::IsValidSourceDimension(const Dimension& dimension) const
1418 SysTryReturn(NID_UI_CTRL, dimension.width >= GetSrcRectMinWidth(), false, E_INVALID_ARG, "[E_INVALID_ARG] The width of dimension [%d] is under the minimum size.", dimension.width);
1419 SysTryReturn(NID_UI_CTRL, dimension.height >= GetSrcRectMinHeight(), false, E_INVALID_ARG, "[E_INVALID_ARG] The height of dimension [%d] is under the minimum size.", dimension.height);
1421 SetLastResult(E_SUCCESS);
1427 _OverlayAgent::IsValidDestinationDimension(const FloatDimension& dimension) const
1429 FloatDimension phyDimF = _CoordinateSystemUtils::Transform(dimension);
1430 Dimension phyDim = _CoordinateSystemUtils::ConvertToInteger(phyDimF);
1432 SysTryReturn(NID_UI_CTRL, (phyDim.width >= GetDstRectMinWidth() && phyDim.height >= GetDstRectMinHeight()), false, E_INVALID_ARG,
1433 "[E_INVALID_ARG] Dimension L[%.3f, %.3f] P[%d,%d] is over minimun size.", dimension.width, dimension.height, phyDim.width, phyDim.height);
1435 SysTryReturn(NID_UI_CTRL, __pSmartObject != null, false, E_SYSTEM, "[E_SYSTEM] __pSmartObject is null");
1437 FloatRectangle testRect = __pVisualElement->GetBounds();
1438 FloatRectangle containerPhyRectF = _CoordinateSystemUtils::Transform(testRect);
1439 Dimension containerDim = _CoordinateSystemUtils::ConvertToInteger(FloatDimension(containerPhyRectF.width, containerPhyRectF.height));
1441 SysTryReturn(NID_UI_CTRL, (phyDim.width <= containerDim.width && phyDim.height <= containerDim.height), false, E_INVALID_ARG,
1442 "[E_INVALID_ARG] RenderRect L[%.3f, %.3f] P[%d,%d] is bigger than container size [%d, %d]", dimension.width, dimension.height, phyDim.width, phyDim.height, containerDim.width, containerDim.height);
1448 _OverlayAgent::AdjustImageObject(void)
1450 SysTryReturn(NID_UI_CTRL, __pSmartObject != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] The SmartObject is null");
1451 SysTryReturn(NID_UI_CTRL, __pImageObject != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] The ImageObject is null");
1452 SysTryReturn(NID_UI_CTRL, __pVisualElement != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] The VisualElement is null");
1458 int resizeRectX = 0;
1459 int resizeRectY = 0;
1460 int resizeRectW = 0;
1461 int resizeRectH = 0;
1462 int noImage = false;
1463 int imgWidth = 0, imgHeight = 0;
1464 //int orgX, orgY, orgW, orgH;
1466 FloatRectangle curRectF = __pVisualElement->GetBounds();
1467 FloatRectangle curPhyRectF = _CoordinateSystemUtils::Transform(curRectF);
1468 Rectangle curPhyRect = _CoordinateSystemUtils::ConvertToInteger(curPhyRectF);
1469 SysLog(NID_UI_CTRL, "The current value of curPhyRect [%d, %d]", curPhyRect.width, curPhyRect.height);
1471 if (__srcDimension.width == 0 || __srcDimension.height == 0)
1473 SysSecureLog(NID_UI_CTRL, "src dimension[%d, %d] is an initialized state", __srcDimension.width, __srcDimension.height);
1477 // 1. setting renderRect resize region
1478 if(__resizeRect.width == 0 || __resizeRect.height == 0)
1480 if (__pRenderImageObject)
1482 evas_object_geometry_get(__pRenderImageObject, NULL, NULL, &resizeRectW, &resizeRectH);
1486 resizeRectW = curPhyRect.width;
1487 resizeRectH = curPhyRect.height;
1492 resizeRectW = __resizeRect.width;
1493 resizeRectH = __resizeRect.height;
1496 // 2. adjust RenderRect
1499 w = curPhyRect.width;
1500 h = curPhyRect.height;
1501 SysSecureLog(NID_UI_CTRL, "container [%d, %d, %d, %d]", x, y, w, h);
1503 if(__pRenderImageObject)
1505 // evas_object_geometry_get(__pRenderImageObject, &orgX, &orgY, &orgW, &orgH);
1506 // SysLog(NID_UI_CTRL, "renderRect before [%d, %d, %d, %d]", orgX, orgY, orgW, orgH);
1508 evas_object_resize(__pRenderImageObject, resizeRectW, resizeRectH);
1510 resizeRectX = x + ((w - resizeRectW)/2);
1511 resizeRectY = y + ((h - resizeRectH)/2);
1512 evas_object_move(__pRenderImageObject, resizeRectX, resizeRectY);
1513 evas_object_show(__pRenderImageObject);
1515 SysSecureLog(NID_UI_CTRL, "renderRect [%d, %d, %d, %d]", resizeRectX, resizeRectY, resizeRectW, resizeRectH);
1517 // evas_object_geometry_get(__pRenderImageObject, &orgX, &orgY, &orgW, &orgH);
1518 // SysLog(NID_UI_CTRL, "renderRect after adjust [%d, %d, %d, %d]", orgX, orgY, orgW, orgH);
1522 //evas_object_geometry_get(__pImageObject, &orgX, &orgY, &orgW, &orgH);
1523 //SysLog(NID_UI_CTRL, "__pImageObject rect [%d, %d, %d, %d]", orgX, orgY, orgW, orgH);
1525 // set region base x, y
1530 SysSecureLog(NID_UI_CTRL, "resizeRect is [%d, %d, %d, %d]", resizeRectX, resizeRectY, resizeRectW, resizeRectH);
1534 int finalX, finalY, finalW, finalH;
1536 SysSecureLog(NID_UI_CTRL, "for rotate status operation");
1538 // 3. image object rotate
1539 Evas_Map* pMap = evas_map_new(4);
1540 evas_map_util_points_populate_from_object(pMap, __pImageObject);
1542 SysSecureLog(NID_UI_CTRL, "center [%d, %d]", resizeRectX + (resizeRectW/2), resizeRectY + (resizeRectH/2));
1543 evas_map_util_rotate(pMap, __userRotation, resizeRectX + (resizeRectW/2), resizeRectY + (resizeRectH/2));
1545 evas_object_map_set(__pImageObject, pMap);
1546 evas_object_map_enable_set(__pImageObject, EINA_TRUE);
1548 evas_object_image_filled_set(__pImageObject, EINA_TRUE);
1549 evas_object_show(__pImageObject);
1550 evas_map_free(pMap);
1552 SysSecureLog(NID_UI_CTRL, "rotate value is [%d]",__userRotation);
1554 // 4. reset map coordinate
1555 if (!noImage && __aspectRatio && __pRenderImageObject != null)
1557 // don't do anything for a Render Rect, only adjust an image object coordination again
1558 Dimension srcDim(__srcDimension.width, __srcDimension.height);
1559 if (__userRotation == _ROTATION_90 || __userRotation == _ROTATION_270 )
1561 int tmp = srcDim.width;
1562 srcDim.width = srcDim.height;
1563 srcDim.height = tmp;
1564 // SysLog(NID_UI_CTRL, "src dim is swapped");
1567 SysSecureLog(NID_UI_CTRL, "src dimension [%d, %d]", srcDim.width, srcDim.height);
1569 float srcRatio = ((float)srcDim.width) / ((float)srcDim.height);
1571 float tmpWidth = (float)resizeRectW;
1572 float tmpHeight = tmpWidth / srcRatio;
1574 if (resizeRectH < (int)tmpHeight)
1576 finalH = resizeRectH;
1577 finalW = (int)((float)finalH * srcRatio);
1581 finalW = resizeRectW;
1582 finalH = (int)((float)finalW / srcRatio);
1585 finalX = resizeRectX + ((resizeRectW - finalW) / 2);
1586 finalY = resizeRectY + ((resizeRectH - finalH) / 2);
1590 finalX = resizeRectX;
1591 finalY = resizeRectY;
1592 finalW = resizeRectW;
1593 finalH = resizeRectH;
1596 //int p1, p2, p3, p4;
1597 //evas_object_geometry_get(__pImageObject, &p1, &p2, &p3, &p4);
1598 //SysLog(NID_UI_CTRL, "__pImageObject after rotate [%d, %d, %d, %d]", p1, p2, p3, p4);
1600 SysSecureLog(NID_UI_CTRL, "final image object [%d, %d, %d, %d]", finalX, finalY, finalW, finalH);
1602 pMap = evas_map_new(4);
1603 evas_map_util_points_populate_from_object(pMap, __pImageObject);
1605 evas_object_image_size_get(__pImageObject, &imgWidth, &imgHeight);
1606 SysSecureLog(NID_UI_CTRL, "image object size is [%d, %d]", imgWidth, imgHeight);
1608 switch(__userRotation)
1613 evas_map_point_coord_set(pMap, 1, finalX, finalY, 0);
1614 evas_map_point_coord_set(pMap, 0, finalX + finalW, finalY, 0);
1615 evas_map_point_coord_set(pMap, 3, finalX + finalW, finalY + finalH, 0);
1616 evas_map_point_coord_set(pMap, 2, finalX, finalY + finalH, 0);
1618 else if(__udMirroring)
1620 evas_map_point_coord_set(pMap, 3, finalX, finalY, 0);
1621 evas_map_point_coord_set(pMap, 2, finalX + finalW, finalY, 0);
1622 evas_map_point_coord_set(pMap, 1, finalX + finalW, finalY + finalH, 0);
1623 evas_map_point_coord_set(pMap, 0, finalX, finalY + finalH, 0);
1627 evas_map_point_coord_set(pMap, 0, finalX, finalY, 0);
1628 evas_map_point_coord_set(pMap, 1, finalX + finalW, finalY, 0);
1629 evas_map_point_coord_set(pMap, 2, finalX + finalW, finalY + finalH, 0);
1630 evas_map_point_coord_set(pMap, 3, finalX, finalY + finalH, 0);
1636 evas_map_point_coord_set(pMap, 2, finalX, finalY, 0);
1637 evas_map_point_coord_set(pMap, 1, finalX + finalW, finalY, 0);
1638 evas_map_point_coord_set(pMap, 0, finalX + finalW, finalY + finalH, 0);
1639 evas_map_point_coord_set(pMap, 3, finalX, finalY + finalH, 0);
1641 else if(__udMirroring)
1643 evas_map_point_coord_set(pMap, 0, finalX, finalY, 0);
1644 evas_map_point_coord_set(pMap, 3, finalX + finalW, finalY, 0);
1645 evas_map_point_coord_set(pMap, 2, finalX + finalW, finalY + finalH, 0);
1646 evas_map_point_coord_set(pMap, 1, finalX, finalY + finalH, 0);
1650 evas_map_point_coord_set(pMap, 3, finalX, finalY, 0);
1651 evas_map_point_coord_set(pMap, 0, finalX + finalW, finalY, 0);
1652 evas_map_point_coord_set(pMap, 1, finalX + finalW, finalY + finalH, 0);
1653 evas_map_point_coord_set(pMap, 2, finalX, finalY + finalH, 0);
1659 evas_map_point_coord_set(pMap, 3, finalX, finalY, 0);
1660 evas_map_point_coord_set(pMap, 2, finalX + finalW, finalY, 0);
1661 evas_map_point_coord_set(pMap, 1, finalX + finalW, finalY + finalH, 0);
1662 evas_map_point_coord_set(pMap, 0, finalX, finalY + finalH, 0);
1664 else if(__udMirroring)
1666 evas_map_point_coord_set(pMap, 1, finalX, finalY, 0);
1667 evas_map_point_coord_set(pMap, 0, finalX + finalW, finalY, 0);
1668 evas_map_point_coord_set(pMap, 3, finalX + finalW, finalY + finalH, 0);
1669 evas_map_point_coord_set(pMap, 2, finalX, finalY + finalH, 0);
1673 evas_map_point_coord_set(pMap, 2, finalX, finalY, 0);
1674 evas_map_point_coord_set(pMap, 3, finalX + finalW, finalY, 0);
1675 evas_map_point_coord_set(pMap, 0, finalX + finalW, finalY + finalH, 0);
1676 evas_map_point_coord_set(pMap, 1, finalX, finalY + finalH, 0);
1682 evas_map_point_coord_set(pMap, 0, finalX, finalY, 0);
1683 evas_map_point_coord_set(pMap, 3, finalX + finalW, finalY, 0);
1684 evas_map_point_coord_set(pMap, 2, finalX + finalW, finalY + finalH, 0);
1685 evas_map_point_coord_set(pMap, 1, finalX, finalY + finalH, 0);
1687 else if(__udMirroring)
1689 evas_map_point_coord_set(pMap, 2, finalX, finalY, 0);
1690 evas_map_point_coord_set(pMap, 1, finalX + finalW, finalY, 0);
1691 evas_map_point_coord_set(pMap, 0, finalX + finalW, finalY + finalH, 0);
1692 evas_map_point_coord_set(pMap, 3, finalX, finalY + finalH, 0);
1696 evas_map_point_coord_set(pMap, 1, finalX, finalY, 0);
1697 evas_map_point_coord_set(pMap, 2, finalX + finalW, finalY, 0);
1698 evas_map_point_coord_set(pMap, 3, finalX + finalW, finalY + finalH, 0);
1699 evas_map_point_coord_set(pMap, 0, finalX, finalY + finalH, 0);
1703 SysSecureLog(NID_UI_CTRL, "__userRotation[%d] is invalid", __userRotation);
1707 if(imgWidth > 0 && imgHeight > 0)
1709 evas_map_point_image_uv_set(pMap, 0, 0, 0);
1710 evas_map_point_image_uv_set(pMap, 1, imgWidth, 0);
1711 evas_map_point_image_uv_set(pMap, 2, imgWidth, imgHeight);
1712 evas_map_point_image_uv_set(pMap, 3, 0, imgHeight);
1715 evas_object_map_set(__pImageObject, pMap);
1716 evas_object_map_enable_set(__pImageObject, EINA_TRUE);
1717 evas_map_free(pMap);
1719 evas_object_image_filled_set(__pImageObject, EINA_TRUE);
1720 evas_object_show(__pImageObject);
1724 SysSecureLog(NID_UI_CTRL, "not for rotate status operation");
1726 if (!noImage && __aspectRatio && __pRenderImageObject != null)
1728 Dimension srcDim(__srcDimension.width, __srcDimension.height);
1729 SysSecureLog(NID_UI_CTRL, "src dimension is [%d, %d]", srcDim.width, srcDim.height);
1731 float srcRatio = ((float)srcDim.width) / ((float)srcDim.height);
1732 float tmpWidth = (float)resizeRectW;
1733 float tmpHeight = tmpWidth / srcRatio;
1736 if (resizeRectH < (int)tmpHeight)
1738 lastDst.height = resizeRectH;
1739 lastDst.width = (int)((float)lastDst.height * srcRatio);
1743 lastDst.width = resizeRectW;
1744 lastDst.height = (int)((float)lastDst.width / srcRatio);
1747 lastDst.x = resizeRectX + ((resizeRectW - lastDst.width) / 2);
1748 lastDst.y = resizeRectY + ((resizeRectH - lastDst.height) / 2);
1750 // evas_object_geometry_get(__pImageObject, &orgX, &orgY, &orgW, &orgH);
1751 // SysLog(NID_UI_CTRL, "__pImageObject before [%d, %d, %d, %d]", orgX, orgY, orgW, orgH);
1753 evas_object_resize(__pImageObject, lastDst.width, lastDst.height);
1754 evas_object_move(__pImageObject, lastDst.x, lastDst.y);
1756 // evas_object_geometry_get(__pImageObject, &orgX, &orgY, &orgW, &orgH);
1757 // SysLog(NID_UI_CTRL, "__pImageObject after [%d, %d, %d, %d]", orgX, orgY, orgW, orgH);
1759 SysSecureLog(NID_UI_CTRL, "Ratio on / lastDst [%d, %d, %d, %d]",lastDst.x, lastDst.y, lastDst.width, lastDst.height);
1763 evas_object_image_size_get(__pImageObject, &imgWidth, &imgHeight);
1764 SysSecureLog(NID_UI_CTRL, "image object size is [%d, %d]", imgWidth, imgHeight);
1766 Evas_Map* pMap = evas_map_new(4);
1767 evas_map_util_points_populate_from_object(pMap, __pImageObject);
1769 evas_map_point_coord_set(pMap, 0, resizeRectX, resizeRectY, 0);
1770 evas_map_point_coord_set(pMap, 1, resizeRectX+resizeRectW, resizeRectY, 0);
1771 evas_map_point_coord_set(pMap, 2, resizeRectX+resizeRectW, resizeRectY+resizeRectH, 0);
1772 evas_map_point_coord_set(pMap, 3, resizeRectX, resizeRectY+resizeRectH, 0);
1774 if(imgWidth > 0 && imgHeight > 0)
1776 evas_map_point_image_uv_set(pMap, 0, 0, 0);
1777 evas_map_point_image_uv_set(pMap, 1, imgWidth, 0);
1778 evas_map_point_image_uv_set(pMap, 2, imgWidth, imgHeight);
1779 evas_map_point_image_uv_set(pMap, 3, 0, imgHeight);
1782 evas_object_map_set(__pImageObject, pMap);
1783 evas_object_map_enable_set(__pImageObject, EINA_TRUE);
1784 evas_map_free(pMap);
1787 evas_object_image_filled_set(__pImageObject, EINA_TRUE);
1788 evas_object_show(__pImageObject);
1791 __pVisualElement->SetFlushNeeded();
1797 _OverlayAgent::GetOverlayAgentCount(void)
1799 return __overlayAgentcount;
1803 _OverlayAgent::GetPixelFormatListN(void)
1805 if (!__OverlayAgentBufferPixelFormat[0])
1807 const wchar_t* _UI_REGISTRY_PATH = L"/usr/etc/system-info.ini";
1808 const wchar_t* _UI_INFO_SESSION = L"UiControlInfo";
1810 _RegistryImpl registry;
1811 result r = registry.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
1812 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1814 String pixelFormatList(null);
1815 r = registry.GetValue(_UI_INFO_SESSION, L"OverlayRegionBufferPixelFormat", pixelFormatList);
1816 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1819 if (pixelFormatList.Contains(L"ARGB8888"))
1821 __OverlayAgentBufferPixelFormat[_OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888] = true;
1825 if (pixelFormatList.Contains(L"RGB565"))
1827 __OverlayAgentBufferPixelFormat[_OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_RGB565] = true;
1831 if (pixelFormatList.Contains(L"YCbCr420P"))
1833 __OverlayAgentBufferPixelFormat[_OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR] = true;
1837 if (pixelFormatList.Contains(L"NV12"))
1839 __OverlayAgentBufferPixelFormat[_OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_NV12] = true;
1843 if (pixelFormatList.Contains(L"UYVY"))
1845 __OverlayAgentBufferPixelFormat[_OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_UYVY] = true;
1849 SysAssertf(set, "The registry file is an invalid.");
1851 __OverlayAgentBufferPixelFormat[0] = set;
1854 std::unique_ptr< ArrayListT<bool> > pFormatList( new (std::nothrow) ArrayListT<bool>());
1855 SysTryReturn(NID_UI_CTRL, pFormatList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] failed to create a list instance");
1857 result r = pFormatList->Construct();
1858 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1860 for (int index = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888; index <= _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_UYVY; index++)
1862 r = pFormatList->Add(__OverlayAgentBufferPixelFormat[index]);
1864 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1866 return pFormatList.release();
1870 _OverlayAgent::EvaluateBounds(OverlayAgentEvaluationOption option, Rectangle& rect, bool& modified)
1873 SysTryReturnResult(NID_UI_CTRL, rect.width > 0 && rect.height > 0, E_INVALID_ARG, "[E_INVALID_ARG] The size of input rectangle(%d, %d) is invalid.", rect.width, rect.height);
1875 int screenWidth = _Screen::GetWidth();
1876 int screenHeight = _Screen::GetHeight();
1877 SysTryReturnResult(NID_UI_CTRL, screenWidth > 0 && screenHeight > 0, E_INVALID_ARG, "[E_SYSTEM] The value of screen size is invalid.");
1879 // if orientation status of screen is landscape mode, swap width and height.
1881 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
1882 int orientation = ecore_evas_rotation_get(pEcoreEvas->GetEcoreEvas());
1884 if (orientation == 90 || orientation == 270)
1886 int temp = screenWidth;
1887 screenWidth = screenHeight;
1888 screenHeight = temp;
1889 SysSecureLog(NID_UI_CTRL, "The current value of device screen width is %d, device screen height is %d and orientation is %d", screenWidth, screenHeight, orientation);
1892 const int widthUnit = GetWidthUnit();
1893 const int heightUnit = GetHeightUnit();
1894 SysTryReturnResult(NID_UI_CTRL, widthUnit > 0 && heightUnit > 0, E_SYSTEM, "[E_SYSTEM] The value of overlay control's width Unit and height Unit are invalid.");
1896 int physicalMaxWidth= screenWidth - (screenWidth % widthUnit);
1897 int physicalMaxHeight = screenHeight - (screenHeight % heightUnit);
1898 int logicalMaxWidth = _CoordinateSystemUtils::InverseHorizontalTransform(physicalMaxWidth);
1899 int logicalMaxHeight = _CoordinateSystemUtils::InverseVerticalTransform(physicalMaxHeight);
1900 SysSecureLog(NID_UI_CTRL, "The physical Max size of overlay control is (%d, %d) and logical Max size of overlay control is (%d, %d)", physicalMaxWidth, physicalMaxHeight, logicalMaxWidth, logicalMaxHeight);
1902 int dstMinWidth = GetDstRectMinWidth();
1903 int dstMinHeight = GetDstRectMinHeight();
1904 SysTryReturnResult(NID_UI_CTRL, dstMinWidth > 0 && dstMinHeight > 0, E_SYSTEM, "[E_SYSTEM] The value of overlay control's Min width and Min height are invalid.");
1906 Rectangle physicalRect(_CoordinateSystemUtils::Transform(rect));
1907 int widthReminder = physicalRect.width % widthUnit;
1908 int heightReminder = physicalRect.height % heightUnit;
1912 case OVERLAY_AGENT_EVALUATION_OPTION_GREATER_THAN:
1914 if (physicalRect.width > physicalMaxWidth || physicalRect.height > physicalMaxHeight)
1917 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_OPTION, "[E_UNSUPPORTED_OPTION] The size of input rect exceeds physical maximun size.");
1919 return E_UNSUPPORTED_OPTION;
1922 if (rect.width > logicalMaxWidth || rect.height > logicalMaxHeight)
1925 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_OPTION, "[E_UNSUPPORTED_OPTION] The size of input rect exceeds logical maximun size.");
1927 return E_UNSUPPORTED_OPTION;
1930 if (widthReminder != 0)
1932 widthReminder -= widthUnit;
1935 if (heightReminder != 0)
1937 heightReminder -= heightUnit;
1940 physicalRect.width -= widthReminder;
1941 physicalRect.height -= heightReminder;
1943 if (physicalRect.width < dstMinWidth)
1945 physicalRect.width = dstMinWidth;
1948 if (physicalRect.height < dstMinHeight)
1950 physicalRect.height = dstMinHeight;
1954 case OVERLAY_AGENT_EVALUATION_OPTION_LESS_THAN:
1956 if (physicalRect.width < dstMinWidth || physicalRect.height < dstMinHeight)
1959 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_OPTION, "[E_UNSUPPORTED_OPTION] The size of input rect is under minimun size.");
1961 return E_UNSUPPORTED_OPTION;
1964 if (physicalRect.width > physicalMaxWidth)
1966 physicalRect.width = physicalMaxWidth + widthReminder;
1969 if (physicalRect.height > physicalMaxHeight)
1971 physicalRect.height = physicalMaxHeight + heightReminder;
1974 physicalRect.width -= widthReminder;
1975 physicalRect.height -= heightReminder;
1981 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_OPTION, "[E_UNSUPPORTED_OPTION] The input option is an invalid.");
1983 return E_UNSUPPORTED_OPTION;
1987 Rectangle originalInputRect(rect);
1988 rect = _CoordinateSystemUtils::InverseTransform(physicalRect);
1990 if (rect != originalInputRect)
1992 SysSecureLog(NID_UI_CTRL, "The rect as a input parameter is adjusted. original rect(%d, %d, %d, %d) is changed to (%d, %d, %d, %d)",
1993 originalInputRect.x, originalInputRect.y, originalInputRect.width, originalInputRect.height,
1994 rect.x, rect.y, rect.width, rect.height);
1998 SysLog(NID_UI_CTRL, "The current size of valid bounds that is evaluated is (%d, %d, %d, %d)", rect.x, rect.y, rect.width, rect.height);
2000 result r = GetLastResult();
2001 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
2007 _OverlayAgent::GetValueFromRegistry(const String& key)
2009 const wchar_t* _UI_REGISTRY_PATH = L"/usr/etc/system-info.ini";
2010 const wchar_t* _UI_INFO_SESSION = L"UiControlInfo";
2012 _RegistryImpl registry;
2013 result r = registry.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
2014 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
2016 String strValue(null);
2017 r = registry.GetValue(_UI_INFO_SESSION, key, strValue);
2018 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
2021 r = Integer::Parse(strValue, value);
2022 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, -1, r, "[%s] Propagating.", GetErrorMessage(r));
2028 _OverlayAgent::GetDstRectMinWidth(void)
2030 if (__dstRectMinWidth < 0)
2032 int value = GetValueFromRegistry(L"OverlayDstMinWidth");
2033 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2035 __dstRectMinWidth = value;
2038 SetLastResult(E_SUCCESS);
2040 return __dstRectMinWidth;
2044 _OverlayAgent::GetDstRectMinHeight(void)
2046 if (__dstRectMinHegith < 0)
2048 int value = GetValueFromRegistry(L"OverlayDstMinHeight");
2049 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2051 __dstRectMinHegith = value;
2054 SetLastResult(E_SUCCESS);
2056 return __dstRectMinHegith;
2060 _OverlayAgent::GetSrcRectMinWidth(void)
2062 if (__srcRectMinWidth < 0)
2064 int value = GetValueFromRegistry(L"OverlaySrcMinWidth");
2065 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2067 __srcRectMinWidth = value;
2070 SetLastResult(E_SUCCESS);
2072 return __srcRectMinWidth;
2076 _OverlayAgent::GetSrcRectMinHeight(void)
2078 if (__srcRectMinHegith < 0)
2080 int value = GetValueFromRegistry(L"OverlaySrcMinHeight");
2081 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2083 __srcRectMinHegith = value;
2086 SetLastResult(E_SUCCESS);
2088 return __srcRectMinHegith;
2092 _OverlayAgent::GetWidthUnit(void)
2094 if (__overlayWidthUnit < 0)
2096 int value = GetValueFromRegistry(L"OverlayRegionWidthUnit");
2097 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2099 __overlayWidthUnit = value;
2102 SetLastResult(E_SUCCESS);
2104 return __overlayWidthUnit;
2108 _OverlayAgent::GetHeightUnit(void)
2110 if (__overlayHeightUnit < 0)
2112 int value = GetValueFromRegistry(L"OverlayRegionHeightUnit");
2113 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2115 __overlayHeightUnit = value;
2118 SetLastResult(E_SUCCESS);
2120 return __overlayHeightUnit;
2124 _OverlayAgent::GetMaxCount(void)
2126 if (__overlayMaxCount < 0)
2128 int value = GetValueFromRegistry(L"MaxOverlayRegionCount");
2129 SysTryReturn(NID_UI_CTRL, value > 0, -1, E_SYSTEM, "[E_SYSTEM] Failed to get Overlay info from registry");
2131 __overlayMaxCount = value;
2134 SetLastResult(E_SUCCESS);
2136 return __overlayMaxCount;
2140 _OverlayAgent::SetEvasImageDirtyCallback(void)
2144 evas_object_image_pixels_get_callback_set(__pImageObject, OnEvasImageDamaged,(void*)this);
2149 _OverlayAgent::GetEvasImageDirtyFlag(void) const
2151 return __evasImageDamaged;
2155 _OverlayAgent::SetEvasImageDirtyFlag(bool dirty)
2157 __evasImageDamaged = dirty;
2161 _OverlayAgent::MoveChildToTop(const _Control& child)
2163 _EflNode* pEflNode = null;
2164 Evas_Object* pSmartObject = null;
2166 _VisualElement* pChildVE = child.GetVisualElement();
2167 SysTryReturn(NID_UI_CTRL, pChildVE != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] pChildVE is null.");
2169 pEflNode = dynamic_cast<_EflNode*>(pChildVE->GetNativeNode());
2170 SysTryReturn(NID_UI_CTRL, pEflNode != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pEflNode is null" );
2172 pSmartObject = (Evas_Object*)pEflNode->GetGroupContainer();
2173 SysTryReturn(NID_UI_CTRL, pSmartObject != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] pSmartObject is null" );
2175 evas_object_raise(pSmartObject);
2181 _OverlayAgent::GetPrevCbImageDimension(void) const
2183 return __orgCbImgDimension;
2187 _OverlayAgent::SetPrevCbImageDimension(const Dimension& imgDim)
2189 __orgCbImgDimension = imgDim;