xbmc
XbtFile.h
1 /*
2  * Copyright (C) 2015-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "IFile.h"
12 #include "URL.h"
13 #include "guilib/XBTF.h"
14 #include "guilib/XBTFReader.h"
15 
16 #include <cstdint>
17 #include <cstdio>
18 #include <vector>
19 
20 #include "PlatformDefs.h"
21 
22 namespace XFILE
23 {
24 class CXbtFile : public IFile
25 {
26 public:
27  CXbtFile();
28  ~CXbtFile() override;
29 
30  bool Open(const CURL& url) override;
31  void Close() override;
32  bool Exists(const CURL& url) override;
33 
34  int64_t GetPosition() override;
35  int64_t GetLength() override;
36 
37  int Stat(struct __stat64* buffer) override;
38  int Stat(const CURL& url, struct __stat64* buffer) override;
39 
40  ssize_t Read(void* lpBuf, size_t uiBufSize) override;
41  int64_t Seek(int64_t iFilePosition, int iWhence = SEEK_SET) override;
42 
43  uint32_t GetImageWidth() const;
44  uint32_t GetImageHeight() const;
45  uint32_t GetImageFormat() const;
46  bool HasImageAlpha() const;
47 
48 private:
49  bool GetFirstFrame(CXBTFFrame& frame) const;
50 
51  static bool GetReader(const CURL& url, CXBTFReaderPtr& reader);
52  static bool GetReaderAndFile(const CURL& url, CXBTFReaderPtr& reader, CXBTFFile& file);
53  static bool GetFile(const CURL& url, CXBTFFile& file);
54 
55  CURL m_url;
56  bool m_open = false;
57  CXBTFReaderPtr m_xbtfReader;
58  CXBTFFile m_xbtfFile;
59 
60  std::vector<uint64_t> m_frameStartPositions;
61  size_t m_frameIndex = 0;
62  uint64_t m_positionWithinFrame = 0;
63  int64_t m_positionTotal = 0;
64 
65  std::vector<std::vector<uint8_t>> m_unpackedFrames;
66 };
67 }
int Stat(struct __stat64 *buffer) override
Fills struct __stat64 with information about currently open file For st_mode function will set correc...
Definition: XbtFile.cpp:105
Definition: XBTF.h:23
Definition: Scraper.h:41
ssize_t Read(void *lpBuf, size_t uiBufSize) override
Attempt to read bufSize bytes from currently opened file into buffer bufPtr.
Definition: XbtFile.cpp:146
Definition: URL.h:20
Definition: XbtFile.h:24
Definition: IFile.h:42
Definition: XBTF.h:64