xbmc
BaseRenderBufferPool.h
1 /*
2  * Copyright (C) 2017-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 "IRenderBufferPool.h"
12 #include "threads/CriticalSection.h"
13 
14 #include <deque>
15 #include <memory>
16 #include <vector>
17 
18 namespace KODI
19 {
20 namespace RETRO
21 {
23 {
24 public:
25  CBaseRenderBufferPool() = default;
26  ~CBaseRenderBufferPool() override;
27 
28  // Partial implementation of IRenderBufferPool
29  void RegisterRenderer(CRPBaseRenderer* renderer) override;
30  void UnregisterRenderer(CRPBaseRenderer* renderer) override;
31  bool HasVisibleRenderer() const override;
32  bool Configure(AVPixelFormat format) override;
33  bool IsConfigured() const override { return m_bConfigured; }
34  IRenderBuffer* GetBuffer(unsigned int width, unsigned int height) override;
35  void Return(IRenderBuffer* buffer) override;
36  void Prime(unsigned int width, unsigned int height) override;
37  void Flush() override;
38 
39  // Buffer properties
40  AVPixelFormat Format() const { return m_format; }
41 
42 protected:
43  virtual IRenderBuffer* CreateRenderBuffer(void* header = nullptr) = 0;
44  virtual bool ConfigureInternal() { return true; }
45  virtual void* GetHeader(unsigned int timeoutMs = 0) { return nullptr; }
46  virtual bool GetHeaderWithTimeout(void*& header)
47  {
48  header = nullptr;
49  return true;
50  }
51  virtual bool SendBuffer(IRenderBuffer* buffer) { return false; }
52 
53  // Configuration parameters
54  bool m_bConfigured = false;
55  AVPixelFormat m_format = AV_PIX_FMT_NONE;
56 
57 private:
58  // Buffer properties
59  std::deque<std::unique_ptr<IRenderBuffer>> m_free;
60 
61  std::vector<CRPBaseRenderer*> m_renderers;
62  mutable CCriticalSection m_rendererMutex;
63  CCriticalSection m_bufferMutex;
64 };
65 } // namespace RETRO
66 } // namespace KODI
Definition: BaseRenderBufferPool.h:22
void Return(IRenderBuffer *buffer) override
Called by buffer when ref count goes to zero.
Definition: BaseRenderBufferPool.cpp:116
IRenderBuffer * GetBuffer(unsigned int width, unsigned int height) override
Get a free buffer from the pool, sets ref count to 1.
Definition: BaseRenderBufferPool.cpp:63
Definition: IRenderBuffer.h:27
Controller configuration window.
Definition: AudioDecoder.h:18
Definition: IRenderBufferPool.h:28
Definition: RPBaseRenderer.h:32