xbmc
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 TiXmlNode;
23 class CDVDStreamInfo;
24 
32 {
33 public:
37  enum : uint32_t
38  {
42  };
43 
50  CDecoderFilter(const std::string& name) : m_name(name) {}
51 
60  CDecoderFilter(const std::string& name, uint32_t flags, int minHeight);
61 
62  virtual ~CDecoderFilter() = default;
63 
68  bool operator<(const CDecoderFilter& other) const { return m_name < other.m_name; }
69 
75  virtual bool isValid(const CDVDStreamInfo& streamInfo) const;
76 
83  virtual bool Load(const TiXmlNode *node);
84 
91  virtual bool Save(TiXmlNode *node) const;
92 
93 
94 private:
95  std::string m_name;
96 
97  uint32_t m_flags = 0;
98  int m_minHeight = 0;
99 };
100 
101 
110 {
111 public:
112  CDecoderFilterManager() { Load(); }
113  virtual ~CDecoderFilterManager() { Save(); }
114 
121  void add(const CDecoderFilter& filter);
122 
123 
130  bool isValid(const std::string& name, const CDVDStreamInfo& streamInfo);
131 
132 protected:
133  bool Load();
134  bool Save() const;
135 
136 private:
137  bool m_dirty = false;
138  std::set<CDecoderFilter> m_filters;
139  mutable CCriticalSection m_critical;
140 };
Definition: DVDStreamInfo.h:23
Class which handles multiple CDecoderFilter elements.
Definition: DecoderFilterManager.h:109
early false exit if set and stream is marked as "has stillframes"
Definition: DecoderFilterManager.h:40
early false exit if set and stream is marked as dvd
Definition: DecoderFilterManager.h:41
virtual bool isValid(const CDVDStreamInfo &streamInfo) const
test if stream is allowed by filter.
Definition: DecoderFilterManager.cpp:43
bool operator<(const CDecoderFilter &other) const
used for sorting / replacing / find
Definition: DecoderFilterManager.h:68
virtual bool Save(TiXmlNode *node) const
store all members in XML node
Definition: DecoderFilterManager.cpp:87
early false exit if set
Definition: DecoderFilterManager.h:39
Declaration of CDecoderFilter.
Definition: DecoderFilterManager.h:31
virtual bool Load(const TiXmlNode *node)
load all members from XML node
Definition: DecoderFilterManager.cpp:63
CDecoderFilter(const std::string &name)
constructs a CDecoderFilter
Definition: DecoderFilterManager.h:50