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 
32 class 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 { ST_Mem = 1, ST_Stream = 2 } m_nStorage {ST_Stream};
61  int m_nLooping {0}; // Infinity
62 };
63 
64 
65 class MHAudio : public MHPresentable
66 {
67  public:
68  MHAudio() = default;
69  const char *ClassName() override // MHRoot
70  { return "Audio"; }
71  void Initialise(MHParseNode *p, MHEngine *engine) override; // MHIngredient
72  void PrintMe(FILE *fd, int nTabs) const override; // MHIngredient
73 
74  void Activation(MHEngine *engine) override; // MHRoot
75  void Deactivation(MHEngine *engine) override; // MHRoot
76 
77  void BeginPlaying(MHEngine *engine) override; // MHPresentable
78  void StopPlaying(MHEngine *engine) override; // MHPresentable
79 
80  protected:
81  int m_nComponentTag {0};
82  int m_nOriginalVol {0};
83 
84  bool m_fStreamPlaying {false};
85 };
86 
87 class MHVideo : public MHVisible
88 {
89  public:
90  MHVideo() = default;
91  const char *ClassName() override // MHRoot
92  { return "Video"; }
93  void Initialise(MHParseNode *p, MHEngine *engine) override; // MHVisible
94  void PrintMe(FILE *fd, int nTabs) const override; // MHVisible
95 
96  void Preparation(MHEngine *engine) override; // MHVisible
97  void ContentPreparation(MHEngine *engine) override; // MHIngredient
98 
99  void Activation(MHEngine *engine) override; // MHVisible
100  void Deactivation(MHEngine *engine) override; // MHVisible
101 
102  void Display(MHEngine *engine) override; // MHVisible
103  QRegion GetVisibleArea() override; // MHVisible
104  QRegion GetOpaqueArea() override // MHVisible
105  { return GetVisibleArea(); } // Fully opaque.
106 
107  // Actions.
108  void ScaleVideo(int xScale, int yScale, MHEngine *engine) override; // MHRoot
109  void SetVideoDecodeOffset(int newXOffset, int newYOffset, MHEngine *engine) override; // MHRoot
110  void GetVideoDecodeOffset(MHRoot *pXOffset, MHRoot *pYOffset, MHEngine *engine) override; // MHRoot
111 
112  void BeginPlaying(MHEngine *engine) override; // MHPresentable
113  void StopPlaying(MHEngine *engine) override; // MHPresentable
114 
115  protected:
117  enum Termination { VI_Freeze = 1, VI_Disappear } m_termination {VI_Disappear};
118  // Added in UK MHEG
121  int m_nDecodeWidth {0};
123 
124  bool m_fStreamPlaying {false};
125 };
126 
127 // Real-time graphics - not needed for UK MHEG.
128 class MHRTGraphics : public MHVisible
129 {
130  public:
131  MHRTGraphics() = default;
132  const char *ClassName() override // MHRoot
133  { return "RTGraphics"; }
134  ~MHRTGraphics() override = default;
135  void Initialise(MHParseNode *p, MHEngine *engine) override; // MHVisible
136  void PrintMe(FILE *fd, int nTabs) const override; // MHVisible
137  void Display(MHEngine */*engine*/) override {} // MHVisible - Not supported
138 };
139 
140 
142  public:
143  MHScaleVideo(): MHActionIntInt(":ScaleVideo") {}
144  void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override // MHActionIntInt
145  { pTarget->ScaleVideo(nArg1, nArg2, engine); }
146 };
147 
148 // Actions added in the UK MHEG profile.
150 {
151  public:
152  MHSetVideoDecodeOffset(): MHActionIntInt(":SetVideoDecodeOffset") {}
153  void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override // MHActionIntInt
154  { pTarget->SetVideoDecodeOffset(nArg1, nArg2, engine); }
155 };
156 
158 {
159  public:
160  MHGetVideoDecodeOffset(): MHActionObjectRef2(":GetVideoDecodeOffset") {}
161  void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg1, MHRoot *pArg2) override // MHActionObjectRef2
162  { pTarget->GetVideoDecodeOffset(pArg1, pArg2, engine); }
163 };
164 
166 {
167 public:
168  explicit MHActionGenericObjectRefFix(const char *name) : MHActionGenericObjectRef(name) {}
169  void Perform(MHEngine *engine) override; // MHActionGenericObjectRef
170 };
171 
173 {
174 public:
176  void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override // MHActionGenericObjectRef
177  { pTarget->GetCounterPosition(pArg, engine); }
178 };
179 
181 {
182 public:
183  MHGetCounterMaxPosition(): MHActionGenericObjectRefFix(":GetCounterMaxPosition") {}
184  void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override // MHActionGenericObjectRef
185  { pTarget->GetCounterMaxPosition(pArg, engine); }
186 };
187 
189 {
190 public:
191  MHSetCounterPosition(): MHActionInt(":SetCounterPosition") {}
192  void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override // MHActionInt
193  { pTarget->SetCounterPosition(nArg, engine); }
194 };
195 
196 
198 {
200 public:
201  MHSetSpeed(): base(":SetSpeed") {}
202  void Initialise(MHParseNode *p, MHEngine *engine) override { // MHElemAction
203  //printf("SetSpeed Initialise args: "); p->PrintMe(stdout);
204  base::Initialise(p, engine);
205  MHParseNode *pn = p->GetArgN(1);
206  if (pn->m_nNodeType == MHParseNode::PNSeq) pn = pn->GetArgN(0);
207  m_argument.Initialise(pn, engine);
208  }
209  void Perform(MHEngine *engine) override { // MHElemAction
210  Target(engine)->SetSpeed(m_argument.GetValue(engine), engine);
211  }
212 protected:
213  void PrintArgs(FILE *fd, int /*nTabs*/) const override // MHElemAction
214  { m_argument.PrintMe(fd, 0); }
216 };
217 
218 
219 #endif
MHVideo::m_nDecodeHeight
int m_nDecodeHeight
Definition: Stream.h:122
MHStream::StopPlaying
void StopPlaying(MHEngine *engine) override
Definition: Stream.cpp:221
MHStream::m_nLooping
int m_nLooping
Definition: Stream.h:61
MHActionGenericObjectRef
Definition: BaseActions.h:146
MHParseNode::m_nNodeType
enum NodeType m_nNodeType
Definition: ParseNode.h:46
MHRTGraphics::ClassName
const char * ClassName() override
Definition: Stream.h:132
Presentable.h
MHRTGraphics::MHRTGraphics
MHRTGraphics()=default
MHStream::PrintMe
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:86
MHSetCounterPosition::CallAction
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) override
Definition: Stream.h:192
MHPresentable
Definition: Presentable.h:34
MHAudio::m_nComponentTag
int m_nComponentTag
Definition: Stream.h:81
MHVideo::VI_Freeze
@ VI_Freeze
Definition: Stream.h:117
MHActionGenericObjectRefFix
Definition: Stream.h:165
MHStream
Definition: Stream.h:32
MHSetCounterPosition::MHSetCounterPosition
MHSetCounterPosition()
Definition: Stream.h:191
MHVideo::StopPlaying
void StopPlaying(MHEngine *engine) override
Definition: Stream.cpp:501
MHSetVideoDecodeOffset::CallAction
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override
Definition: Stream.h:153
MHStream::ST_Mem
@ ST_Mem
Definition: Stream.h:60
MHVideo::Display
void Display(MHEngine *engine) override
Definition: Stream.cpp:399
MHEngine
Definition: Engine.h:72
MHAudio::Initialise
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:253
MHVideo::m_nDecodeWidth
int m_nDecodeWidth
Definition: Stream.h:121
MHVideo::VI_Disappear
enum MHVideo::Termination VI_Disappear
MHStream::Activation
void Activation(MHEngine *engine) override
Definition: Stream.cpp:149
MHScaleVideo
Definition: Stream.h:141
MHVideo::m_nComponentTag
int m_nComponentTag
Definition: Stream.h:116
MHAudio::Activation
void Activation(MHEngine *engine) override
Definition: Stream.cpp:290
MHGenericInteger::Initialise
void Initialise(MHParseNode *p, MHEngine *engine)
Definition: BaseClasses.cpp:397
MHGenericInteger
Definition: BaseClasses.h:213
MHVideo::Termination
Termination
Definition: Stream.h:117
MHRoot::SetSpeed
virtual void SetSpeed(int, MHEngine *)
Definition: Root.h:221
MHElemAction::Initialise
virtual void Initialise(MHParseNode *p, MHEngine *engine)
Definition: BaseActions.cpp:31
MHAudio::Deactivation
void Deactivation(MHEngine *engine) override
Definition: Stream.cpp:307
MHGetVideoDecodeOffset::CallAction
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg1, MHRoot *pArg2) override
Definition: Stream.h:161
MHStream::ClassName
const char * ClassName() override
Definition: Stream.h:36
Actions.h
MHVideo::GetOpaqueArea
QRegion GetOpaqueArea() override
Definition: Stream.h:104
MHStream::GetCounterMaxPosition
void GetCounterMaxPosition(MHRoot *pResult, MHEngine *engine) override
Definition: Stream.cpp:236
mythburn.FILE
int FILE
Definition: mythburn.py:139
MHGetCounterMaxPosition::MHGetCounterMaxPosition
MHGetCounterMaxPosition()
Definition: Stream.h:183
MHSetSpeed::m_argument
MHGenericInteger m_argument
Definition: Stream.h:215
MHVideo::m_fStreamPlaying
bool m_fStreamPlaying
Definition: Stream.h:124
MHVideo::Preparation
void Preparation(MHEngine *engine) override
Definition: Stream.cpp:379
MHSetSpeed::Initialise
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.h:202
MHAudio::StopPlaying
void StopPlaying(MHEngine *engine) override
Definition: Stream.cpp:332
MHGetCounterPosition::MHGetCounterPosition
MHGetCounterPosition()
Definition: Stream.h:175
MHGetCounterPosition
Definition: Stream.h:172
MHGetCounterPosition::CallAction
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override
Definition: Stream.h:176
MHSetSpeed::MHSetSpeed
MHSetSpeed()
Definition: Stream.h:201
MHVideo::GetVisibleArea
QRegion GetVisibleArea() override
Definition: Stream.cpp:452
hardwareprofile.config.p
p
Definition: config.py:33
MHVideo::Deactivation
void Deactivation(MHEngine *engine) override
Definition: Stream.cpp:479
MHSetSpeed
Definition: Stream.h:197
MHStream::Preparation
void Preparation(MHEngine *engine) override
Definition: Stream.cpp:118
MHGetVideoDecodeOffset::MHGetVideoDecodeOffset
MHGetVideoDecodeOffset()
Definition: Stream.h:160
MHVideo::ScaleVideo
void ScaleVideo(int xScale, int yScale, MHEngine *engine) override
Definition: Stream.cpp:420
MHStream::Destruction
void Destruction(MHEngine *engine) override
Definition: Stream.cpp:138
MHStream::Deactivation
void Deactivation(MHEngine *engine) override
Definition: Stream.cpp:165
MHVideo::BeginPlaying
void BeginPlaying(MHEngine *engine) override
Definition: Stream.cpp:494
MHScaleVideo::CallAction
void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2) override
Definition: Stream.h:144
MHSetVideoDecodeOffset::MHSetVideoDecodeOffset
MHSetVideoDecodeOffset()
Definition: Stream.h:152
MHParseNode::GetArgN
MHParseNode * GetArgN(int n)
Definition: ParseNode.cpp:78
MHStream::GetCounterPosition
void GetCounterPosition(MHRoot *pResult, MHEngine *engine) override
Definition: Stream.cpp:230
MHVideo::m_nYDecodeOffset
int m_nYDecodeOffset
Definition: Stream.h:120
MHStream::SetCounterPosition
void SetCounterPosition(int, MHEngine *engine) override
Definition: Stream.cpp:242
MHAudio::ClassName
const char * ClassName() override
Definition: Stream.h:69
MHAudio::MHAudio
MHAudio()=default
MHActionIntInt
Definition: BaseActions.h:65
MHRTGraphics::PrintMe
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:518
MHStream::ContentPreparation
void ContentPreparation(MHEngine *engine) override
Definition: Stream.cpp:178
MHActionGenericObjectRefFix::MHActionGenericObjectRefFix
MHActionGenericObjectRefFix(const char *name)
Definition: Stream.h:168
Ingredients.h
MHStream::ST_Stream
enum MHStream::Storage ST_Stream
MHAudio::BeginPlaying
void BeginPlaying(MHEngine *engine) override
Definition: Stream.cpp:325
MHActionInt
Definition: BaseActions.h:51
MHStream::FindByObjectNo
MHRoot * FindByObjectNo(int n) override
Definition: Stream.cpp:186
MHActionObjectRef2
Definition: BaseActions.h:133
MHElemAction::Target
MHRoot * Target(MHEngine *engine)
Definition: BaseActions.cpp:46
MHSetCounterPosition
Definition: Stream.h:188
MHParseNode::PNSeq
@ PNSeq
Definition: ParseNode.h:41
MHVideo::GetVideoDecodeOffset
void GetVideoDecodeOffset(MHRoot *pXOffset, MHRoot *pYOffset, MHEngine *engine) override
Definition: Stream.cpp:445
Root.h
MHVideo
Definition: Stream.h:87
MHStream::Initialise
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:33
MHStream::SetSpeed
void SetSpeed(int speed, MHEngine *engine) override
Definition: Stream.cpp:248
MHStream::BeginPlaying
void BeginPlaying(MHEngine *engine) override
Definition: Stream.cpp:206
MHGetVideoDecodeOffset
Definition: Stream.h:157
MHVisible
Definition: Visible.h:35
MHVideo::Activation
void Activation(MHEngine *engine) override
Definition: Stream.cpp:467
MHRTGraphics::~MHRTGraphics
~MHRTGraphics() override=default
MHSetSpeed::Perform
void Perform(MHEngine *engine) override
Definition: Stream.h:209
MHRTGraphics::Display
void Display(MHEngine *) override
Definition: Stream.h:137
BaseClasses.h
MHVideo::ContentPreparation
void ContentPreparation(MHEngine *engine) override
Definition: Stream.cpp:392
MHVideo::SetVideoDecodeOffset
void SetVideoDecodeOffset(int newXOffset, int newYOffset, MHEngine *engine) override
Definition: Stream.cpp:435
MHParseNode
Definition: ParseNode.h:38
MHVideo::ClassName
const char * ClassName() override
Definition: Stream.h:91
MHGenericInteger::GetValue
int GetValue(MHEngine *engine) const
Definition: BaseClasses.cpp:426
MHVideo::PrintMe
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:361
MHScaleVideo::MHScaleVideo
MHScaleVideo()
Definition: Stream.h:143
MHGenericInteger::PrintMe
void PrintMe(FILE *fd, int nTabs) const
Definition: BaseClasses.cpp:412
MHStream::m_multiplex
MHOwnPtrSequence< MHPresentable > m_multiplex
Definition: Stream.h:59
MHStream::MHStream
MHStream()=default
MHRTGraphics
Definition: Stream.h:128
MHActionGenericObjectRefFix::Perform
void Perform(MHEngine *engine) override
Definition: Stream.cpp:525
MHElemAction
Definition: BaseActions.h:34
MHRTGraphics::Initialise
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:512
MHSetVideoDecodeOffset
Definition: Stream.h:149
MHAudio::PrintMe
void PrintMe(FILE *fd, int nTabs) const override
Definition: Stream.cpp:271
MHAudio::m_nOriginalVol
int m_nOriginalVol
Definition: Stream.h:82
Storage
Definition: mythstorage.h:23
MHVideo::m_nXDecodeOffset
int m_nXDecodeOffset
Definition: Stream.h:119
MHGetCounterMaxPosition
Definition: Stream.h:180
MHSetSpeed::PrintArgs
void PrintArgs(FILE *fd, int) const override
Definition: Stream.h:213
MHGetCounterMaxPosition::CallAction
void CallAction(MHEngine *engine, MHRoot *pTarget, MHRoot *pArg) override
Definition: Stream.h:184
MHOwnPtrSequence< MHPresentable >
MHVideo::MHVideo
MHVideo()=default
MHElemAction::MHElemAction
MHElemAction(const char *name)
Definition: BaseActions.h:37
MHAudio::m_fStreamPlaying
bool m_fStreamPlaying
Definition: Stream.h:84
MHAudio
Definition: Stream.h:65
MHVideo::Initialise
void Initialise(MHParseNode *p, MHEngine *engine) override
Definition: Stream.cpp:343
MHRoot
Definition: Root.h:43