2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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_OverlayRegionImpl.cpp
20 * @brief This is the implementation file for _OverlayRegionImpl class.
26 #include <libxml/parser.h>
27 #include <libxml/tree.h>
29 #include <Elementary.h>
31 #include <FSysSystemInfo.h>
33 #include <FBaseInteger.h>
34 #include <FBaseSysLog.h>
36 #include <FGrp_BufferInfoImpl.h>
37 #include <FSys_EnvironmentImpl.h>
38 #include <FIo_RegistryImpl.h>
40 #include "FUi_CoordinateSystemUtils.h"
41 #include "FUiCtrl_FormImpl.h"
42 #include "FUiCtrl_OverlayRegionImpl.h"
43 #include "FUiCtrl_OverlayAgent.h"
45 using namespace Tizen::Base;
46 using namespace Tizen::Ui;
47 using namespace Tizen::Ui::Controls;
48 using namespace Tizen::Media;
49 using namespace Tizen::Graphics;
50 using namespace Tizen::Io;
51 using namespace Tizen::System;
55 const int _ROTATION_COUNT = 4;
57 const wchar_t* _UI_REGISTRY_PATH = L"/usr/etc/system-info.ini";
58 const wchar_t* _UI_INFO_SESSION = L"UiControlInfo";
60 const char* _MEDIA_CAPABILITY_FILE_PATH = "/usr/etc/media-capability.xml";
61 const char* _CAM_PRIMARY_DIRECTION = "Camera.Primary.Direction";
62 const char* _CAM_PRIMARY_ROTATION = "Camera.Primary.Rotation";
63 const char* _CAM_SECONDARY_DIRECTION = "Camera.Secondary.Direction";
64 const char* _CAM_SECONDARY_ROTATION = "Camera.Secondary.Rotation";
66 class _OverlayRegionMediaCapability
69 _OverlayRegionMediaCapability(void);
71 virtual ~_OverlayRegionMediaCapability(void);
73 result Construct(void);
74 result ParseCapability(const char* xmlBuffer, int length);
75 void ParseSection(xmlNodePtr pRoot, const Tizen::Base::String& section);
77 int cameraPrimaryDirection;
78 int cameraPrimaryRotation;
79 int cameraSecondaryDirection;
80 int cameraSecondaryRotation;
81 }; //_OverlayRegionMediaCapability
84 namespace Tizen { namespace Ui { namespace Controls
87 int _OverlayRegionImpl::overlayRegionWidthUnit = -1;
88 int _OverlayRegionImpl::overlayRegionHeightUnit = -1;
89 int _OverlayRegionImpl::overlayRegionMaxCount = -1;
90 bool _OverlayRegionImpl::overlayRegionPixelFomatList[]= {false,};
93 _IsValidSrcDim(const Tizen::Graphics::Dimension& srcDim, int multipleValueW, int multipleValueH)
97 if (srcDim.width < 0 || srcDim.height < 0)
99 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Source dimension has negative value [w : %4d, h : %4d].",
100 srcDim.width, srcDim.height);
104 if (srcDim.width % multipleValueW || srcDim.height % multipleValueH)
106 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] srcDim[%4d, %4d] should be multiple of [%4d, %4d].",
107 srcDim.width, srcDim.height, multipleValueW, multipleValueH);
111 SysLog(NID_UI_CTRL, "srcDim w:%d h:%d, UnitW[%d], UnitH[%d]", srcDim.width, srcDim.height, multipleValueW, multipleValueH);
117 _ConvertCamToOverlayRegionRotation(OverlayRegionType type, int camDir, int camRot, int formOrientation)
119 OverlayRegionRotate rotation = OVERLAYREGION_ROTATE_NONE;
127 case 1://CAMERA_DIRECTION_FRONT:
130 case 2://CAMERA_DIRECTION_BACK:
134 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] cameraRot [%d] is invalid", camRot);
140 case 1://CAMERA_ROTATION_NONE:
143 case 2://CAMERA_ROTATION_90:
146 case 3://CAMERA_ROTATION_180:
149 case 4://CAMERA_ROTATION_270:
153 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] cameraRot [%d] is invalid", camRot);
157 switch (static_cast<OrientationStatus>(formOrientation))
159 case ORIENTATION_STATUS_PORTRAIT:
162 case ORIENTATION_STATUS_LANDSCAPE:
165 case ORIENTATION_STATUS_PORTRAIT_REVERSE:
168 case ORIENTATION_STATUS_LANDSCAPE_REVERSE:
172 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] formOrientation [%d] is invalid", formOrientation);
176 if (type == OVERLAY_REGION_TYPE_NORMAL)
178 rotation = OVERLAYREGION_ROTATE_0;
180 else if(type == OVERLAY_REGION_TYPE_PRIMARY_CAMERA)
182 rotation = static_cast<OverlayRegionRotate>((_ROTATION_COUNT - (tempFormRot - tempCamRot)) % _ROTATION_COUNT);
184 else if(type == OVERLAY_REGION_TYPE_SECONDARY_CAMERA)
186 rotation = static_cast<OverlayRegionRotate>((tempFormRot + tempCamRot) % _ROTATION_COUNT);
189 SysLog(NID_UI_CTRL, "type : %d, rotation:%d, cameraDir : %d, camRot:%d, formOrientation:%d", type, rotation, tempCamDir, tempCamRot, tempFormRot);
194 _OverlayRegionImpl::_OverlayRegionImpl(void)
195 : __pParentForm(null)
196 , __pOverlayRegion(null)
197 , __destRect(0, 0, 0, 0)
198 , __overlayRegionType(OVERLAY_REGION_TYPE_MIN)
201 , __cameraDirection(2/*CAMERA_DIRECTION_BACK*/)
202 , __cameraRotation(1/*CAMERA_ROTATION_NONE*/)
203 , __pOverlayAgent(null)
208 _OverlayRegionImpl::~_OverlayRegionImpl(void)
214 __pParentForm->__ppOverlayerRegionImplArray[__myIdx] = null;
217 __pParentForm->__overlayRegionCount--;
220 SysLog(NID_UI_CTRL, "destructor : __myIdx [%d], parentForm : [%x]", __myIdx, __pParentForm);
224 delete __pOverlayAgent;
228 Tizen::Graphics::Rectangle
229 _OverlayRegionImpl::GetBounds(void) const
235 _OverlayRegionImpl::GetBounds(int& x, int& y, int& width, int& height) const
239 width = __destRect.width;
240 height = __destRect.height;
246 _OverlayRegionImpl::SetInputBuffer(const Tizen::Base::ByteBuffer& srcBuffer, const Tizen::Graphics::Dimension& srcDim, OverlayRegionBufferPixelFormat srcFormat, bool isUserInput)
248 result r = _IsValidSrcDim(srcDim, OverlayRegion::GetWidthUnit(), OverlayRegion::GetHeightUnit());
249 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
251 if (!_OverlayRegionImpl::overlayRegionPixelFomatList[0])
253 result r = _OverlayRegionImpl::SetPixelFormatList();
254 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
257 _OverlayAgentBufferPixelFormat format = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888;
261 case OVERLAY_REGION_BUFFER_PIXEL_FORMAT_ARGB8888:
262 format = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_ARGB8888;
264 case OVERLAY_REGION_BUFFER_PIXEL_FORMAT_RGB565:
265 format = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_RGB565;
267 case OVERLAY_REGION_BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR:
268 format = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR;
270 case OVERLAY_REGION_BUFFER_PIXEL_FORMAT_NV12:
271 format = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_NV12;
273 case OVERLAY_REGION_BUFFER_PIXEL_FORMAT_UYVY:
274 format = _OVERLAY_AGENT_BUFFER_PIXEL_FORMAT_UYVY;
277 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] srcFormat [%d] is not supported!", srcFormat);
278 return E_UNSUPPORTED_FORMAT;
281 if (!_OverlayRegionImpl::overlayRegionPixelFomatList[srcFormat])
283 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] srcFormat [%d] is not supported!", srcFormat);
284 return E_UNSUPPORTED_FORMAT;
287 int size = srcBuffer.GetCapacity();
288 SysTryReturnResult(NID_UI_CTRL, size > 0, E_INVALID_ARG, "[E_INVALID_ARG] source size[%d] is invalid!", size);
290 r = __pOverlayAgent->SetInputBuffer(Dimension(__destRect.width, __destRect.height), srcBuffer, srcDim, format);
291 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
293 SysTryReturnResult(NID_UI_CTRL, __showState, E_SYSTEM, "[E_SYSTEM]__showState is false! don't draw now..");
295 r = __pOverlayAgent->Draw();
296 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
302 _OverlayRegionImpl::GetBackgroundBufferInfo(Tizen::Graphics::BufferInfo& info) const
304 BufferInfo bgBufInfo;
305 _BufferInfoImpl* pBufInfoImpl = null;
307 SysTryReturnResult(NID_UI_CTRL, __pOverlayAgent != null, E_INVALID_STATE, "[E_INVALID_STATE] __pOverlayAgent is null.");
308 __pOverlayAgent->GetBufferInfo(info);
310 pBufInfoImpl = _BufferInfoImpl::GetInstance(info);
311 SysTryReturnResult(NID_UI_CTRL, pBufInfoImpl != null , E_SYSTEM, "[E_SYSTEM] pBufInfoImpl is null.");
313 Tizen::Ui::Controls::_FormImpl* pFormImpl = static_cast<_FormImpl*>(__pParentForm->GetUserData());
314 SysTryReturn(NID_UI_CTRL, pFormImpl != null, false, E_SYSTEM, "[E_SYSTEM] pParentForm impl is null.");
316 Tizen::Ui::OrientationStatus formOrientationStatus = pFormImpl->GetOrientationStatus();
317 switch (formOrientationStatus)
319 case ORIENTATION_STATUS_NONE:
321 case ORIENTATION_STATUS_PORTRAIT:
322 pBufInfoImpl->SetOrientation(_BufferInfoImpl::ORIENTATION_PORTRAIT);
324 case ORIENTATION_STATUS_LANDSCAPE :
325 pBufInfoImpl->SetOrientation(_BufferInfoImpl::ORIENTATION_LANDSCAPE);
327 case ORIENTATION_STATUS_PORTRAIT_REVERSE:
328 pBufInfoImpl->SetOrientation(_BufferInfoImpl::ORIENTATION_PORTRAIT_REVERSE);
330 case ORIENTATION_STATUS_LANDSCAPE_REVERSE:
331 pBufInfoImpl->SetOrientation(_BufferInfoImpl::ORIENTATION_LANDSCAPE_REVERSE);
335 switch (__cameraRotation)
337 case 1://CAMERA_ROTATION_NONE
338 pBufInfoImpl->SetRotation(_BufferInfoImpl::ROTATION_0);
340 case 2://CAMERA_ROTATION_90:
341 pBufInfoImpl->SetRotation(_BufferInfoImpl::ROTATION_90);
343 case 3://CAMERA_ROTATION_180:
344 pBufInfoImpl->SetRotation(_BufferInfoImpl::ROTATION_180);
346 case 4://CAMERA_ROTATION_270:
347 pBufInfoImpl->SetRotation(_BufferInfoImpl::ROTATION_270);
355 _OverlayRegionImpl::Show(void) const
357 SysTryReturnResult(NID_UI_CTRL, __pOverlayAgent != null, E_SYSTEM, "[E_SYSTEM] __pOverlayAgent is null.");
358 return __pOverlayAgent->Show();
362 _OverlayRegionImpl::Construct(_Form* pParentForm, OverlayRegionType overlayRegionType, const Point& leftTopPos, const Rectangle& userDestRect, const Rectangle& finalPhyRect)
364 result r = E_SUCCESS;
367 switch (overlayRegionType)
369 case OVERLAY_REGION_TYPE_PRIMARY_CAMERA:
371 _OverlayRegionMediaCapability capability;
372 r = capability.Construct();
373 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
375 __cameraDirection = capability.cameraPrimaryDirection;
376 __cameraRotation = capability.cameraPrimaryRotation;
380 case OVERLAY_REGION_TYPE_SECONDARY_CAMERA:
382 _OverlayRegionMediaCapability capability;
383 r = capability.Construct();
384 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
386 __cameraDirection = capability.cameraSecondaryDirection;
387 __cameraRotation = capability.cameraSecondaryRotation;
391 case OVERLAY_REGION_TYPE_NORMAL:
394 SysLogException(NID_UI_CTRL, E_UNSUPPORTED_FORMAT, "[E_UNSUPPORTED_FORMAT] overlayRegionType [%d] is not supported!", overlayRegionType);
395 return E_UNSUPPORTED_FORMAT;
398 SysTryReturnResult(NID_UI_CTRL, pParentForm != null, E_SYSTEM, "[E_SYSTEM] pParentForm impl is null.");
400 Tizen::Ui::Controls::_FormImpl* pFormImpl = static_cast<_FormImpl*>(pParentForm->GetUserData());
401 SysTryReturnResult(NID_UI_CTRL, pFormImpl != null, E_SYSTEM, "[E_SYSTEM] pFormImpl impl is null.");
403 OverlayRegionRotate rotation = _ConvertCamToOverlayRegionRotation(overlayRegionType, __cameraDirection, __cameraRotation, pFormImpl->GetOrientationStatus());
404 SysTryReturnResult(NID_UI_CTRL, rotation != OVERLAYREGION_ROTATE_NONE, E_SYSTEM, "[E_SYSTEM] __rotation is OVERLAYREGION_ROTATE_NONE.");
406 //Rectangle overlayRect(leftTopPos.x, leftTopPos.y, destRect.width, destRect.height);
407 //SysLog(NID_UI_CTRL,"overlayAgentRect[%d, %d, %d, %d]", overlayRect.x, overlayRect.y, overlayRect.width, overlayRect.height);
409 _OverlayAgentStyle overlayAgentType = _OVERLAY_AGENT_STYLE_REGION_SW;
410 String preferredEngineConfig(elm_config_preferred_engine_get());
411 if(preferredEngineConfig.Equals("opengl_x11", true))
413 overlayAgentType = _OVERLAY_AGENT_STYLE_REGION_GL;
414 SysLog(NID_UI_CTRL,"xml : HwAcceleration was set to On");
416 else if(preferredEngineConfig.Equals("software_x11", true))
418 overlayAgentType = _OVERLAY_AGENT_STYLE_REGION_SW;
419 SysLog(NID_UI_CTRL,"xml : HwAcceleration was set to Off");
423 String engineConfig(elm_config_engine_get());
424 if(engineConfig.Equals("opengl_x11", true))
426 overlayAgentType = _OVERLAY_AGENT_STYLE_REGION_GL;
427 SysLog(NID_UI_CTRL,"dev setting option : gl backend");
431 SysLog(NID_UI_CTRL,"dev setting option : sw backend");
435 __pOverlayAgent = _OverlayAgent::CreateInstanceN(overlayAgentType, *pParentForm, finalPhyRect);
437 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS && __pOverlayAgent != null, r, r, "[%s] pPropagating.", GetErrorMessage(r));
439 __pParentForm = pParentForm;
440 __overlayRegionType = overlayRegionType;
441 __destRect = userDestRect;
443 if(overlayAgentType == _OVERLAY_AGENT_STYLE_REGION_GL)
445 r = __pOverlayAgent->CreatePixmap();
446 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
450 SysLog(NID_UI_CTRL,"not need to make a pixmap");
455 case OVERLAYREGION_ROTATE_0:
456 __pOverlayAgent->SetRotation(_OVERLAY_AGENT_ROTATION_NONE);
458 case OVERLAYREGION_ROTATE_90:
459 __pOverlayAgent->SetRotation(_OVERLAY_AGENT_ROTATION_90);
461 case OVERLAYREGION_ROTATE_180:
462 __pOverlayAgent->SetRotation(_OVERLAY_AGENT_ROTATION_180);
464 case OVERLAYREGION_ROTATE_270:
465 __pOverlayAgent->SetRotation(_OVERLAY_AGENT_ROTATION_270);
468 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] rotate value[%d] is invalid.", rotation);
472 if (overlayAgentType == _OVERLAY_AGENT_STYLE_REGION_SW)
475 int size = finalPhyRect.width * finalPhyRect.height * 4;
476 pBuf = new (std::nothrow) byte[size];
477 SysTryCatch(NID_UI_CTRL, pBuf != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pBuf is null.");
479 unsigned long* pPos = (unsigned long*)pBuf;
480 for(i=0;i<finalPhyRect.height;i++)
482 for(j=0;j<finalPhyRect.width;j++)
490 r = buffer.Construct(size);
491 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
493 buffer.SetArray(pBuf, 0, size);
494 r = SetInputBuffer(buffer, Dimension(finalPhyRect.width, finalPhyRect.height), OVERLAY_REGION_BUFFER_PIXEL_FORMAT_ARGB8888, true);
495 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
499 SysLog(NID_UI_CTRL,"initializes the origin image object buf");
506 delete __pOverlayAgent;
507 __pOverlayAgent = null;
508 return GetLastResult();
512 _OverlayRegionImpl::CreateOverlayRegionN(void)
514 OverlayRegion* pOverlayRegion = null;
515 pOverlayRegion = new (std::nothrow) OverlayRegion();
516 SysTryReturn(NID_UI_CTRL, pOverlayRegion != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pOverlayRegion is null.");
518 __pOverlayRegion = pOverlayRegion;
519 __pOverlayRegion->__pOverlayRegionImpl = this;
521 return pOverlayRegion;
525 _OverlayRegionImpl::SetFormArrayIndex(int index)
532 _OverlayRegionImpl::GetOverlayRegion(void) const
534 return __pOverlayRegion;
538 _OverlayRegionImpl::GoForeground(void)
542 SysTryReturnVoidResult(NID_UI_CTRL, __pOverlayAgent != null, E_SYSTEM, "[E_SYSTEM] __pOverlayAgent impl is null.");
543 SysLog(NID_UI_CTRL, "GoForeground pixmap : %d", __pOverlayAgent->GetPixmap());
544 //__pOverlayAgent->AdjustImageObject();
550 _OverlayRegionImpl::GoBackground(void)
554 SysTryReturnVoidResult(NID_UI_CTRL, __pOverlayAgent != null, E_SYSTEM, "[E_SYSTEM] __pOverlayAgent impl is null.");
555 __pOverlayAgent->UngrabXvPort();
557 SysLog(NID_UI_CTRL, "GoBackground pixmap : %d", __pOverlayAgent->GetPixmap());
563 _OverlayRegionImpl::IsValidOverlayRect(Tizen::Graphics::Rectangle& userRect, Tizen::Graphics::Rectangle& overlayPhysicalRect, const Tizen::Graphics::Rectangle& basePhysicalRect, bool& modified)
565 result r = E_SUCCESS;
567 if ((overlayPhysicalRect.width < _OverlayAgent::GetDstRectMinWidth()) || (overlayPhysicalRect.height < _OverlayAgent::GetDstRectMinHeight()))
569 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] size of OverlayRegoin is invalid [w : %4d, h : %4d].",
570 overlayPhysicalRect.width, overlayPhysicalRect.height);
571 return E_INVALID_ARG;
574 int base = overlayRegionWidthUnit / 2;
577 int modW = overlayPhysicalRect.width % overlayRegionWidthUnit;
582 overlayPhysicalRect.width -= modW;
586 overlayPhysicalRect.width += (overlayRegionWidthUnit - modW);
592 base = overlayRegionHeightUnit / 2;
595 int modH = overlayPhysicalRect.height % overlayRegionHeightUnit;
600 overlayPhysicalRect.height -= modH;
604 overlayPhysicalRect.height += (overlayRegionHeightUnit - modH);
610 Rectangle rect = _CoordinateSystemUtils::InverseTransform(overlayPhysicalRect);
611 if (rect.width != userRect.width || rect.height != userRect.height )
613 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] __InvR(overlayPhysicalRect [%d, %d, %d, %d]) (w : %4d, h : %4d) org (w : %4d, h : %4d) is not same",
614 overlayPhysicalRect.x, overlayPhysicalRect.y, overlayPhysicalRect.width, overlayPhysicalRect.height, rect.width, rect.height, userRect.width, userRect.height);
615 return E_INVALID_ARG;
618 // First, overlayPhysicalRect's x, y position should be positive value or zero.
619 if (!((overlayPhysicalRect.x >= 0) && (overlayPhysicalRect.y >= 0) &&
620 // Second, Check if it is clipping or not. (OverlayRegion cannot be clipped)
621 (overlayPhysicalRect.x + overlayPhysicalRect.width <= basePhysicalRect.x + basePhysicalRect.width) &&
622 (overlayPhysicalRect.y + overlayPhysicalRect.height <= basePhysicalRect.y + basePhysicalRect.height)))
624 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] The bounds of OverlayRegion is now outside of the current form "
625 "overlayPhysicalRect (x : %4d, y: %4d, w : %4d, h : %4d), "
626 "basePhysicalRect (x : %4d, y: %4d, w : %4d, h : %4d).",
627 overlayPhysicalRect.x, overlayPhysicalRect.y, overlayPhysicalRect.width, overlayPhysicalRect.height,
628 basePhysicalRect.x, basePhysicalRect.y, basePhysicalRect.width, basePhysicalRect.height);
632 // SysLog(NID_UI_CTRL, " overlayPhysicalRect [%d, %d, %d, %d], basePhysicalRect [%d, %d, %d, %d] modified[%d]",
633 // overlayPhysicalRect.x, overlayPhysicalRect.y, overlayPhysicalRect.width, overlayPhysicalRect.height,
634 // basePhysicalRect.x, basePhysicalRect.y, basePhysicalRect.width, basePhysicalRect.height, modified );
640 _OverlayRegionImpl::SetPixelFormatList(void)
645 result r = E_SUCCESS;
648 r = _reg.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
651 if (r == E_OUT_OF_MEMORY)
653 SysTryReturn(NID_UI_CTRL, r != E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
657 SysAssertf(0, "failed to Construct the _RegistryImpl");
661 r = _reg.GetValue(_UI_INFO_SESSION, L"OverlayRegionBufferPixelFormat", formatList);
662 SysAssertf(!IsFailed(r), "Failed to get a registry value");
664 SysLog(NID_UI_CTRL,"FormatList: %ls", formatList.GetPointer());
666 String formatList(L"ARGB8888/RGB565/YCbCr420P");
670 if (formatList.Contains(L"ARGB8888"))
672 overlayRegionPixelFomatList[OVERLAY_REGION_BUFFER_PIXEL_FORMAT_ARGB8888] = true;
676 if (formatList.Contains(L"RGB565"))
678 overlayRegionPixelFomatList[OVERLAY_REGION_BUFFER_PIXEL_FORMAT_RGB565] = true;
682 if (formatList.Contains(L"YCbCr420P"))
684 overlayRegionPixelFomatList[OVERLAY_REGION_BUFFER_PIXEL_FORMAT_YCbCr420_PLANAR] = true;
688 if (formatList.Contains(L"NV12"))
690 overlayRegionPixelFomatList[OVERLAY_REGION_BUFFER_PIXEL_FORMAT_NV12] = true;
694 if (formatList.Contains(L"UYVY"))
696 overlayRegionPixelFomatList[OVERLAY_REGION_BUFFER_PIXEL_FORMAT_UYVY] = true;
700 SysAssertf(set, "registry file is something wrong");
702 overlayRegionPixelFomatList[0] = set;
708 _OverlayRegionImpl::GetWidthUnit(void)
712 if (_OverlayRegionImpl::overlayRegionWidthUnit == -1)
714 result r = E_SUCCESS;
719 r = _reg.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
720 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] RegistryImpl construct Failed");
722 r = _reg.GetValue(_UI_INFO_SESSION, L"OverlayRegionWidthUnit", value);
723 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] Registry GetValue Failed");
725 r = Integer::Parse(value, val);
726 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] Parse Failed");
728 _OverlayRegionImpl::overlayRegionWidthUnit = val;
730 SysLog(NID_UI_CTRL, "overlayRegionWidthUnit : %d", _OverlayRegionImpl::overlayRegionWidthUnit);
733 SetLastResult(E_SUCCESS);
735 return _OverlayRegionImpl::overlayRegionWidthUnit;
739 _OverlayRegionImpl::GetHeightUnit(void)
743 if (_OverlayRegionImpl::overlayRegionHeightUnit == -1)
745 result r = E_SUCCESS;
750 r = _reg.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
751 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] RegistryImpl construct Failed");
753 r = _reg.GetValue(_UI_INFO_SESSION, L"OverlayRegionHeightUnit", value);
754 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] Registry GetValue Failed");
756 r = Integer::Parse(value, val);
757 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] Parse Failed");
759 _OverlayRegionImpl::overlayRegionHeightUnit = val;
761 SysLog(NID_UI_CTRL, "overlayRegionHeightUnit : %d", _OverlayRegionImpl::overlayRegionHeightUnit);
764 SetLastResult(E_SUCCESS);
766 return _OverlayRegionImpl::overlayRegionHeightUnit;
770 _OverlayRegionImpl::GetMaxCount(void)
774 if (_OverlayRegionImpl::overlayRegionMaxCount == -1)
776 result r = E_SUCCESS;
781 r = _reg.Construct(_UI_REGISTRY_PATH, REG_OPEN_READ_ONLY, null);
782 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] RegistryImpl construct Failed");
784 r = _reg.GetValue(_UI_INFO_SESSION, L"MaxOverlayRegionCount", value);
785 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] Registry GetValue Failed");
787 r = Integer::Parse(value, val);
788 SysTryReturn(NID_UI_CTRL, !IsFailed(r), -1, E_SYSTEM, "[E_SYSTEM] Parse Failed");
790 _OverlayRegionImpl::overlayRegionMaxCount = val;
792 SysLog(NID_UI_CTRL, "overlayRegionMaxCount : %d", _OverlayRegionImpl::overlayRegionMaxCount);
795 SetLastResult(E_SUCCESS);
797 return _OverlayRegionImpl::overlayRegionMaxCount;
801 _OverlayRegionImpl::GetInstance(OverlayRegion& overlayRegion)
803 return (&overlayRegion != null) ? overlayRegion.__pOverlayRegionImpl : null;
806 const _OverlayRegionImpl*
807 _OverlayRegionImpl::GetInstance(const OverlayRegion& overlayRegion)
809 return (&overlayRegion != null) ? overlayRegion.__pOverlayRegionImpl : null;
812 } } } // Tizen::Ui::Controls
815 //////////////////////////////////////////////////////////////////////////////////////
819 _OverlayRegionMediaCapability::_OverlayRegionMediaCapability(void)
820 : cameraPrimaryDirection(0)
821 , cameraPrimaryRotation(0)
822 , cameraSecondaryDirection(0)
823 , cameraSecondaryRotation(0)
827 _OverlayRegionMediaCapability::~_OverlayRegionMediaCapability(void)
832 _OverlayRegionMediaCapability::Construct(void)
834 result r = E_SUCCESS;
835 long long length = 0;
837 char* pXmlBuffer = null;
838 Tizen::Base::String key;
839 Tizen::Base::String fileName;
840 FileAttributes attributes;
843 fileName = _MEDIA_CAPABILITY_FILE_PATH;
844 SysLog(NID_UI_CTRL, "Capability XML path:%ls", fileName.GetPointer());
846 r = File::GetAttributes(fileName, attributes);
847 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r) );
849 length = attributes.GetFileSize();
850 SysTryReturnResult(NID_UI_CTRL, length > 0, E_SYSTEM, "[E_SYSTEM] the file[%s] size is zero.", fileName.GetPointer());
852 pXmlBuffer = new (std::nothrow) char[length];
853 SysTryReturnResult(NID_UI_CTRL, pXmlBuffer != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pXmlBuffer is null");
855 r = fileObj.Construct(fileName, L"r");
856 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
858 // read the capability xml file content as parse the capability
859 readLen = fileObj.Read(pXmlBuffer, length);
860 SysTryCatch(NID_UI_CTRL, readLen == length, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] length:%d, readLen:%d", length, readLen);
862 // parse the capability file buffer all the parse key value pair shall be added in __pMap object
863 r = ParseCapability(pXmlBuffer, readLen);
864 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
883 _OverlayRegionMediaCapability::ParseSection(xmlNodePtr pRoot, const String& section)
885 xmlNode* pNode = null;
887 for (pNode = pRoot->children; pNode; pNode = pNode->next)
889 String name((char*)pNode->name);
894 if (pNode->type == XML_ELEMENT_NODE && pNode->children)
896 if (key.Equals(String(_CAM_PRIMARY_DIRECTION)))
898 //SysLog(NID_UI_CTRL,"@@@@@ key:%ls, %s", key.GetPointer(), (wchar_t*)pNode->children->content);
899 String direction((char*)pNode->children->content);
900 if (direction.Equals(String("Back")))
901 cameraPrimaryDirection = 2;//CAMERA_DIRECTION_BACK;
903 cameraPrimaryDirection = 1;//CAMERA_DIRECTION_FRONT;
905 else if (key.Equals(String(_CAM_PRIMARY_ROTATION)))
907 //SysLog(NID_UI_CTRL,"@@@@@ key:%ls, %s", key.GetPointer(), (wchar_t*)pNode->children->content );
908 String rot((char*)pNode->children->content);
910 Integer::Decode(rot, ret);
911 cameraPrimaryRotation = (ret / 90) + 1;
913 else if (key.Equals(String(_CAM_SECONDARY_DIRECTION)))
915 //SysLog(NID_UI_CTRL,"@@@@@ key:%ls, %s", key.GetPointer(), (wchar_t*)pNode->children->content );
916 String direction((char*)pNode->children->content);
917 if (direction.Equals(String("Back")))
918 cameraSecondaryDirection = 2;//CAMERA_DIRECTION_BACK;
920 cameraSecondaryDirection = 1;//CAMERA_DIRECTION_FRONT;
922 else if (key.Equals(String(_CAM_SECONDARY_ROTATION)))
924 //SysLog(NID_UI_CTRL,"@@@@@ key:%ls, %s", key.GetPointer(), (wchar_t*)pNode->children->content );
925 String rot((char*)pNode->children->content);
927 Integer::Decode(rot, ret);
928 cameraSecondaryRotation = (ret / 90) + 1;
932 ParseSection(pNode, key);
937 _OverlayRegionMediaCapability::ParseCapability(const char* xmlBuffer, int length)
940 xmlNode* pRoot = null;
941 xmlNode* pNode = null;
943 result r = E_SUCCESS;
946 pDoc = xmlParseMemory(xmlBuffer, length);
947 SysTryReturnResult(NID_UI_CTRL, pDoc != null, E_SYSTEM, "[E_SYSTEM] xmlParseMemory failed %s %d", xmlBuffer, length);
949 pRoot = xmlDocGetRootElement(pDoc);
950 SysTryCatch(NID_UI_CTRL, pRoot != null, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] xmlDocGetRootElement failed");
952 name = (const char*) (pRoot->name);
953 SysTryCatch(NID_UI_CTRL, name.Equals("MediaCapability", true), r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Invalid Root Name %ls", name.GetPointer());
955 for (pNode = pRoot->children; pNode; pNode = pNode->next)
957 if (pNode->type == XML_ELEMENT_NODE)
959 String nodeName((char*)pNode->name);
960 ParseSection(pNode, nodeName);