xbmc
DVDOverlay.h
1 /*
2  * Copyright (C) 2006-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 <assert.h>
12 #include <atomic>
13 #include <memory>
14 #include <stdexcept>
15 #include <vector>
16 
17 enum DVDOverlayType
18 {
19  DVDOVERLAY_TYPE_NONE = -1,
20  DVDOVERLAY_TYPE_SPU = 1,
21  DVDOVERLAY_TYPE_TEXT = 2,
22  DVDOVERLAY_TYPE_IMAGE = 3,
23  DVDOVERLAY_TYPE_SSA = 4,
24  DVDOVERLAY_TYPE_GROUP = 5,
25 };
26 
27 class CDVDOverlay : public std::enable_shared_from_this<CDVDOverlay>
28 {
29 public:
30  explicit CDVDOverlay(DVDOverlayType type)
31  {
32  m_type = type;
33 
34  iPTSStartTime = 0LL;
35  iPTSStopTime = 0LL;
36  bForced = false;
37  replace = false;
38  m_textureid = 0;
39  m_enableTextAlign = false;
40  m_overlayContainerFlushable = true;
41  m_setForcedMargins = false;
42  }
43 
44  CDVDOverlay(const CDVDOverlay& src) : std::enable_shared_from_this<CDVDOverlay>(src)
45  {
46  m_type = src.m_type;
47  iPTSStartTime = src.iPTSStartTime;
48  iPTSStopTime = src.iPTSStopTime;
49  bForced = src.bForced;
50  replace = src.replace;
51  m_textureid = 0;
52  m_enableTextAlign = src.m_enableTextAlign;
53  m_overlayContainerFlushable = src.m_overlayContainerFlushable;
54  m_setForcedMargins = src.m_setForcedMargins;
55  }
56 
57  virtual ~CDVDOverlay() = default;
58 
59  bool IsOverlayType(DVDOverlayType type) const { return (m_type == type); }
60 
65  virtual std::shared_ptr<CDVDOverlay> Clone() { return shared_from_this(); }
66 
67  /*
68  * \brief Enable the use of text alignment (left/center/right).
69  */
70  virtual void SetTextAlignEnabled(bool enable)
71  {
72  throw std::logic_error("EnableTextAlign method not implemented.");
73  }
74 
75  /*
76  * \brief Return true if the text alignment (left/center/right) is enabled otherwise false.
77  */
78  bool IsTextAlignEnabled() const { return m_enableTextAlign; }
79 
80  /*
81  * \brief Allow/Disallow the overlay container to flush the overlay.
82  */
83  void SetOverlayContainerFlushable(bool isFlushable) { m_overlayContainerFlushable = isFlushable; }
84 
85  /*
86  * \brief Return true when the overlay container can flush the overlay on flush events.
87  */
88  bool IsOverlayContainerFlushable() const { return m_overlayContainerFlushable; }
89 
90  /*
91  * \brief Specify if the margins are handled by the subtitle codec/parser.
92  */
93  void SetForcedMargins(bool setForcedMargins) { m_setForcedMargins = setForcedMargins; }
94 
95  /*
96  * \brief Return true if the margins are handled by the subtitle codec/parser.
97  */
98  bool IsForcedMargins() const { return m_setForcedMargins; }
99 
100  double iPTSStartTime;
101  double iPTSStopTime;
102  bool bForced; // display, no matter what
103  bool replace; // replace by next nomatter what stoptime it has
104  unsigned long m_textureid;
105 
106 protected:
107  DVDOverlayType m_type;
108  bool m_enableTextAlign;
109  bool m_overlayContainerFlushable;
110  bool m_setForcedMargins;
111 };
112 
113 using VecOverlays = std::vector<std::shared_ptr<CDVDOverlay>>;
114 
116 {
117 public:
118  ~CDVDOverlayGroup() override = default;
119 
121  : CDVDOverlay(DVDOVERLAY_TYPE_GROUP)
122  {
123  }
124 
125  CDVDOverlayGroup(const CDVDOverlayGroup& src) : CDVDOverlay(src) { m_overlays = src.m_overlays; }
126  VecOverlays m_overlays;
127 };
Definition: DVDOverlay.h:115
virtual std::shared_ptr< CDVDOverlay > Clone()
return a copy to VideoPlayerSubtitle in order to have hw resources cleared after rendering ...
Definition: DVDOverlay.h:65
Definition: DVDOverlay.h:27