[Windows] Fix driver version detection of AMD RDNA+ GPU on Windows 10
[xbmc.git] / xbmc / guilib / XBTF.cpp
blobfb89c97889be6606d9582c280663d8db70a734dd
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 "XBTF.h"
11 #include <cstring>
12 #include <utility>
14 CXBTFFrame::CXBTFFrame()
16 m_width = 0;
17 m_height = 0;
18 m_packedSize = 0;
19 m_unpackedSize = 0;
20 m_offset = 0;
21 m_format = XB_FMT_UNKNOWN;
22 m_duration = 0;
25 uint32_t CXBTFFrame::GetWidth() const
27 return m_width;
30 void CXBTFFrame::SetWidth(uint32_t width)
32 m_width = width;
35 uint32_t CXBTFFrame::GetHeight() const
37 return m_height;
40 void CXBTFFrame::SetHeight(uint32_t height)
42 m_height = height;
45 uint64_t CXBTFFrame::GetPackedSize() const
47 return m_packedSize;
50 void CXBTFFrame::SetPackedSize(uint64_t size)
52 m_packedSize = size;
55 bool CXBTFFrame::IsPacked() const
57 return m_unpackedSize != m_packedSize;
60 bool CXBTFFrame::HasAlpha() const
62 return (m_format & XB_FMT_OPAQUE) == 0;
65 uint64_t CXBTFFrame::GetUnpackedSize() const
67 return m_unpackedSize;
70 void CXBTFFrame::SetUnpackedSize(uint64_t size)
72 m_unpackedSize = size;
75 void CXBTFFrame::SetFormat(XB_FMT format)
77 m_format = format;
80 XB_FMT CXBTFFrame::GetFormat(bool raw) const
82 return raw ? m_format : static_cast<XB_FMT>(m_format & XB_FMT_MASK);
85 uint64_t CXBTFFrame::GetOffset() const
87 return m_offset;
90 void CXBTFFrame::SetOffset(uint64_t offset)
92 m_offset = offset;
95 uint32_t CXBTFFrame::GetDuration() const
97 return m_duration;
100 void CXBTFFrame::SetDuration(uint32_t duration)
102 m_duration = duration;
105 uint64_t CXBTFFrame::GetHeaderSize() const
107 uint64_t result =
108 sizeof(m_width) +
109 sizeof(m_height) +
110 sizeof(m_format) +
111 sizeof(m_packedSize) +
112 sizeof(m_unpackedSize) +
113 sizeof(m_offset) +
114 sizeof(m_duration);
116 return result;
119 CXBTFFile::CXBTFFile()
120 : m_path(),
121 m_frames()
124 const std::string& CXBTFFile::GetPath() const
126 return m_path;
129 void CXBTFFile::SetPath(const std::string& path)
131 m_path = path;
134 uint32_t CXBTFFile::GetLoop() const
136 return m_loop;
139 void CXBTFFile::SetLoop(uint32_t loop)
141 m_loop = loop;
144 const std::vector<CXBTFFrame>& CXBTFFile::GetFrames() const
146 return m_frames;
149 std::vector<CXBTFFrame>& CXBTFFile::GetFrames()
151 return m_frames;
154 uint64_t CXBTFFile::GetPackedSize() const
156 uint64_t size = 0;
157 for (const auto& frame : m_frames)
158 size += frame.GetPackedSize();
160 return size;
163 uint64_t CXBTFFile::GetUnpackedSize() const
165 uint64_t size = 0;
166 for (const auto& frame : m_frames)
167 size += frame.GetUnpackedSize();
169 return size;
172 uint64_t CXBTFFile::GetHeaderSize() const
174 uint64_t result =
175 MaximumPathLength +
176 sizeof(m_loop) +
177 sizeof(uint32_t); /* Number of frames */
179 for (const auto& frame : m_frames)
180 result += frame.GetHeaderSize();
182 return result;
185 uint64_t CXBTFBase::GetHeaderSize() const
187 uint64_t result = XBTF_MAGIC.size() + XBTF_VERSION.size() +
188 sizeof(uint32_t) /* number of files */;
190 for (const auto& file : m_files)
191 result += file.second.GetHeaderSize();
193 return result;
196 bool CXBTFBase::Exists(const std::string& name) const
198 CXBTFFile dummy;
199 return Get(name, dummy);
202 bool CXBTFBase::Get(const std::string& name, CXBTFFile& file) const
204 const auto& iter = m_files.find(name);
205 if (iter == m_files.end())
206 return false;
208 file = iter->second;
209 return true;
212 std::vector<CXBTFFile> CXBTFBase::GetFiles() const
214 std::vector<CXBTFFile> files;
215 files.reserve(m_files.size());
217 for (const auto& file : m_files)
218 files.push_back(file.second);
220 return files;
223 void CXBTFBase::AddFile(const CXBTFFile& file)
225 m_files.insert(std::make_pair(file.GetPath(), file));
228 void CXBTFBase::UpdateFile(const CXBTFFile& file)
230 auto&& it = m_files.find(file.GetPath());
231 if (it == m_files.end())
232 return;
234 it->second = file;