MythTV master
Stream.h
Go to the documentation of this file.
1/* Stream.h
2
3 Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk
4
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
18 Or, point your browser to http://www.gnu.org/copyleft/gpl.html
19
20*/
21
22#if !defined(STREAM_H)
23#define STREAM_H
24
25#include "Presentable.h"
26// Dependencies
27#include "Ingredients.h"
28#include "Root.h"
29#include "BaseClasses.h"
30#include "Actions.h"
31
32class MHStream : public MHPresentable
33{
34 public:
35 MHStream() = default;
36 const char *ClassName() override // MHRoot
37 { return "Stream"; }
38 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHIngredient
39 void PrintMe(FILE *fd, int nTabs) const override; // MHIngredient
40
41 void Preparation(MHEngine *engine) override; // MHIngredient
42 void Activation(MHEngine *engine) override; // MHRoot
43 void Deactivation(MHEngine *engine) override; // MHRoot
44 void Destruction(MHEngine *engine) override; // MHIngredient
45 void ContentPreparation(MHEngine *engine) override; // MHIngredient
46
47 MHRoot *FindByObjectNo(int n) override; // MHRoot
48
49 void BeginPlaying(MHEngine *engine) override; // MHPresentable
50 void StopPlaying(MHEngine *engine) override; // MHPresentable
51
52 // Actions
53 void GetCounterPosition(MHRoot *pResult, MHEngine *engine) override; // MHRoot
54 void GetCounterMaxPosition(MHRoot *pResult, MHEngine *engine) override; // MHRoot
55 void SetCounterPosition(int /*pos*/, MHEngine *engine) override; // MHRoot
56 void SetSpeed(int speed, MHEngine *engine) override; // MHRoot
57
58 protected:
60 enum Storage : std::uint8_t
61 { ST_Mem = 1, ST_Stream = 2 } m_nStorage {ST_Stream};
62 int m_nLooping {0}; // Infinity
63};
64
65
66class MHAudio : public MHPresentable
67{
68 public:
69 MHAudio() = default;
70 const char *ClassName() override // MHRoot
71 { return "Audio"; }
72 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHIngredient
73 void PrintMe(FILE *fd, int nTabs) const override; // MHIngredient
74
75 void Activation(MHEngine *engine) override; // MHRoot
76 void Deactivation(MHEngine *engine) override; // MHRoot
77
78 void BeginPlaying(MHEngine *engine) override; // MHPresentable
79 void StopPlaying(MHEngine *engine) override; // MHPresentable
80
81 protected:
84
85 bool m_fStreamPlaying {false};
86};
87
88class MHVideo : public MHVisible
89{
90 public:
91 MHVideo() = default;
92 const char *ClassName() override // MHRoot
93 { return "Video"; }
94 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHVisible
95 void PrintMe(FILE *fd, int nTabs) const override; // MHVisible
96
97 void Preparation(MHEngine *engine) override; // MHVisible
98 void ContentPreparation(MHEngine *engine) override; // MHIngredient
99
100 void Activation(MHEngine *engine) override; // MHVisible
101 void Deactivation(MHEngine *engine) override; // MHVisible
102
103 void Display(MHEngine *engine) override; // MHVisible
104 QRegion GetVisibleArea() override; // MHVisible
105 QRegion GetOpaqueArea() override // MHVisible
106 { return GetVisibleArea(); } // Fully opaque.
107
108 // Actions.
109 void ScaleVideo(int xScale, int yScale, MHEngine *engine) override; // MHRoot
110 void SetVideoDecodeOffset(int newXOffset, int newYOffset, MHEngine *engine) override; // MHRoot
111 void GetVideoDecodeOffset(MHRoot *pXOffset, MHRoot *pYOffset, MHEngine *engine) override; // MHRoot
112
113 void BeginPlaying(MHEngine *engine) override; // MHPresentable
114 void StopPlaying(MHEngine *engine) override; // MHPresentable
115
116 protected:
118 enum Termination : std::uint8_t
119 { VI_Freeze = 1, VI_Disappear } m_termination {VI_Disappear};
120 // Added in UK MHEG
125
126 bool m_fStreamPlaying {false};
127};
128
129// Real-time graphics - not needed for UK MHEG.
130class MHRTGraphics : public MHVisible
131{
132 public:
133 MHRTGraphics() = default;
134 const char *ClassName() override // MHRoot
135 { return "RTGraphics"; }
136 ~MHRTGraphics() override = default;
137 void Initialise(MHParseNode *p, MHEngine *engine) override; // MHVisible
138 void PrintMe(FILE *fd, int nTabs) const override; // MHVisible
139 void Display(MHEngine */*engine*/) override {} // MHVisible - Not supported
140};
141
142
144 public:
145 MHScaleVideo(): MHActionIntInt(":ScaleVideo") {}
146 void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override // MHActionIntInt
147 { pTarget->ScaleVideo(nArg1, nArg2, engine); }
148};
149
150// Actions added in the UK MHEG profile.
152{
153 public:
154 MHSetVideoDecodeOffset(): MHActionIntInt(":SetVideoDecodeOffset") {}
155 void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override // MHActionIntInt
156 { pTarget->SetVideoDecodeOffset(nArg1, nArg2, engine); }
157};
158
160{
161 public:
162 MHGetVideoDecodeOffset(): MHActionObjectRef2(":GetVideoDecodeOffset") {}
163 void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg1, MHRoot *pArg2) override // MHActionObjectRef2
164 { pTarget->GetVideoDecodeOffset(pArg1, pArg2, engine); }
165};
166
168{
169public:
170 explicit MHActionGenericObjectRefFix(const char *name) : MHActionGenericObjectRef(name) {}
171 void Perform(MHEngine *engine) override; // MHActionGenericObjectRef
172};
173
175{
176public:
178 void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override // MHActionGenericObjectRef
179 { pTarget->GetCounterPosition(pArg, engine); }
180};
181
183{
184public:
186 void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override // MHActionGenericObjectRef
187 { pTarget->GetCounterMaxPosition(pArg, engine); }
188};
189
191{
192public:
193 MHSetCounterPosition(): MHActionInt(":SetCounterPosition") {}
194 void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override // MHActionInt
195 { pTarget->SetCounterPosition(nArg, engine); }
196};
197
198
200{
202public:
203 MHSetSpeed(): base(":SetSpeed") {}
204 void Initialise(MHParseNode *p, MHEngine *engine) override { // MHElemAction
205 //printf("SetSpeed Initialise args: "); p->PrintMe(stdout);
206 base::Initialise(p, engine);
207 MHParseNode *pn = p->GetArgN(1);
208 if (pn->m_nNodeType == MHParseNode::PNSeq) pn = pn->GetArgN(0);
209 m_argument.Initialise(pn, engine);
210 }
211 void Perform(MHEngine *engine) override { // MHElemAction
212 Target(engine)->SetSpeed(m_argument.GetValue(engine), engine);
213 }
214protected:
215 void PrintArgs(FILE *fd, int /*nTabs*/) const override // MHElemAction
216 { m_argument.PrintMe(fd, 0); }
218};
219
220
221#endif
void Perform(MHEngine *engine) override
Definition: Stream.cpp:525
MHActionGenericObjectRefFix(const char *name)
Definition: Stream.h:170
Definition: Stream.h:67
int m_nOriginalVol
Definition: Stream.h:83
void BeginPlaying(MHEngine *engine) override
Definition: Stream.cpp:325
void Deactivation(MHEngine *engine) override
Definition: Stream.cpp:307
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:253
bool m_fStreamPlaying
Definition: Stream.h:85
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:271
MHAudio()=default
int m_nComponentTag
Definition: Stream.h:82
void StopPlaying(MHEngine *engine) override
Definition: Stream.cpp:332
const char * ClassName() override
Definition: Stream.h:70
void Activation(MHEngine *engine) override
Definition: Stream.cpp:290
MHRoot * Target(MHEngine *engine)
Definition: BaseActions.cpp:46
virtual void Initialise(MHParseNode *p, MHEngine *engine)
Definition: BaseActions.cpp:31
MHElemAction(const char *name)
Definition: BaseActions.h:37
void Initialise(MHParseNode *p, MHEngine *engine)
int GetValue(MHEngine *engine) const
void PrintMe(FILE *fd, int nTabs) const
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override
Definition: Stream.h:186
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override
Definition: Stream.h:178
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg1, MHRoot *pArg2) override
Definition: Stream.h:163
MHParseNode * GetArgN(int n)
Definition: ParseNode.cpp:78
enum NodeType m_nNodeType
Definition: ParseNode.h:46
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:512
MHRTGraphics()=default
const char * ClassName() override
Definition: Stream.h:134
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:518
void Display(MHEngine *) override
Definition: Stream.h:139
~MHRTGraphics() override=default
Definition: Root.h:45
virtual void SetSpeed(int, MHEngine *)
Definition: Root.h:222
MHScaleVideo()
Definition: Stream.h:145
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override
Definition: Stream.h:146
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override
Definition: Stream.h:194
void PrintArgs(FILE *fd, int) const override
Definition: Stream.h:215
MHGenericInteger m_argument
Definition: Stream.h:217
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.h:204
void Perform(MHEngine *engine) override
Definition: Stream.h:211
MHSetSpeed()
Definition: Stream.h:203
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override
Definition: Stream.h:155
void ContentPreparation(MHEngine *engine) override
Definition: Stream.cpp:178
void SetCounterPosition(int, MHEngine *engine) override
Definition: Stream.cpp:242
Storage
Definition: Stream.h:61
@ ST_Mem
Definition: Stream.h:61
const char * ClassName() override
Definition: Stream.h:36
void SetSpeed(int speed, MHEngine *engine) override
Definition: Stream.cpp:248
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:86
MHOwnPtrSequence< MHPresentable > m_multiplex
Definition: Stream.h:59
int m_nLooping
Definition: Stream.h:62
void Activation(MHEngine *engine) override
Definition: Stream.cpp:149
void GetCounterMaxPosition(MHRoot *pResult, MHEngine *engine) override
Definition: Stream.cpp:236
void Deactivation(MHEngine *engine) override
Definition: Stream.cpp:165
MHRoot * FindByObjectNo(int n) override
Definition: Stream.cpp:186
MHStream()=default
void Preparation(MHEngine *engine) override
Definition: Stream.cpp:118
enum MHStream::Storage ST_Stream
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:33
void Destruction(MHEngine *engine) override
Definition: Stream.cpp:138
void GetCounterPosition(MHRoot *pResult, MHEngine *engine) override
Definition: Stream.cpp:230
void StopPlaying(MHEngine *engine) override
Definition: Stream.cpp:221
void BeginPlaying(MHEngine *engine) override
Definition: Stream.cpp:206
Definition: Stream.h:89
enum MHVideo::Termination VI_Disappear
Termination
Definition: Stream.h:119
@ VI_Freeze
Definition: Stream.h:119
bool m_fStreamPlaying
Definition: Stream.h:126
void BeginPlaying(MHEngine *engine) override
Definition: Stream.cpp:494
const char * ClassName() override
Definition: Stream.h:92
void Deactivation(MHEngine *engine) override
Definition: Stream.cpp:479
int m_nDecodeHeight
Definition: Stream.h:124
void Display(MHEngine *engine) override
Definition: Stream.cpp:399
void Preparation(MHEngine *engine) override
Definition: Stream.cpp:379
MHVideo()=default
int m_nYDecodeOffset
Definition: Stream.h:122
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:343
int m_nXDecodeOffset
Definition: Stream.h:121
void StopPlaying(MHEngine *engine) override
Definition: Stream.cpp:501
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:361
int m_nComponentTag
Definition: Stream.h:117
QRegion GetVisibleArea() override
Definition: Stream.cpp:452
void Activation(MHEngine *engine) override
Definition: Stream.cpp:467
void SetVideoDecodeOffset(int newXOffset, int newYOffset, MHEngine *engine) override
Definition: Stream.cpp:435
int m_nDecodeWidth
Definition: Stream.h:123
void ScaleVideo(int xScale, int yScale, MHEngine *engine) override
Definition: Stream.cpp:420
QRegion GetOpaqueArea() override
Definition: Stream.h:105
void ContentPreparation(MHEngine *engine) override
Definition: Stream.cpp:392
void GetVideoDecodeOffset(MHRoot *pXOffset, MHRoot *pYOffset, MHEngine *engine) override
Definition: Stream.cpp:445
int FILE
Definition: mythburn.py:138