kodi
DecoderFilterManager.h
1 /*
2  * Copyright (C) 2013-2019 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 
16 #include "threads/CriticalSection.h"
17 
18 #include <cinttypes>
19 #include <set>
20 #include <string>
21 
22 class CDVDStreamInfo;
23 
24 namespace tinyxml2
25 {
26 class XMLNode;
27 }
28 
36 {
37 public:
41  enum : uint32_t
42  {
43  FLAG_GENERAL_ALLOWED = 1,
44  FLAG_STILLS_ALLOWED = 2,
45  FLAG_DVD_ALLOWED = 4
46  };
47 
54  CDecoderFilter(const std::string& name) : m_name(name) {}
55 
64  CDecoderFilter(const std::string& name, uint32_t flags, int minHeight);
65 
66  virtual ~CDecoderFilter() = default;
67 
72  bool operator<(const CDecoderFilter& other) const { return m_name < other.m_name; }
73 
79  virtual bool isValid(const CDVDStreamInfo& streamInfo) const;
80 
87  virtual bool Load(const tinyxml2::XMLNode* node);
88 
95  virtual bool Save(tinyxml2::XMLNode* node) const;
96 
97 private:
98  std::string m_name;
99 
100  uint32_t m_flags = 0;
101  int m_minHeight = 0;
102 };
103 
104 
113 {
114 public:
115  CDecoderFilterManager() { Load(); }
116  virtual ~CDecoderFilterManager() { Save(); }
117 
124  void add(const CDecoderFilter& filter);
125 
126 
133  bool isValid(const std::string& name, const CDVDStreamInfo& streamInfo);
134 
135 protected:
136  bool Load();
137  bool Save() const;
138 
139 private:
140  bool m_dirty = false;
141  std::set<CDecoderFilter> m_filters;
142  mutable CCriticalSection m_critical;
143 };
Definition: DVDStreamInfo.h:25
Class which handles multiple CDecoderFilter elements.
Definition: DecoderFilterManager.h:112
bool operator<(const CDecoderFilter &other) const
used for sorting / replacing / find
Definition: DecoderFilterManager.h:72
Definition: SkinTimerManager.h:18
Declaration of CDecoderFilter.
Definition: DecoderFilterManager.h:35
CDecoderFilter(const std::string &name)
constructs a CDecoderFilter
Definition: DecoderFilterManager.h:54