[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / utils / GBMBufferObject.cpp
blob90c4017c3dca97f04ac806d15350d7921a91000b
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "GBMBufferObject.h"
11 #include "BufferObjectFactory.h"
12 #include "ServiceBroker.h"
13 #include "windowing/gbm/WinSystemGbmEGLContext.h"
15 #include <gbm.h>
16 #include <unistd.h>
18 using namespace KODI::WINDOWING::GBM;
20 std::unique_ptr<CBufferObject> CGBMBufferObject::Create()
22 return std::make_unique<CGBMBufferObject>();
25 void CGBMBufferObject::Register()
27 CBufferObjectFactory::RegisterBufferObject(CGBMBufferObject::Create);
30 CGBMBufferObject::CGBMBufferObject()
32 m_device =
33 static_cast<CWinSystemGbmEGLContext*>(CServiceBroker::GetWinSystem())->GetGBMDevice()->Get();
36 CGBMBufferObject::~CGBMBufferObject()
38 ReleaseMemory();
39 DestroyBufferObject();
42 bool CGBMBufferObject::CreateBufferObject(uint32_t format, uint32_t width, uint32_t height)
44 if (m_fd >= 0)
45 return true;
47 m_width = width;
48 m_height = height;
50 m_bo = gbm_bo_create(m_device, m_width, m_height, format, GBM_BO_USE_LINEAR);
52 if (!m_bo)
53 return false;
55 m_fd = gbm_bo_get_fd(m_bo);
57 return true;
60 void CGBMBufferObject::DestroyBufferObject()
62 close(m_fd);
64 if (m_bo)
65 gbm_bo_destroy(m_bo);
67 m_bo = nullptr;
68 m_fd = -1;
71 uint8_t* CGBMBufferObject::GetMemory()
73 if (m_bo)
75 m_map = static_cast<uint8_t*>(gbm_bo_map(m_bo, 0, 0, m_width, m_height, GBM_BO_TRANSFER_WRITE, &m_stride, &m_map_data));
76 if (m_map)
77 return m_map;
80 return nullptr;
83 void CGBMBufferObject::ReleaseMemory()
85 if (m_bo && m_map)
87 gbm_bo_unmap(m_bo, m_map_data);
88 m_map_data = nullptr;
89 m_map = nullptr;
93 uint64_t CGBMBufferObject::GetModifier()
95 #if defined(HAS_GBM_MODIFIERS)
96 return gbm_bo_get_modifier(m_bo);
97 #else
98 return 0;
99 #endif