Lumiera
0.pre.03
»edit your freedom«
streamtype.hpp
Go to the documentation of this file.
1
/*
2
STREAMTYPE.hpp - classification of media stream types
3
4
Copyright (C) Lumiera.org
5
2008, Hermann Vosseler <Ichthyostega@web.de>
6
7
This program is free software; you can redistribute it and/or
8
modify it under the terms of the GNU General Public License as
9
published by the Free Software Foundation; either version 2 of
10
the License, or (at your option) any later version.
11
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
16
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
21
*/
22
34
#ifndef STEAM_STREAMTYPE_H
35
#define STEAM_STREAMTYPE_H
36
37
#include "
lib/symbol.hpp
"
38
//#include "common/query.hpp"
39
#include "
lib/idi/entry-id.hpp
"
40
41
42
43
namespace
steam
{
44
45
using
lib::Symbol
;
46
47
// "yes mummy, we all know this code is not finished yet..."
48
#pragma GCC diagnostic push
49
#pragma GCC diagnostic ignored "-Wuninitialized"
50
54
struct
StreamType
55
:
util::NonCopyable
56
{
57
enum
MediaKind
58
{
59
VIDEO,
60
IMMAGE,
61
AUDIO,
62
MIDI
63
};
64
65
enum
Usage
66
{
67
RAW,
68
SOURCE,
69
TARGET,
70
INTERMEDIARY
71
};
72
73
struct
Prototype
;
74
75
class
ImplFacade
;
76
class
ImplConstraint
;
77
78
using
ID
=
lib::idi::EntryID<StreamType>
;
79
80
81
Prototype
const
& prototype;
82
ImplFacade
* implType;
83
Usage intentionTag;
84
85
};
86
#pragma GCC diagnostic pop
87
88
92
struct
StreamType::Prototype
93
{
94
Symbol
id;
95
MediaKind
kind
;
96
97
bool
subsumes (
Prototype
const
& other)
const
;
98
bool
canRender (
Prototype
const
& other)
const
;
99
};
100
101
102
103
108
class
StreamType::ImplFacade
109
{
110
public
:
111
Symbol
libraryID;
112
113
class
TypeTag
;
114
121
struct
DataBuffer
{ };
122
123
124
virtual
bool
operator== (
ImplFacade
const
& other)
const
=0;
125
virtual
bool
operator== (
StreamType
const
& other)
const
=0;
126
127
virtual
bool
canConvert (
ImplFacade
const
& other)
const
=0;
128
virtual
bool
canConvert (
StreamType
const
& other)
const
=0;
129
130
virtual
DataBuffer
* createFrame ()
const
=0;
131
virtual
MediaKind getKind()
const
=0;
132
133
virtual
~
ImplFacade
() {};
134
135
protected
:
136
ImplFacade
(
Symbol
libID) ;
137
};
138
139
146
class
StreamType::ImplConstraint
147
:
public
StreamType::ImplFacade
148
{
149
public
:
150
virtual
bool
canConvert (
ImplFacade
const
& other)
const
=0;
151
virtual
bool
canConvert (
StreamType
const
& other)
const
=0;
152
153
virtual
bool
subsumes (
ImplFacade
const
& other)
const
=0;
154
156
virtual
void
makeCompliant (
ImplFacade
& other)
const
=0;
157
160
virtual
DataBuffer
* createFrame ()
const
=0;
161
165
virtual
DataBuffer
* createFrame (
ImplConstraint
const
& furtherConstraints)
const
=0;
166
167
//TODO: do we need functions to represent and describe this constraint?
168
169
};
170
171
178
class
StreamType::ImplFacade::TypeTag
179
{
180
void
* rawTypeStruct_;
181
182
public
:
183
Symbol
libraryID;
184
185
template
<
class
TY>
186
TypeTag
(
Symbol
lID, TY& rawType)
187
: rawTypeStruct_(&rawType),
188
libraryID(lID)
189
{ }
190
};
191
192
193
194
195
}
// namespace steam
196
197
198
namespace
lumiera
{
199
using
steam::StreamType
;
200
}
201
202
#endif
/*STEAM_STREAMTYPE_H*/
steam::StreamType::ImplFacade::TypeTag
opaque placeholder (type erasure) for implementation specific type info.
Definition:
streamtype.hpp:178
util::NonCopyable
Any copy and copy construction prohibited.
Definition:
nocopy.hpp:46
lib::idi::EntryID< StreamType >
steam
Steam-Layer implementation namespace root.
Definition:
dummy-player-facade.h:46
steam::StreamType
Definition:
streamtype.hpp:54
steam::StreamType::ImplFacade
A (more or less) concrete implementation type, wired up as a facade providing the basic set of operat...
Definition:
streamtype.hpp:108
lib::Symbol
Token or Atom with distinct identity.
Definition:
symbol.hpp:126
symbol.hpp
Marker types to indicate a literal string and a Symbol.
stage::widget::kind
ElementBoxWidget::Config::Qualifier kind(Kind kind)
qualify the basic use case for the new ElementBoxWidget
Definition:
element-box-widget.hpp:232
lumiera
Lumiera public interface.
Definition:
advice.cpp:113
steam::StreamType::ImplConstraint
Special case of an implementation type being only partially specified Besides requiring some aspect o...
Definition:
streamtype.hpp:146
entry-id.hpp
Bare symbolic and hash ID used for accounting of asset like entries.
steam::StreamType::ImplFacade::DataBuffer
placeholder type for the contents of a data buffer.
Definition:
streamtype.hpp:121
steam::StreamType::Prototype
Definition:
streamtype.hpp:92
steam
streamtype.hpp
Generated on Sat Apr 20 2024 02:03:41 for Lumiera by
1.8.13