Stefan Schuermans commited on 2011-12-04 20:46:14
Showing 35 changed files, with 871 additions and 670 deletions.
... | ... |
@@ -14,8 +14,9 @@ |
14 | 14 |
#include "Directory.h" |
15 | 15 |
#include "File.h" |
16 | 16 |
#include "Format.h" |
17 |
+#include "FormatFile.h" |
|
17 | 18 |
#include "Module.h" |
18 |
-#include "SettingFile.h" |
|
19 |
+#include "OutStreamFile.h" |
|
19 | 20 |
#include "StreamMgr.h" |
20 | 21 |
#include "StreamRecv.h" |
21 | 22 |
|
... | ... |
@@ -31,22 +32,19 @@ Canvas::Canvas(CallMgr &callMgr, StreamMgr &streamMgr, const Directory &dirBase) |
31 | 32 |
Module(callMgr, streamMgr, dirBase), |
32 | 33 |
m_fileFormat(dirBase.getFile("format")), |
33 | 34 |
m_dirInputs(dirBase.getSubdir("inputs")), |
34 |
- m_fileOutStream(dirBase.getFile("outstream")), |
|
35 |
+ m_fileOutStream(dirBase.getFile("outstream"), streamMgr), |
|
35 | 36 |
m_pCanvas(NULL), |
36 |
- m_canvasHasFrame(false), |
|
37 |
- m_pOutStream(NULL) |
|
37 |
+ m_canvasHasFrame(false) |
|
38 | 38 |
{ |
39 | 39 |
// set up |
40 | 40 |
createCanvas(); |
41 | 41 |
updateInListFull(); |
42 |
- getOutStream(); |
|
43 | 42 |
} |
44 | 43 |
|
45 | 44 |
/// virtual destructor |
46 | 45 |
Canvas::~Canvas() |
47 | 46 |
{ |
48 | 47 |
// clean up |
49 |
- releaseOutStream(); |
|
50 | 48 |
while (!m_inList.empty()) { |
51 | 49 |
delete m_inList.back().m_pInput; |
52 | 50 |
m_inList.pop_back(); |
... | ... |
@@ -69,27 +67,26 @@ void Canvas::updateConfig() |
69 | 67 |
updateInListLight(); |
70 | 68 |
|
71 | 69 |
// output stream name file was modified -> re-get output stream |
72 |
- if (m_fileOutStream.checkModified()) { |
|
73 |
- releaseOutStream(); |
|
74 |
- getOutStream(); |
|
75 |
- } |
|
70 |
+ if (m_fileOutStream.checkModified()) |
|
71 |
+ m_fileOutStream.update(); |
|
76 | 72 |
} |
77 | 73 |
|
78 | 74 |
/// (re-)create canvas |
79 | 75 |
void Canvas::createCanvas() |
80 | 76 |
{ |
81 |
- std::string strFormat; |
|
82 |
- |
|
83 | 77 |
// get rid of old canvas |
84 | 78 |
destroyCanvas(); |
85 | 79 |
|
86 | 80 |
// read format from format file |
87 |
- if (!m_fileFormat.getStr(strFormat) || !m_format.fromStr(strFormat)) |
|
81 |
+ m_fileFormat.update(); |
|
82 |
+ if (!m_fileFormat.m_valid) |
|
88 | 83 |
return; |
89 | 84 |
|
90 | 85 |
// create frame |
91 |
- m_pCanvas = BlinkenFrameNew(m_format.m_height, m_format.m_width, |
|
92 |
- m_format.m_channels, m_format.m_maxval, 1); |
|
86 |
+ m_pCanvas = BlinkenFrameNew(m_fileFormat.m_obj.m_height, |
|
87 |
+ m_fileFormat.m_obj.m_width, |
|
88 |
+ m_fileFormat.m_obj.m_channels, |
|
89 |
+ m_fileFormat.m_obj.m_maxval, 1); |
|
93 | 90 |
m_canvasHasFrame = false; |
94 | 91 |
} |
95 | 92 |
|
... | ... |
@@ -158,31 +155,6 @@ void Canvas::updateInListFull() |
158 | 155 |
} // while itSubdir itIn |
159 | 156 |
} |
160 | 157 |
|
161 |
-/// get output stream |
|
162 |
-void Canvas::getOutStream() |
|
163 |
-{ |
|
164 |
- // get name of output stream |
|
165 |
- m_fileOutStream.getStr(m_nameOutStream); |
|
166 |
- |
|
167 |
- // get output stream |
|
168 |
- m_pOutStream = &m_streamMgr.refStream(m_nameOutStream); |
|
169 |
- |
|
170 |
- // send current frame to stream |
|
171 |
- sendFrame(); |
|
172 |
-} |
|
173 |
- |
|
174 |
-/// release output stream |
|
175 |
-void Canvas::releaseOutStream() |
|
176 |
-{ |
|
177 |
- // send no frame information |
|
178 |
- if (m_pOutStream) |
|
179 |
- m_pOutStream->setFrame(NULL); |
|
180 |
- |
|
181 |
- // unreference output stream |
|
182 |
- m_pOutStream = NULL; |
|
183 |
- m_streamMgr.unrefStream(m_nameOutStream); |
|
184 |
-} |
|
185 |
- |
|
186 | 158 |
/// notfication to redraw (called by inputs) |
187 | 159 |
void Canvas::redraw() |
188 | 160 |
{ |
... | ... |
@@ -207,14 +179,12 @@ void Canvas::redraw() |
207 | 179 |
/// send current frame to output stream |
208 | 180 |
void Canvas::sendFrame() |
209 | 181 |
{ |
210 |
- if (m_pOutStream) { |
|
211 | 182 |
// frame available -> send it |
212 | 183 |
if (m_canvasHasFrame) |
213 |
- m_pOutStream->setFrame(m_pCanvas); |
|
184 |
+ m_fileOutStream.setFrame(m_pCanvas); |
|
214 | 185 |
// no frame available -> send this information |
215 | 186 |
else |
216 |
- m_pOutStream->setFrame(NULL); |
|
217 |
- } |
|
187 |
+ m_fileOutStream.setFrame(NULL); |
|
218 | 188 |
} |
219 | 189 |
|
220 | 190 |
/* ################### |
... | ... |
@@ -15,8 +15,9 @@ |
15 | 15 |
#include "Directory.h" |
16 | 16 |
#include "File.h" |
17 | 17 |
#include "Format.h" |
18 |
+#include "FormatFile.h" |
|
18 | 19 |
#include "Module.h" |
19 |
-#include "SettingFile.h" |
|
20 |
+#include "OutStreamFile.h" |
|
20 | 21 |
#include "StreamMgr.h" |
21 | 22 |
|
22 | 23 |
namespace Blinker { |
... | ... |
@@ -74,12 +75,6 @@ protected: |
74 | 75 |
/// full update of input list, i.e. scan subdirs in input list directory |
75 | 76 |
void updateInListFull(); |
76 | 77 |
|
77 |
- /// get output stream |
|
78 |
- void getOutStream(); |
|
79 |
- |
|
80 |
- /// release output stream |
|
81 |
- void releaseOutStream(); |
|
82 |
- |
|
83 | 78 |
/// notfication to redraw (called by inputs) |
84 | 79 |
void redraw(); |
85 | 80 |
|
... | ... |
@@ -87,15 +82,12 @@ protected: |
87 | 82 |
void sendFrame(); |
88 | 83 |
|
89 | 84 |
protected: |
90 |
- SettingFile m_fileFormat; ///< canvas format file |
|
85 |
+ FormatFile m_fileFormat; ///< canvas format file |
|
91 | 86 |
Directory m_dirInputs; ///< input stream directory |
92 |
- SettingFile m_fileOutStream; ///< output stream name file |
|
93 |
- Format m_format; ///< canvas format |
|
87 |
+ OutStreamFile m_fileOutStream; ///< output stream name file |
|
94 | 88 |
stBlinkenFrame *m_pCanvas; ///< canvas to put streams on |
95 | 89 |
bool m_canvasHasFrame; ///< if there is >= 1 frame on canvas |
96 | 90 |
InList m_inList; ///< current input list |
97 |
- std::string m_nameOutStream; ///< name of output stream |
|
98 |
- Stream *m_pOutStream; ///< output stream |
|
99 | 91 |
}; // class Canvas |
100 | 92 |
|
101 | 93 |
} // namespace Blinker |
... | ... |
@@ -11,9 +11,11 @@ |
11 | 11 |
#include "CanvasInput.h" |
12 | 12 |
#include "Directory.h" |
13 | 13 |
#include "File.h" |
14 |
+#include "InStreamFile.h" |
|
14 | 15 |
#include "Position.h" |
15 |
-#include "SettingFile.h" |
|
16 |
+#include "PositionFile.h" |
|
16 | 17 |
#include "Size.h" |
18 |
+#include "SizeFile.h" |
|
17 | 19 |
#include "StreamMgr.h" |
18 | 20 |
#include "StreamRecv.h" |
19 | 21 |
|
... | ... |
@@ -26,27 +28,23 @@ namespace Blinker { |
26 | 28 |
*/ |
27 | 29 |
Canvas::Input::Input(Canvas &canvas, const Directory &dirBase): |
28 | 30 |
m_canvas(canvas), |
29 |
- m_fileInStream(dirBase.getFile("instream")), |
|
31 |
+ m_fileInStream(dirBase.getFile("instream"), canvas.m_streamMgr), |
|
30 | 32 |
m_fileSrcPos(dirBase.getFile("srcpos")), |
31 | 33 |
m_fileSize(dirBase.getFile("size")), |
32 |
- m_fileDestPos(dirBase.getFile("destpos")), |
|
33 |
- m_pInStream(NULL), |
|
34 |
- m_haveSrcPos(false), |
|
35 |
- m_haveSize(false), |
|
36 |
- m_haveDestPos(false) |
|
34 |
+ m_fileDestPos(dirBase.getFile("destpos")) |
|
37 | 35 |
{ |
38 |
- // get settings and attach to input stream |
|
36 |
+ // set up |
|
39 | 37 |
getSrcPos(); |
40 | 38 |
getSize(); |
41 | 39 |
getDestPos(); |
42 |
- getInStream(); |
|
40 |
+ m_fileInStream.setStreamRecv(this); |
|
43 | 41 |
} |
44 | 42 |
|
45 | 43 |
/// virtual destructor |
46 | 44 |
Canvas::Input::~Input() |
47 | 45 |
{ |
48 |
- // detach from input stream and release it |
|
49 |
- releaseInStream(); |
|
46 |
+ // clean up |
|
47 |
+ m_fileInStream.setStreamRecv(NULL); |
|
50 | 48 |
} |
51 | 49 |
|
52 | 50 |
/// check for update of configuration |
... | ... |
@@ -54,8 +52,8 @@ void Canvas::Input::updateConfig() |
54 | 52 |
{ |
55 | 53 |
// input stream name file was modified -> re-get input stream |
56 | 54 |
if (m_fileInStream.checkModified()) { |
57 |
- releaseInStream(); |
|
58 |
- getInStream(); |
|
55 |
+ m_fileInStream.update(); |
|
56 |
+ m_canvas.redraw(); // notify canvas to redraw |
|
59 | 57 |
} |
60 | 58 |
|
61 | 59 |
// position/size files were modified -> re-get position/size |
... | ... |
@@ -88,75 +86,50 @@ void Canvas::Input::setFrame(const std::string &stream, stBlinkenFrame *pFrame) |
88 | 86 |
bool Canvas::Input::draw() |
89 | 87 |
{ |
90 | 88 |
stBlinkenFrame *pFrame; |
89 |
+ int destx, desty, srcx, srcy, width, height; |
|
91 | 90 |
|
92 | 91 |
// no destination position or no canvas -> leave |
93 |
- if (!m_haveDestPos || !m_canvas.m_pCanvas) |
|
92 |
+ if (!m_fileDestPos.m_valid || !m_canvas.m_pCanvas) |
|
94 | 93 |
return false; |
94 |
+ destx = m_fileDestPos.m_obj.m_x; |
|
95 |
+ desty = m_fileDestPos.m_obj.m_y; |
|
95 | 96 |
|
96 | 97 |
// get current frame from stream (leave if no stream or no frame) |
97 |
- if (!m_pInStream) |
|
98 |
- return false; |
|
99 |
- pFrame = m_pInStream->getCurFrame(); |
|
98 |
+ pFrame = m_fileInStream.getCurFrame(); |
|
100 | 99 |
if (!pFrame) |
101 | 100 |
return false; |
102 | 101 |
|
103 | 102 |
// no source position -> use top left |
104 |
- if (!m_haveSrcPos) { |
|
105 |
- m_srcPos.m_x = 0; |
|
106 |
- m_srcPos.m_y = 0; |
|
103 |
+ if (m_fileSrcPos.m_valid) { |
|
104 |
+ srcx = m_fileSrcPos.m_obj.m_x; |
|
105 |
+ srcy = m_fileSrcPos.m_obj.m_y; |
|
106 |
+ } else { |
|
107 |
+ srcx = 0; |
|
108 |
+ srcy = 0; |
|
107 | 109 |
} |
108 | 110 |
|
109 | 111 |
// no size -> use entire source frame |
110 | 112 |
// (BlinkenLib will clip this if too large) |
111 |
- if (!m_haveSize) { |
|
112 |
- m_size.m_width = BlinkenFrameGetWidth(pFrame); |
|
113 |
- m_size.m_height = BlinkenFrameGetHeight(pFrame); |
|
113 |
+ if (m_fileSize.m_valid) { |
|
114 |
+ width = m_fileSize.m_obj.m_width; |
|
115 |
+ height = m_fileSize.m_obj.m_height; |
|
116 |
+ } else { |
|
117 |
+ width = BlinkenFrameGetWidth(pFrame); |
|
118 |
+ height = BlinkenFrameGetHeight(pFrame); |
|
114 | 119 |
} |
115 | 120 |
|
116 | 121 |
// draw rectangular area to canvas |
117 |
- BlinkenFrameCopyRect(m_canvas.m_pCanvas, m_destPos.m_y, m_destPos.m_x, |
|
118 |
- pFrame, m_srcPos.m_y, m_srcPos.m_x, |
|
119 |
- m_size.m_height, m_size.m_width); |
|
122 |
+ BlinkenFrameCopyRect(m_canvas.m_pCanvas, desty, destx, |
|
123 |
+ pFrame, srcy, srcx, height, width); |
|
120 | 124 |
|
121 | 125 |
return true; |
122 | 126 |
} |
123 | 127 |
|
124 |
-/// get input stream and attach to it |
|
125 |
-void Canvas::Input::getInStream() |
|
126 |
-{ |
|
127 |
- // get input stream |
|
128 |
- m_fileInStream.getStr(m_nameInStream); |
|
129 |
- m_pInStream = &m_canvas.m_streamMgr.refStream(m_nameInStream); |
|
130 |
- |
|
131 |
- // attach to input stream |
|
132 |
- if (m_pInStream) |
|
133 |
- m_pInStream->attach(this); |
|
134 |
- |
|
135 |
- // redrawing canvas will happen automatically because stream will set frame |
|
136 |
-} |
|
137 |
- |
|
138 |
-/// detach from input stream and release it |
|
139 |
-void Canvas::Input::releaseInStream() |
|
140 |
-{ |
|
141 |
- // detach from input stream |
|
142 |
- if (m_pInStream) |
|
143 |
- m_pInStream->detach(this); |
|
144 |
- |
|
145 |
- // unreference stream |
|
146 |
- m_pInStream = NULL; |
|
147 |
- m_canvas.m_streamMgr.unrefStream(m_nameInStream); |
|
148 |
- |
|
149 |
- // notify canvas to redraw |
|
150 |
- m_canvas.redraw(); |
|
151 |
-} |
|
152 |
- |
|
153 | 128 |
/// (re-)get position of area to copy from stream |
154 | 129 |
void Canvas::Input::getSrcPos() |
155 | 130 |
{ |
156 |
- std::string strPos; |
|
157 |
- |
|
158 |
- // read source position from file and parse it |
|
159 |
- m_haveSrcPos = m_fileSrcPos.getStr(strPos) && m_srcPos.fromStr(strPos); |
|
131 |
+ // read source position from file |
|
132 |
+ m_fileSrcPos.update(); |
|
160 | 133 |
|
161 | 134 |
// notify canvas to redraw |
162 | 135 |
m_canvas.redraw(); |
... | ... |
@@ -165,10 +138,8 @@ void Canvas::Input::getSrcPos() |
165 | 138 |
/// (re-)get size of area to copy from stream |
166 | 139 |
void Canvas::Input::getSize() |
167 | 140 |
{ |
168 |
- std::string strSize; |
|
169 |
- |
|
170 |
- // read size from file and parse it |
|
171 |
- m_haveSize = m_fileSize.getStr(strSize) && m_size.fromStr(strSize); |
|
141 |
+ // read size from file |
|
142 |
+ m_fileSize.update(); |
|
172 | 143 |
|
173 | 144 |
// notify canvas to redraw |
174 | 145 |
m_canvas.redraw(); |
... | ... |
@@ -177,10 +148,8 @@ void Canvas::Input::getSize() |
177 | 148 |
/// (re-)get destination position on canvas |
178 | 149 |
void Canvas::Input::getDestPos() |
179 | 150 |
{ |
180 |
- std::string strPos; |
|
181 |
- |
|
182 |
- // read destination position from file and parse it |
|
183 |
- m_haveDestPos = m_fileDestPos.getStr(strPos) && m_destPos.fromStr(strPos); |
|
151 |
+ // read destination position from file |
|
152 |
+ m_fileDestPos.update(); |
|
184 | 153 |
|
185 | 154 |
// notify canvas to redraw |
186 | 155 |
m_canvas.redraw(); |
... | ... |
@@ -13,9 +13,11 @@ |
13 | 13 |
#include "Canvas.h" |
14 | 14 |
#include "Directory.h" |
15 | 15 |
#include "File.h" |
16 |
+#include "InStreamFile.h" |
|
16 | 17 |
#include "Position.h" |
17 |
-#include "SettingFile.h" |
|
18 |
+#include "PositionFile.h" |
|
18 | 19 |
#include "Size.h" |
20 |
+#include "SizeFile.h" |
|
19 | 21 |
#include "StreamMgr.h" |
20 | 22 |
#include "StreamRecv.h" |
21 | 23 |
|
... | ... |
@@ -60,12 +62,6 @@ public: |
60 | 62 |
bool draw(); |
61 | 63 |
|
62 | 64 |
protected: |
63 |
- /// get input stream and attach to it |
|
64 |
- void getInStream(); |
|
65 |
- |
|
66 |
- /// detach from input stream and release it |
|
67 |
- void releaseInStream(); |
|
68 |
- |
|
69 | 65 |
/// (re-)get position of area to copy from stream |
70 | 66 |
void getSrcPos(); |
71 | 67 |
|
... | ... |
@@ -77,18 +73,10 @@ protected: |
77 | 73 |
|
78 | 74 |
protected: |
79 | 75 |
Canvas &m_canvas; ///< owning canvas |
80 |
- SettingFile m_fileInStream; ///< input stream name file |
|
81 |
- SettingFile m_fileSrcPos; ///< source position file |
|
82 |
- SettingFile m_fileSize; ///< size file |
|
83 |
- SettingFile m_fileDestPos; ///< destination position file |
|
84 |
- std::string m_nameInStream; ///< name of input stream |
|
85 |
- Stream *m_pInStream; ///< input stream |
|
86 |
- bool m_haveSrcPos; ///< if copy-area src position is defined |
|
87 |
- Position m_srcPos; ///< copy-area position in source |
|
88 |
- bool m_haveSize; ///< if copy-area size is defined |
|
89 |
- Size m_size; ///< copy-area size |
|
90 |
- bool m_haveDestPos; ///< if copy-area dest position is defined |
|
91 |
- Position m_destPos; ///< copy-area position on canvas (i.e. dest) |
|
76 |
+ InStreamFile m_fileInStream; ///< input stream name file |
|
77 |
+ PositionFile m_fileSrcPos; ///< source position file |
|
78 |
+ SizeFile m_fileSize; ///< size file |
|
79 |
+ PositionFile m_fileDestPos; ///< destination position file |
|
92 | 80 |
}; // class Canvas::Input |
93 | 81 |
|
94 | 82 |
} // namespace Blinker |
... | ... |
@@ -0,0 +1,20 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef FORMATFILE_H |
|
7 |
+#define FORMATFILE_H |
|
8 |
+ |
|
9 |
+#include "Format.h" |
|
10 |
+#include "SettingFile_impl.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/// setting file containting frame format |
|
15 |
+typedef SettingFile<Format> FormatFile; |
|
16 |
+ |
|
17 |
+} // namespace Blinker |
|
18 |
+ |
|
19 |
+#endif // #ifndef FORMATFILE_H |
|
20 |
+ |
... | ... |
@@ -0,0 +1,104 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include "File.h" |
|
7 |
+#include "InStreamFile.h" |
|
8 |
+#include "Stream.h" |
|
9 |
+#include "StreamFile.h" |
|
10 |
+#include "StreamMgr.h" |
|
11 |
+#include "StreamRecv.h" |
|
12 |
+ |
|
13 |
+namespace Blinker { |
|
14 |
+ |
|
15 |
+/** |
|
16 |
+ * @brief constructor from path |
|
17 |
+ * @param[in] path path to file |
|
18 |
+ * @param[in] streamMgr stream manager |
|
19 |
+ */ |
|
20 |
+InStreamFile::InStreamFile(const std::string &path, StreamMgr &streamMgr): |
|
21 |
+ StreamFile(path, streamMgr), |
|
22 |
+ m_pStreamRecv(NULL) |
|
23 |
+{ |
|
24 |
+ update(); |
|
25 |
+} |
|
26 |
+ |
|
27 |
+/** |
|
28 |
+ * @brief constructor from basic file |
|
29 |
+ * @param[in] file basic file object |
|
30 |
+ * @param[in] streamMgr stream manager |
|
31 |
+ */ |
|
32 |
+InStreamFile::InStreamFile(const File &file, StreamMgr &streamMgr): |
|
33 |
+ StreamFile(file, streamMgr), |
|
34 |
+ m_pStreamRecv(NULL) |
|
35 |
+{ |
|
36 |
+ update(); |
|
37 |
+} |
|
38 |
+ |
|
39 |
+/// destructor |
|
40 |
+InStreamFile::~InStreamFile() |
|
41 |
+{ |
|
42 |
+ detach(); |
|
43 |
+ // unreferencing stream happens in destructor of StreamFile |
|
44 |
+} |
|
45 |
+ |
|
46 |
+/** |
|
47 |
+ * @brief assignment operator |
|
48 |
+ * @param[in] file basic file object |
|
49 |
+ */ |
|
50 |
+const InStreamFile & InStreamFile::operator=(const File &file) |
|
51 |
+{ |
|
52 |
+ detach(); |
|
53 |
+ StreamFile::operator=(file); |
|
54 |
+ attach(); |
|
55 |
+ return *this; |
|
56 |
+} |
|
57 |
+ |
|
58 |
+/** |
|
59 |
+ * @brief set stream receiver |
|
60 |
+ * @param[in] pStreamRecv stream reciver (NULL if none) |
|
61 |
+ */ |
|
62 |
+void InStreamFile::setStreamRecv(StreamRecv *pStreamRecv) |
|
63 |
+{ |
|
64 |
+ detach(); |
|
65 |
+ m_pStreamRecv = pStreamRecv; |
|
66 |
+ attach(); |
|
67 |
+} |
|
68 |
+ |
|
69 |
+/// update, i.e. (re-)read file and attach to new stream |
|
70 |
+void InStreamFile::update() |
|
71 |
+{ |
|
72 |
+ detach(); |
|
73 |
+ StreamFile::update(); |
|
74 |
+ attach(); |
|
75 |
+} |
|
76 |
+ |
|
77 |
+/** |
|
78 |
+ * @brief get current frame |
|
79 |
+ * @return current frame (NULL for none) |
|
80 |
+ */ |
|
81 |
+stBlinkenFrame * InStreamFile::getCurFrame() const |
|
82 |
+{ |
|
83 |
+ if (m_pStream) |
|
84 |
+ return m_pStream->getCurFrame(); |
|
85 |
+ else |
|
86 |
+ return NULL; |
|
87 |
+} |
|
88 |
+ |
|
89 |
+/// attach to stream |
|
90 |
+void InStreamFile::attach() |
|
91 |
+{ |
|
92 |
+ if (m_pStream && m_pStreamRecv) |
|
93 |
+ m_pStream->attach(m_pStreamRecv); |
|
94 |
+} |
|
95 |
+ |
|
96 |
+/// detach from stream |
|
97 |
+void InStreamFile::detach() |
|
98 |
+{ |
|
99 |
+ if (m_pStream && m_pStreamRecv) |
|
100 |
+ m_pStream->detach(m_pStreamRecv); |
|
101 |
+} |
|
102 |
+ |
|
103 |
+} // namespace Blinker |
|
104 |
+ |
... | ... |
@@ -0,0 +1,73 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef INSTREAMFILE_H |
|
7 |
+#define INSTREAMFILE_H |
|
8 |
+ |
|
9 |
+#include "File.h" |
|
10 |
+#include "StreamFile.h" |
|
11 |
+#include "StreamMgr.h" |
|
12 |
+#include "StreamRecv.h" |
|
13 |
+ |
|
14 |
+namespace Blinker { |
|
15 |
+ |
|
16 |
+/// setting file containting a name of an input stream |
|
17 |
+class InStreamFile: public StreamFile |
|
18 |
+{ |
|
19 |
+public: |
|
20 |
+ /** |
|
21 |
+ * @brief constructor from path |
|
22 |
+ * @param[in] path path to file |
|
23 |
+ * @param[in] streamMgr stream manager |
|
24 |
+ */ |
|
25 |
+ InStreamFile(const std::string &path, StreamMgr &streamMgr); |
|
26 |
+ |
|
27 |
+ /** |
|
28 |
+ * @brief constructor from basic file |
|
29 |
+ * @param[in] file basic file object |
|
30 |
+ * @param[in] streamMgr stream manager |
|
31 |
+ */ |
|
32 |
+ InStreamFile(const File &file, StreamMgr &streamMgr); |
|
33 |
+ |
|
34 |
+ /// destructor |
|
35 |
+ ~InStreamFile(); |
|
36 |
+ |
|
37 |
+ /** |
|
38 |
+ * @brief assignment operator |
|
39 |
+ * @param[in] file basic file object |
|
40 |
+ */ |
|
41 |
+ const InStreamFile & operator=(const File &file); |
|
42 |
+ |
|
43 |
+public: |
|
44 |
+ /** |
|
45 |
+ * @brief set stream receiver |
|
46 |
+ * @param[in] pStreamRecv stream reciver (NULL if none) |
|
47 |
+ */ |
|
48 |
+ void setStreamRecv(StreamRecv *pStreamRecv); |
|
49 |
+ |
|
50 |
+ /// update, i.e. (re-)read file and attach to new stream |
|
51 |
+ void update(); |
|
52 |
+ |
|
53 |
+ /** |
|
54 |
+ * @brief get current frame |
|
55 |
+ * @return current frame (NULL for none) |
|
56 |
+ */ |
|
57 |
+ stBlinkenFrame * getCurFrame() const; |
|
58 |
+ |
|
59 |
+protected: |
|
60 |
+ /// attach to stream |
|
61 |
+ void attach(); |
|
62 |
+ |
|
63 |
+ /// detach from stream |
|
64 |
+ void detach(); |
|
65 |
+ |
|
66 |
+protected: |
|
67 |
+ StreamRecv *m_pStreamRecv; ///< stream receiver to attach to input stream |
|
68 |
+}; // class InStreamFile |
|
69 |
+ |
|
70 |
+} // namespace Blinker |
|
71 |
+ |
|
72 |
+#endif // #ifndef INSTREAMFILE_H |
|
73 |
+ |
... | ... |
@@ -0,0 +1,38 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include <string> |
|
7 |
+ |
|
8 |
+#include "Name.h" |
|
9 |
+ |
|
10 |
+namespace Blinker { |
|
11 |
+ |
|
12 |
+/// constructor |
|
13 |
+Name::Name() |
|
14 |
+{ |
|
15 |
+} |
|
16 |
+ |
|
17 |
+/** |
|
18 |
+ * @brief parse from string format |
|
19 |
+ * @param[in] str string format |
|
20 |
+ * @return if parsing was successful |
|
21 |
+ */ |
|
22 |
+bool Name::fromStr(const std::string &str) |
|
23 |
+{ |
|
24 |
+ m_str = str; |
|
25 |
+ return !m_str.empty(); |
|
26 |
+} |
|
27 |
+ |
|
28 |
+/** |
|
29 |
+ * @brief convert to string format |
|
30 |
+ * @return string format |
|
31 |
+ */ |
|
32 |
+std::string Name::toStr() const |
|
33 |
+{ |
|
34 |
+ return m_str; |
|
35 |
+} |
|
36 |
+ |
|
37 |
+} // namespace Blinker |
|
38 |
+ |
... | ... |
@@ -0,0 +1,41 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef NAME_H |
|
7 |
+#define NAME_H |
|
8 |
+ |
|
9 |
+#include <string> |
|
10 |
+ |
|
11 |
+namespace Blinker { |
|
12 |
+ |
|
13 |
+/// a name (a wrapper for std::string to use it as templ param of SettingFile) |
|
14 |
+class Name |
|
15 |
+{ |
|
16 |
+public: |
|
17 |
+ /// constructor |
|
18 |
+ Name(); |
|
19 |
+ |
|
20 |
+public: |
|
21 |
+ /** |
|
22 |
+ * @brief parse from string format |
|
23 |
+ * @param[in] str string format |
|
24 |
+ * @return if parsing was successful |
|
25 |
+ */ |
|
26 |
+ bool fromStr(const std::string &str); |
|
27 |
+ |
|
28 |
+ /** |
|
29 |
+ * @brief convert to string format |
|
30 |
+ * @return string format |
|
31 |
+ */ |
|
32 |
+ std::string toStr() const; |
|
33 |
+ |
|
34 |
+public: |
|
35 |
+ std::string m_str; ///< name string |
|
36 |
+}; // class Name |
|
37 |
+ |
|
38 |
+} // namespace Blinker |
|
39 |
+ |
|
40 |
+#endif // #ifndef NAME_H |
|
41 |
+ |
... | ... |
@@ -0,0 +1,20 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef NAMEFILE_H |
|
7 |
+#define NAMEFILE_H |
|
8 |
+ |
|
9 |
+#include "Name.h" |
|
10 |
+#include "SettingFile_impl.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/// setting file containting a name |
|
15 |
+typedef SettingFile<Name> NameFile; |
|
16 |
+ |
|
17 |
+} // namespace Blinker |
|
18 |
+ |
|
19 |
+#endif // #ifndef NAMEFILE_H |
|
20 |
+ |
... | ... |
@@ -0,0 +1,72 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include "File.h" |
|
7 |
+#include "OutStreamFile.h" |
|
8 |
+#include "Stream.h" |
|
9 |
+#include "StreamFile.h" |
|
10 |
+#include "StreamMgr.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/** |
|
15 |
+ * @brief constructor from path |
|
16 |
+ * @param[in] path path to file |
|
17 |
+ * @param[in] streamMgr stream manager |
|
18 |
+ */ |
|
19 |
+OutStreamFile::OutStreamFile(const std::string &path, StreamMgr &streamMgr): |
|
20 |
+ StreamFile(path, streamMgr) |
|
21 |
+{ |
|
22 |
+ update(); |
|
23 |
+} |
|
24 |
+ |
|
25 |
+/** |
|
26 |
+ * @brief constructor from basic file |
|
27 |
+ * @param[in] file basic file object |
|
28 |
+ * @param[in] streamMgr stream manager |
|
29 |
+ */ |
|
30 |
+OutStreamFile::OutStreamFile(const File &file, StreamMgr &streamMgr): |
|
31 |
+ StreamFile(file, streamMgr) |
|
32 |
+{ |
|
33 |
+ update(); |
|
34 |
+} |
|
35 |
+ |
|
36 |
+/// destructor |
|
37 |
+OutStreamFile::~OutStreamFile() |
|
38 |
+{ |
|
39 |
+ setFrame(NULL); // set empty frame (stream is ending) |
|
40 |
+ // unreferencing stream happens in destructor of StreamFile |
|
41 |
+} |
|
42 |
+ |
|
43 |
+/** |
|
44 |
+ * @brief assignment operator |
|
45 |
+ * @param[in] file basic file object |
|
46 |
+ */ |
|
47 |
+const OutStreamFile & OutStreamFile::operator=(const File &file) |
|
48 |
+{ |
|
49 |
+ setFrame(NULL); // set empty frame (stream is ending) |
|
50 |
+ StreamFile::operator=(file); |
|
51 |
+ return *this; |
|
52 |
+} |
|
53 |
+ |
|
54 |
+/// update, i.e. (re-)read file and reference new stream |
|
55 |
+void OutStreamFile::update() |
|
56 |
+{ |
|
57 |
+ setFrame(NULL); // set empty frame (stream is ending) |
|
58 |
+ StreamFile::update(); |
|
59 |
+} |
|
60 |
+ |
|
61 |
+/** |
|
62 |
+ * @brief set current frame |
|
63 |
+ * @param[in] pFrame current frame (NULL for none) |
|
64 |
+ */ |
|
65 |
+void OutStreamFile::setFrame(stBlinkenFrame *pFrame) |
|
66 |
+{ |
|
67 |
+ if (m_pStream) |
|
68 |
+ m_pStream->setFrame(pFrame); |
|
69 |
+} |
|
70 |
+ |
|
71 |
+} // namespace Blinker |
|
72 |
+ |
... | ... |
@@ -0,0 +1,58 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef OUTSTREAMFILE_H |
|
7 |
+#define OUTSTREAMFILE_H |
|
8 |
+ |
|
9 |
+#include <BlinkenLib/BlinkenFrame.h> |
|
10 |
+ |
|
11 |
+#include "File.h" |
|
12 |
+#include "StreamFile.h" |
|
13 |
+#include "StreamMgr.h" |
|
14 |
+ |
|
15 |
+namespace Blinker { |
|
16 |
+ |
|
17 |
+/// setting file containting a name of an output stream |
|
18 |
+class OutStreamFile: public StreamFile |
|
19 |
+{ |
|
20 |
+public: |
|
21 |
+ /** |
|
22 |
+ * @brief constructor from path |
|
23 |
+ * @param[in] path path to file |
|
24 |
+ * @param[in] streamMgr stream manager |
|
25 |
+ */ |
|
26 |
+ OutStreamFile(const std::string &path, StreamMgr &streamMgr); |
|
27 |
+ |
|
28 |
+ /** |
|
29 |
+ * @brief constructor from basic file |
|
30 |
+ * @param[in] file basic file object |
|
31 |
+ * @param[in] streamMgr stream manager |
|
32 |
+ */ |
|
33 |
+ OutStreamFile(const File &file, StreamMgr &streamMgr); |
|
34 |
+ |
|
35 |
+ /// destructor |
|
36 |
+ ~OutStreamFile(); |
|
37 |
+ |
|
38 |
+ /** |
|
39 |
+ * @brief assignment operator |
|
40 |
+ * @param[in] file basic file object |
|
41 |
+ */ |
|
42 |
+ const OutStreamFile & operator=(const File &file); |
|
43 |
+ |
|
44 |
+public: |
|
45 |
+ /// update, i.e. (re-)read file and reference new stream |
|
46 |
+ void update(); |
|
47 |
+ |
|
48 |
+ /** |
|
49 |
+ * @brief set current frame |
|
50 |
+ * @param[in] pFrame current frame (NULL for none) |
|
51 |
+ */ |
|
52 |
+ void setFrame(stBlinkenFrame *pFrame); |
|
53 |
+}; // class OutStreamFile |
|
54 |
+ |
|
55 |
+} // namespace Blinker |
|
56 |
+ |
|
57 |
+#endif // #ifndef OUTSTREAMFILE_H |
|
58 |
+ |
... | ... |
@@ -13,8 +13,8 @@ |
13 | 13 |
#include "Directory.h" |
14 | 14 |
#include "File.h" |
15 | 15 |
#include "Module.h" |
16 |
+#include "OutStreamFile.h" |
|
16 | 17 |
#include "Player.h" |
17 |
-#include "SettingFile.h" |
|
18 | 18 |
#include "StreamMgr.h" |
19 | 19 |
#include "Time.h" |
20 | 20 |
#include "TimeCallee.h" |
... | ... |
@@ -30,16 +30,12 @@ namespace Blinker { |
30 | 30 |
Player::Player(CallMgr &callMgr, StreamMgr &streamMgr, |
31 | 31 |
const Directory &dirBase): |
32 | 32 |
Module(callMgr, streamMgr, dirBase), |
33 |
- m_fileOutStream(dirBase.getFile("outstream")), |
|
33 |
+ m_fileOutStream(dirBase.getFile("outstream"), streamMgr), |
|
34 | 34 |
m_dirPlaylist(dirBase.getSubdir("playlist")), |
35 |
- m_pOutStream(NULL), |
|
36 | 35 |
m_curValid(false), |
37 | 36 |
m_curEntry(m_playlist.begin()), |
38 | 37 |
m_curFrame(0) |
39 | 38 |
{ |
40 |
- // get output stream |
|
41 |
- getOutStream(); |
|
42 |
- |
|
43 | 39 |
// load playlist |
44 | 40 |
updatePlaylistFull(); |
45 | 41 |
} |
... | ... |
@@ -55,9 +51,6 @@ Player::~Player() |
55 | 51 |
m_playlist.back().freeMovie(); |
56 | 52 |
m_playlist.pop_back(); |
57 | 53 |
} |
58 |
- |
|
59 |
- // release output stream |
|
60 |
- releaseOutStream(); |
|
61 | 54 |
} |
62 | 55 |
|
63 | 56 |
/// check for update of configuration |
... | ... |
@@ -65,8 +58,8 @@ void Player::updateConfig() |
65 | 58 |
{ |
66 | 59 |
// output stream name file was modified -> re-get output stream |
67 | 60 |
if (m_fileOutStream.checkModified()) { |
68 |
- releaseOutStream(); |
|
69 |
- getOutStream(); |
|
61 |
+ m_fileOutStream.update(); |
|
62 |
+ sendFrame(); |
|
70 | 63 |
} |
71 | 64 |
|
72 | 65 |
// playlist update (directory modified -> full, otherwise -> light) |
... | ... |
@@ -194,31 +187,6 @@ void Player::updatePlaylistFull() |
194 | 187 |
} |
195 | 188 |
} |
196 | 189 |
|
197 |
-/// get output stream |
|
198 |
-void Player::getOutStream() |
|
199 |
-{ |
|
200 |
- // get name of output stream |
|
201 |
- m_fileOutStream.getStr(m_nameOutStream); |
|
202 |
- |
|
203 |
- // get output stream |
|
204 |
- m_pOutStream = &m_streamMgr.refStream(m_nameOutStream); |
|
205 |
- |
|
206 |
- // send current frame to stream |
|
207 |
- sendFrame(); |
|
208 |
-} |
|
209 |
- |
|
210 |
-/// release output stream |
|
211 |
-void Player::releaseOutStream() |
|
212 |
-{ |
|
213 |
- // send no frame information |
|
214 |
- if (m_pOutStream) |
|
215 |
- m_pOutStream->setFrame(NULL); |
|
216 |
- |
|
217 |
- // unreference output stream |
|
218 |
- m_pOutStream = NULL; |
|
219 |
- m_streamMgr.unrefStream(m_nameOutStream); |
|
220 |
-} |
|
221 |
- |
|
222 | 190 |
/// process current frame |
223 | 191 |
void Player::procFrame() |
224 | 192 |
{ |
... | ... |
@@ -267,17 +235,15 @@ void Player::procFrame() |
267 | 235 |
/// send current frame to output stream |
268 | 236 |
void Player::sendFrame() |
269 | 237 |
{ |
270 |
- if (m_pOutStream) { |
|
271 | 238 |
// frame avalable -> send it |
272 | 239 |
if (m_curValid) { |
273 | 240 |
stBlinkenFrame *pFrame = |
274 | 241 |
BlinkenMovieGetFrame(m_curEntry->m_pMovie, m_curFrame); |
275 |
- m_pOutStream->setFrame(pFrame); |
|
242 |
+ m_fileOutStream.setFrame(pFrame); |
|
276 | 243 |
} |
277 | 244 |
// no frame available -> send this information |
278 | 245 |
else |
279 |
- m_pOutStream->setFrame(NULL); |
|
280 |
- } |
|
246 |
+ m_fileOutStream.setFrame(NULL); |
|
281 | 247 |
} |
282 | 248 |
|
283 | 249 |
/* ################# |
... | ... |
@@ -15,7 +15,7 @@ |
15 | 15 |
#include "Directory.h" |
16 | 16 |
#include "File.h" |
17 | 17 |
#include "Module.h" |
18 |
-#include "SettingFile.h" |
|
18 |
+#include "OutStreamFile.h" |
|
19 | 19 |
#include "StreamMgr.h" |
20 | 20 |
#include "Time.h" |
21 | 21 |
#include "TimeCallee.h" |
... | ... |
@@ -72,12 +72,6 @@ protected: |
72 | 72 |
/// full update of playlist, i.e. scan files in playlist directory |
73 | 73 |
void updatePlaylistFull(); |
74 | 74 |
|
75 |
- /// get output stream |
|
76 |
- void getOutStream(); |
|
77 |
- |
|
78 |
- /// release output stream |
|
79 |
- void releaseOutStream(); |
|
80 |
- |
|
81 | 75 |
/// process current frame |
82 | 76 |
void procFrame(); |
83 | 77 |
|
... | ... |
@@ -85,10 +79,8 @@ protected: |
85 | 79 |
void sendFrame(); |
86 | 80 |
|
87 | 81 |
protected: |
88 |
- SettingFile m_fileOutStream; ///< output stream name file |
|
82 |
+ OutStreamFile m_fileOutStream; ///< output stream name file |
|
89 | 83 |
Directory m_dirPlaylist; ///< playlist directory |
90 |
- std::string m_nameOutStream; ///< name of output stream |
|
91 |
- Stream *m_pOutStream; ///< output stream |
|
92 | 84 |
Playlist m_playlist; ///< current playlist |
93 | 85 |
bool m_curValid; ///< if there is a current frame |
94 | 86 |
Playlist::const_iterator m_curEntry; ///< current playlist entry |
... | ... |
@@ -0,0 +1,20 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef POSITIONFILE_H |
|
7 |
+#define POSITIONFILE_H |
|
8 |
+ |
|
9 |
+#include "Position.h" |
|
10 |
+#include "SettingFile_impl.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/// setting file containting a position in a frame |
|
15 |
+typedef SettingFile<Position> PositionFile; |
|
16 |
+ |
|
17 |
+} // namespace Blinker |
|
18 |
+ |
|
19 |
+#endif // #ifndef POSITIONFILE_H |
|
20 |
+ |
... | ... |
@@ -13,9 +13,9 @@ |
13 | 13 |
#include "CallMgr.h" |
14 | 14 |
#include "Directory.h" |
15 | 15 |
#include "File.h" |
16 |
+#include "InStreamFile.h" |
|
16 | 17 |
#include "Module.h" |
17 | 18 |
#include "Printer.h" |
18 |
-#include "SettingFile.h" |
|
19 | 19 |
#include "StreamMgr.h" |
20 | 20 |
#include "StreamRecv.h" |
21 | 21 |
|
... | ... |
@@ -30,28 +30,25 @@ namespace Blinker { |
30 | 30 |
Printer::Printer(CallMgr &callMgr, StreamMgr &streamMgr, |
31 | 31 |
const Directory &dirBase): |
32 | 32 |
Module(callMgr, streamMgr, dirBase), |
33 |
- m_fileInStream(dirBase.getFile("instream")), |
|
34 |
- m_pInStream(NULL) |
|
33 |
+ m_fileInStream(dirBase.getFile("instream"), streamMgr) |
|
35 | 34 |
{ |
36 |
- // get input stream and attach to it |
|
37 |
- getInStream(); |
|
35 |
+ // set up |
|
36 |
+ m_fileInStream.setStreamRecv(this); |
|
38 | 37 |
} |
39 | 38 |
|
40 | 39 |
/// virtual destructor |
41 | 40 |
Printer::~Printer() |
42 | 41 |
{ |
43 |
- // detach from input stream and release it |
|
44 |
- releaseInStream(); |
|
42 |
+ // clean up |
|
43 |
+ m_fileInStream.setStreamRecv(NULL); |
|
45 | 44 |
} |
46 | 45 |
|
47 | 46 |
/// check for update of configuration |
48 | 47 |
void Printer::updateConfig() |
49 | 48 |
{ |
50 | 49 |
// input stream name file was modified -> re-get input stream |
51 |
- if (m_fileInStream.checkModified()) { |
|
52 |
- releaseInStream(); |
|
53 |
- getInStream(); |
|
54 |
- } |
|
50 |
+ if (m_fileInStream.checkModified()) |
|
51 |
+ m_fileInStream.update(); |
|
55 | 52 |
} |
56 | 53 |
|
57 | 54 |
/** |
... | ... |
@@ -73,29 +70,5 @@ void Printer::setFrame(const std::string &stream, stBlinkenFrame *pFrame) |
73 | 70 |
(void)stream; // unused |
74 | 71 |
} |
75 | 72 |
|
76 |
-/// get input stream and attach to it |
|
77 |
-void Printer::getInStream() |
|
78 |
-{ |
|
79 |
- // get input stream |
|
80 |
- m_fileInStream.getStr(m_nameInStream); |
|
81 |
- m_pInStream = &m_streamMgr.refStream(m_nameInStream); |
|
82 |
- |
|
83 |
- // attach to input stream |
|
84 |
- if (m_pInStream) |
|
85 |
- m_pInStream->attach(this); |
|
86 |
-} |
|
87 |
- |
|
88 |
-/// detach from input stream and release it |
|
89 |
-void Printer::releaseInStream() |
|
90 |
-{ |
|
91 |
- // detach from input stream |
|
92 |
- if (m_pInStream) |
|
93 |
- m_pInStream->detach(this); |
|
94 |
- |
|
95 |
- // unreference stream |
|
96 |
- m_pInStream = NULL; |
|
97 |
- m_streamMgr.unrefStream(m_nameInStream); |
|
98 |
-} |
|
99 |
- |
|
100 | 73 |
} // namespace Blinker |
101 | 74 |
|
... | ... |
@@ -13,8 +13,8 @@ |
13 | 13 |
#include "CallMgr.h" |
14 | 14 |
#include "Directory.h" |
15 | 15 |
#include "File.h" |
16 |
+#include "InStreamFile.h" |
|
16 | 17 |
#include "Module.h" |
17 |
-#include "SettingFile.h" |
|
18 | 18 |
#include "StreamMgr.h" |
19 | 19 |
#include "StreamRecv.h" |
20 | 20 |
|
... | ... |
@@ -54,16 +54,7 @@ public: |
54 | 54 |
virtual void setFrame(const std::string &stream, stBlinkenFrame *pFrame); |
55 | 55 |
|
56 | 56 |
protected: |
57 |
- /// get input stream and attach to it |
|
58 |
- void getInStream(); |
|
59 |
- |
|
60 |
- /// detach from input stream and release it |
|
61 |
- void releaseInStream(); |
|
62 |
- |
|
63 |
-protected: |
|
64 |
- SettingFile m_fileInStream; ///< input stream name file |
|
65 |
- std::string m_nameInStream; ///< name of input stream |
|
66 |
- Stream *m_pInStream; ///< input stream |
|
57 |
+ InStreamFile m_fileInStream; ///< input stream name file |
|
67 | 58 |
}; // class Printer |
68 | 59 |
|
69 | 60 |
} // namespace Blinker |
... | ... |
@@ -14,7 +14,7 @@ |
14 | 14 |
#include "Module.h" |
15 | 15 |
#include "Priority.h" |
16 | 16 |
#include "PriorityInput.h" |
17 |
-#include "SettingFile.h" |
|
17 |
+#include "OutStreamFile.h" |
|
18 | 18 |
#include "StreamMgr.h" |
19 | 19 |
#include "StreamRecv.h" |
20 | 20 |
|
... | ... |
@@ -26,23 +26,21 @@ namespace Blinker { |
26 | 26 |
* @param[in] streamMgr stream manager |
27 | 27 |
* @param[in] dirBase base directory |
28 | 28 |
*/ |
29 |
-Priority::Priority(CallMgr &callMgr, StreamMgr &streamMgr, const Directory &dirBase): |
|
29 |
+Priority::Priority(CallMgr &callMgr, StreamMgr &streamMgr, |
|
30 |
+ const Directory &dirBase): |
|
30 | 31 |
Module(callMgr, streamMgr, dirBase), |
31 | 32 |
m_dirInputs(dirBase.getSubdir("inputs")), |
32 |
- m_fileOutStream(dirBase.getFile("outstream")), |
|
33 |
- m_itCurIn(m_inList.rend()), |
|
34 |
- m_pOutStream(NULL) |
|
33 |
+ m_fileOutStream(dirBase.getFile("outstream"), streamMgr), |
|
34 |
+ m_itCurIn(m_inList.rend()) |
|
35 | 35 |
{ |
36 | 36 |
// set up |
37 | 37 |
updateInListFull(); |
38 |
- getOutStream(); |
|
39 | 38 |
} |
40 | 39 |
|
41 | 40 |
/// virtual destructor |
42 | 41 |
Priority::~Priority() |
43 | 42 |
{ |
44 | 43 |
// clean up |
45 |
- releaseOutStream(); |
|
46 | 44 |
while (!m_inList.empty()) { |
47 | 45 |
delete m_inList.back().m_pInput; |
48 | 46 |
m_inList.pop_back(); |
... | ... |
@@ -59,10 +57,8 @@ void Priority::updateConfig() |
59 | 57 |
updateInListLight(); |
60 | 58 |
|
61 | 59 |
// output stream name file was modified -> re-get output stream |
62 |
- if (m_fileOutStream.checkModified()) { |
|
63 |
- releaseOutStream(); |
|
64 |
- getOutStream(); |
|
65 |
- } |
|
60 |
+ if (m_fileOutStream.checkModified()) |
|
61 |
+ m_fileOutStream.update(); |
|
66 | 62 |
} |
67 | 63 |
|
68 | 64 |
/// light update of input list, i.e. check all entries in current input list |
... | ... |
@@ -121,31 +117,6 @@ void Priority::updateInListFull() |
121 | 117 |
} // while itSubdir itIn |
122 | 118 |
} |
123 | 119 |
|
124 |
-/// get output stream |
|
125 |
-void Priority::getOutStream() |
|
126 |
-{ |
|
127 |
- // get name of output stream |
|
128 |
- m_fileOutStream.getStr(m_nameOutStream); |
|
129 |
- |
|
130 |
- // get output stream |
|
131 |
- m_pOutStream = &m_streamMgr.refStream(m_nameOutStream); |
|
132 |
- |
|
133 |
- // send current frame to stream |
|
134 |
- curFrame(); |
|
135 |
-} |
|
136 |
- |
|
137 |
-/// release output stream |
|
138 |
-void Priority::releaseOutStream() |
|
139 |
-{ |
|
140 |
- // send no frame information |
|
141 |
- if (m_pOutStream) |
|
142 |
- m_pOutStream->setFrame(NULL); |
|
143 |
- |
|
144 |
- // unreference output stream |
|
145 |
- m_pOutStream = NULL; |
|
146 |
- m_streamMgr.unrefStream(m_nameOutStream); |
|
147 |
-} |
|
148 |
- |
|
149 | 120 |
/** |
150 | 121 |
* @brief select specific input (called by inputs) |
151 | 122 |
* @param[in] input input to select |
... | ... |
@@ -171,7 +142,7 @@ void Priority::selectLower() |
171 | 142 |
// check for frame |
172 | 143 |
if ((pFrame = m_itCurIn->m_pInput->getCurFrame())) { |
173 | 144 |
// frame found -> keep this input as current, send frame |
174 |
- frame(pFrame); |
|
145 |
+ m_fileOutStream.setFrame(pFrame); |
|
175 | 146 |
return; |
176 | 147 |
} |
177 | 148 |
// try next input |
... | ... |
@@ -179,7 +150,7 @@ void Priority::selectLower() |
179 | 150 |
} |
180 | 151 |
|
181 | 152 |
// no input has got a frame -> send no frame |
182 |
- frame(NULL); |
|
153 |
+ m_fileOutStream.setFrame(NULL); |
|
183 | 154 |
} |
184 | 155 |
|
185 | 156 |
/// send current frame to output stream |
... | ... |
@@ -190,20 +161,10 @@ void Priority::curFrame() |
190 | 161 |
// current input available and frame it it available -> send frame |
191 | 162 |
if (m_itCurIn != m_inList.rend() && |
192 | 163 |
(pFrame = m_itCurIn->m_pInput->getCurFrame())) |
193 |
- frame(pFrame); |
|
164 |
+ m_fileOutStream.setFrame(pFrame); |
|
194 | 165 |
// no frame available -> send this information |
195 | 166 |
else |
196 |
- frame(NULL); |
|
197 |
-} |
|
198 |
- |
|
199 |
-/** |
|
200 |
- * @brief set current frame (also called by inputs) |
|
201 |
- * @param[in] pFrame new frame to use (NULL for none) |
|
202 |
- */ |
|
203 |
-void Priority::frame(stBlinkenFrame *pFrame) |
|
204 |
-{ |
|
205 |
- if (m_pOutStream) |
|
206 |
- m_pOutStream->setFrame(pFrame); |
|
167 |
+ m_fileOutStream.setFrame(NULL); |
|
207 | 168 |
} |
208 | 169 |
|
209 | 170 |
/* ##################### |
... | ... |
@@ -15,7 +15,7 @@ |
15 | 15 |
#include "Directory.h" |
16 | 16 |
#include "File.h" |
17 | 17 |
#include "Module.h" |
18 |
-#include "SettingFile.h" |
|
18 |
+#include "OutStreamFile.h" |
|
19 | 19 |
#include "StreamMgr.h" |
20 | 20 |
|
21 | 21 |
namespace Blinker { |
... | ... |
@@ -70,12 +70,6 @@ protected: |
70 | 70 |
/// full update of input list, i.e. scan subdirs in input list directory |
71 | 71 |
void updateInListFull(); |
72 | 72 |
|
73 |
- /// get output stream |
|
74 |
- void getOutStream(); |
|
75 |
- |
|
76 |
- /// release output stream |
|
77 |
- void releaseOutStream(); |
|
78 |
- |
|
79 | 73 |
/** |
80 | 74 |
* @brief select specific input (called by inputs) |
81 | 75 |
* @param[in] input input to select |
... | ... |
@@ -88,19 +82,11 @@ protected: |
88 | 82 |
/// send current frame to output stream |
89 | 83 |
void curFrame(); |
90 | 84 |
|
91 |
- /** |
|
92 |
- * @brief set current frame (also called by inputs) |
|
93 |
- * @param[in] pFrame new frame to use (NULL for none) |
|
94 |
- */ |
|
95 |
- void frame(stBlinkenFrame *pFrame); |
|
96 |
- |
|
97 | 85 |
protected: |
98 | 86 |
Directory m_dirInputs; ///< input stream directory |
99 |
- SettingFile m_fileOutStream; ///< output stream name file |
|
87 |
+ OutStreamFile m_fileOutStream; ///< output stream name file |
|
100 | 88 |
InList m_inList; ///< current input list |
101 | 89 |
InListIt m_itCurIn; ///< current input |
102 |
- std::string m_nameOutStream; ///< name of output stream |
|
103 |
- Stream *m_pOutStream; ///< output stream |
|
104 | 90 |
}; // class Priority |
105 | 91 |
|
106 | 92 |
} // namespace Blinker |
... | ... |
@@ -9,9 +9,9 @@ |
9 | 9 |
|
10 | 10 |
#include "Directory.h" |
11 | 11 |
#include "File.h" |
12 |
+#include "InStreamFile.h" |
|
12 | 13 |
#include "Priority.h" |
13 | 14 |
#include "PriorityInput.h" |
14 |
-#include "SettingFile.h" |
|
15 | 15 |
#include "StreamMgr.h" |
16 | 16 |
#include "StreamRecv.h" |
17 | 17 |
|
... | ... |
@@ -27,19 +27,18 @@ Priority::Input::Input(Priority &priority, const std::string &name, |
27 | 27 |
const Directory &dirBase): |
28 | 28 |
m_priority(priority), |
29 | 29 |
m_name(name), |
30 |
- m_fileInStream(dirBase.getFile("instream")), |
|
31 |
- m_pInStream(NULL), |
|
30 |
+ m_fileInStream(dirBase.getFile("instream"), priority.m_streamMgr), |
|
32 | 31 |
m_pFrame(NULL) |
33 | 32 |
{ |
34 |
- // attach to input stream |
|
35 |
- getInStream(); |
|
33 |
+ // set up |
|
34 |
+ m_fileInStream.setStreamRecv(this); |
|
36 | 35 |
} |
37 | 36 |
|
38 | 37 |
/// virtual destructor |
39 | 38 |
Priority::Input::~Input() |
40 | 39 |
{ |
41 |
- // detach from input stream and release it |
|
42 |
- releaseInStream(); |
|
40 |
+ // clean up |
|
41 |
+ m_fileInStream.setStreamRecv(NULL); |
|
43 | 42 |
} |
44 | 43 |
|
45 | 44 |
/// check for update of configuration |
... | ... |
@@ -47,8 +46,8 @@ void Priority::Input::updateConfig() |
47 | 46 |
{ |
48 | 47 |
// input stream name file was modified -> re-get input stream |
49 | 48 |
if (m_fileInStream.checkModified()) { |
50 |
- releaseInStream(); |
|
51 |
- getInStream(); |
|
49 |
+ frame(NULL); // unset frame to force priority reevalulation |
|
50 |
+ m_fileInStream.update(); |
|
52 | 51 |
} |
53 | 52 |
} |
54 | 53 |
|
... | ... |
@@ -72,35 +71,6 @@ stBlinkenFrame * Priority::Input::getCurFrame() |
72 | 71 |
return m_pFrame; |
73 | 72 |
} |
74 | 73 |
|
75 |
-/// get input stream and attach to it |
|
76 |
-void Priority::Input::getInStream() |
|
77 |
-{ |
|
78 |
- // get input stream |
|
79 |
- m_fileInStream.getStr(m_nameInStream); |
|
80 |
- m_pInStream = &m_priority.m_streamMgr.refStream(m_nameInStream); |
|
81 |
- |
|
82 |
- // attach to input stream |
|
83 |
- if (m_pInStream) |
|
84 |
- m_pInStream->attach(this); |
|
85 |
- |
|
86 |
- // processing of frame will happen automatically when stream sets frame |
|
87 |
-} |
|
88 |
- |
|
89 |
-/// detach from input stream and release it |
|
90 |
-void Priority::Input::releaseInStream() |
|
91 |
-{ |
|
92 |
- // set current frame to none |
|
93 |
- frame(NULL); |
|
94 |
- |
|
95 |
- // detach from input stream |
|
96 |
- if (m_pInStream) |
|
97 |
- m_pInStream->detach(this); |
|
98 |
- |
|
99 |
- // unreference stream |
|
100 |
- m_pInStream = NULL; |
|
101 |
- m_priority.m_streamMgr.unrefStream(m_nameInStream); |
|
102 |
-} |
|
103 |
- |
|
104 | 74 |
/** |
105 | 75 |
* @brief set current frame |
106 | 76 |
* @param[in] pFrame current frame (NULL for none) |
... | ... |
@@ -117,7 +87,7 @@ void Priority::Input::frame(stBlinkenFrame *pFrame) |
117 | 87 |
if (m_priority.m_itCurIn != m_priority.m_inList.rend() && |
118 | 88 |
m_priority.m_itCurIn->m_pInput == this) |
119 | 89 |
// pass on frame |
120 |
- m_priority.frame(pFrame); |
|
90 |
+ m_priority.m_fileOutStream.setFrame(pFrame); |
|
121 | 91 |
|
122 | 92 |
// we have a higher priority than current input |
123 | 93 |
if (m_priority.m_itCurIn == m_priority.m_inList.rend() || |
... | ... |
@@ -11,8 +11,8 @@ |
11 | 11 |
#include <BlinkenLib/BlinkenFrame.h> |
12 | 12 |
|
13 | 13 |
#include "File.h" |
14 |
+#include "InStreamFile.h" |
|
14 | 15 |
#include "Priority.h" |
15 |
-#include "SettingFile.h" |
|
16 | 16 |
#include "StreamMgr.h" |
17 | 17 |
#include "StreamRecv.h" |
18 | 18 |
|
... | ... |
@@ -59,12 +59,6 @@ public: |
59 | 59 |
stBlinkenFrame * getCurFrame(); |
60 | 60 |
|
61 | 61 |
protected: |
62 |
- /// get input stream and attach to it |
|
63 |
- void getInStream(); |
|
64 |
- |
|
65 |
- /// detach from input stream and release it |
|
66 |
- void releaseInStream(); |
|
67 |
- |
|
68 | 62 |
/** |
69 | 63 |
* @brief set current frame |
70 | 64 |
* @param[in] pFrame current frame (NULL for none) |
... | ... |
@@ -74,9 +68,8 @@ protected: |
74 | 68 |
protected: |
75 | 69 |
Priority &m_priority; ///< owning priority based selector |
76 | 70 |
std::string m_name; ///< name of input (i.e. priority) |
77 |
- SettingFile m_fileInStream; ///< input stream name file |
|
71 |
+ InStreamFile m_fileInStream; ///< input stream name file |
|
78 | 72 |
std::string m_nameInStream; ///< name of input stream |
79 |
- Stream *m_pInStream; ///< input stream |
|
80 | 73 |
stBlinkenFrame *m_pFrame; ///< current frame |
81 | 74 |
}; // class Priority::Input |
82 | 75 |
|
... | ... |
@@ -0,0 +1,20 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef PROTOCOLFILE_H |
|
7 |
+#define PROTOCOLFILE_H |
|
8 |
+ |
|
9 |
+#include "Protocol.h" |
|
10 |
+#include "SettingFile_impl.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/// setting file containting a Blinken protocol |
|
15 |
+typedef SettingFile<Protocol> ProtocolFile; |
|
16 |
+ |
|
17 |
+} // namespace Blinker |
|
18 |
+ |
|
19 |
+#endif // #ifndef PROTOCOLFILE_H |
|
20 |
+ |
... | ... |
@@ -13,9 +13,11 @@ |
13 | 13 |
#include "Directory.h" |
14 | 14 |
#include "File.h" |
15 | 15 |
#include "Format.h" |
16 |
+#include "FormatFile.h" |
|
17 |
+#include "InStreamFile.h" |
|
16 | 18 |
#include "Module.h" |
19 |
+#include "OutStreamFile.h" |
|
17 | 20 |
#include "Resizer.h" |
18 |
-#include "SettingFile.h" |
|
19 | 21 |
#include "StreamMgr.h" |
20 | 22 |
#include "StreamRecv.h" |
21 | 23 |
|
... | ... |
@@ -30,42 +32,32 @@ namespace Blinker { |
30 | 32 |
Resizer::Resizer(CallMgr &callMgr, StreamMgr &streamMgr, |
31 | 33 |
const Directory &dirBase): |
32 | 34 |
Module(callMgr, streamMgr, dirBase), |
33 |
- m_fileInStream(dirBase.getFile("instream")), |
|
35 |
+ m_fileInStream(dirBase.getFile("instream"), streamMgr), |
|
34 | 36 |
m_fileFormat(dirBase.getFile("format")), |
35 |
- m_fileOutStream(dirBase.getFile("outstream")), |
|
36 |
- m_pInStream(NULL), |
|
37 |
- m_haveFormat(false), |
|
38 |
- m_pOutStream(NULL) |
|
37 |
+ m_fileOutStream(dirBase.getFile("outstream"), streamMgr) |
|
39 | 38 |
{ |
40 | 39 |
// set up |
41 |
- getInStream(); |
|
42 | 40 |
getFormat(); |
43 |
- getOutStream(); |
|
41 |
+ m_fileInStream.setStreamRecv(this); |
|
44 | 42 |
} |
45 | 43 |
|
46 | 44 |
/// virtual destructor |
47 | 45 |
Resizer::~Resizer() |
48 | 46 |
{ |
49 | 47 |
// clean up |
50 |
- releaseInStream(); |
|
51 |
- releaseOutStream(); |
|
48 |
+ m_fileInStream.setStreamRecv(NULL); |
|
52 | 49 |
} |
53 | 50 |
|
54 | 51 |
/// check for update of configuration |
55 | 52 |
void Resizer::updateConfig() |
56 | 53 |
{ |
57 | 54 |
// stream name or format file was modified -> re-get stream or format |
58 |
- if (m_fileInStream.checkModified()) { |
|
59 |
- releaseInStream(); |
|
60 |
- getInStream(); |
|
61 |
- } |
|
62 |
- if (m_fileFormat.checkModified()) { |
|
55 |
+ if (m_fileInStream.checkModified()) |
|
56 |
+ m_fileInStream.update(); |
|
57 |
+ if (m_fileFormat.checkModified()) |
|
63 | 58 |
getFormat(); |
64 |
- } |
|
65 |
- if (m_fileOutStream.checkModified()) { |
|
66 |
- releaseOutStream(); |
|
67 |
- getOutStream(); |
|
68 |
- } |
|
59 |
+ if (m_fileOutStream.checkModified()) |
|
60 |
+ m_fileOutStream.update(); |
|
69 | 61 |
} |
70 | 62 |
|
71 | 63 |
/** |
... | ... |
@@ -79,76 +71,21 @@ void Resizer::setFrame(const std::string &stream, stBlinkenFrame *pFrame) |
79 | 71 |
(void)stream; // unused |
80 | 72 |
} |
81 | 73 |
|
82 |
-/// get input stream and attach to it |
|
83 |
-void Resizer::getInStream() |
|
84 |
-{ |
|
85 |
- // get input stream |
|
86 |
- m_fileInStream.getStr(m_nameInStream); |
|
87 |
- m_pInStream = &m_streamMgr.refStream(m_nameInStream); |
|
88 |
- |
|
89 |
- // attach to input stream |
|
90 |
- if (m_pInStream) |
|
91 |
- m_pInStream->attach(this); |
|
92 |
-} |
|
93 |
- |
|
94 |
-/// detach from input stream and release it |
|
95 |
-void Resizer::releaseInStream() |
|
96 |
-{ |
|
97 |
- // detach from input stream |
|
98 |
- if (m_pInStream) |
|
99 |
- m_pInStream->detach(this); |
|
100 |
- |
|
101 |
- // unreference stream |
|
102 |
- m_pInStream = NULL; |
|
103 |
- m_streamMgr.unrefStream(m_nameInStream); |
|
104 |
-} |
|
105 |
- |
|
106 | 74 |
/// (re-)get format to resize to |
107 | 75 |
void Resizer::getFormat() |
108 | 76 |
{ |
109 |
- std::string strFormat; |
|
110 |
- |
|
111 | 77 |
// read format from format file |
112 |
- m_haveFormat = m_fileFormat.getStr(strFormat) && m_format.fromStr(strFormat); |
|
113 |
- |
|
114 |
- // send current frame to output stream |
|
115 |
- sendFrame(); |
|
116 |
-} |
|
117 |
- |
|
118 |
-/// get output stream |
|
119 |
-void Resizer::getOutStream() |
|
120 |
-{ |
|
121 |
- // get output stream |
|
122 |
- m_fileOutStream.getStr(m_nameOutStream); |
|
123 |
- m_pOutStream = &m_streamMgr.refStream(m_nameOutStream); |
|
78 |
+ m_fileFormat.update(); |
|
124 | 79 |
|
125 | 80 |
// send current frame to output stream |
126 | 81 |
sendFrame(); |
127 | 82 |
} |
128 | 83 |
|
129 |
-/// release output stream |
|
130 |
-void Resizer::releaseOutStream() |
|
131 |
-{ |
|
132 |
- // send no frame information |
|
133 |
- if (m_pOutStream) |
|
134 |
- m_pOutStream->setFrame(NULL); |
|
135 |
- |
|
136 |
- // unreference stream |
|
137 |
- m_pOutStream = NULL; |
|
138 |
- m_streamMgr.unrefStream(m_nameOutStream); |
|
139 |
-} |
|
140 |
- |
|
141 | 84 |
/// send current frame to output stream |
142 | 85 |
void Resizer::sendFrame() |
143 | 86 |
{ |
144 |
- stBlinkenFrame *pFrame; |
|
145 |
- |
|
146 | 87 |
// get current frame from input stream and process it |
147 |
- if (m_pInStream) |
|
148 |
- pFrame = m_pInStream->getCurFrame(); |
|
149 |
- else |
|
150 |
- pFrame = NULL; |
|
151 |
- procFrame(pFrame); |
|
88 |
+ procFrame(m_fileInStream.getCurFrame()); |
|
152 | 89 |
} |
153 | 90 |
|
154 | 91 |
/** |
... | ... |
@@ -157,40 +94,40 @@ void Resizer::sendFrame() |
157 | 94 |
*/ |
158 | 95 |
void Resizer::procFrame(stBlinkenFrame *pFrame) |
159 | 96 |
{ |
97 |
+ int width, height, channels, maxval; |
|
160 | 98 |
stBlinkenFrame *pProcFrame; |
161 | 99 |
|
162 |
- // no output stream -> nothing to do |
|
163 |
- if (!m_pOutStream) |
|
164 |
- return; |
|
165 |
- |
|
166 | 100 |
// no frame or no format -> pass "no frame" |
167 |
- if (!pFrame || !m_haveFormat) { |
|
168 |
- m_pOutStream->setFrame(NULL); |
|
101 |
+ if (!pFrame || !m_fileFormat.m_valid) { |
|
102 |
+ m_fileOutStream.setFrame(NULL); |
|
169 | 103 |
return; |
170 | 104 |
} |
105 |
+ width = m_fileFormat.m_obj.m_width; |
|
106 |
+ height = m_fileFormat.m_obj.m_height; |
|
107 |
+ channels = m_fileFormat.m_obj.m_channels; |
|
108 |
+ maxval = m_fileFormat.m_obj.m_maxval; |
|
171 | 109 |
|
172 | 110 |
// format matches -> pass frame directly |
173 |
- if ((unsigned int)BlinkenFrameGetWidth(pFrame) == m_format.m_width && |
|
174 |
- (unsigned int)BlinkenFrameGetHeight(pFrame) == m_format.m_height && |
|
175 |
- (unsigned int)BlinkenFrameGetChannels(pFrame) == m_format.m_channels && |
|
176 |
- (unsigned int)BlinkenFrameGetMaxval(pFrame) == m_format.m_maxval) { |
|
177 |
- m_pOutStream->setFrame(pFrame); |
|
111 |
+ if (BlinkenFrameGetWidth(pFrame) == width && |
|
112 |
+ BlinkenFrameGetHeight(pFrame) == height && |
|
113 |
+ BlinkenFrameGetChannels(pFrame) == channels && |
|
114 |
+ BlinkenFrameGetMaxval(pFrame) == maxval) { |
|
115 |
+ m_fileOutStream.setFrame(NULL); |
|
178 | 116 |
return; |
179 | 117 |
} |
180 | 118 |
|
181 | 119 |
// clone frame |
182 | 120 |
pProcFrame = BlinkenFrameClone(pFrame); |
183 | 121 |
if (!pProcFrame){ |
184 |
- m_pOutStream->setFrame(NULL); |
|
122 |
+ m_fileOutStream.setFrame(NULL); |
|
185 | 123 |
return; |
186 | 124 |
} |
187 | 125 |
|
188 | 126 |
// resize frame |
189 |
- BlinkenFrameResize(pProcFrame, m_format.m_height, m_format.m_width, |
|
190 |
- m_format.m_channels, m_format.m_maxval); |
|
127 |
+ BlinkenFrameResize(pProcFrame, height, width, channels, maxval); |
|
191 | 128 |
|
192 | 129 |
// pass process frame to output stream |
193 |
- m_pOutStream->setFrame(pProcFrame); |
|
130 |
+ m_fileOutStream.setFrame(pProcFrame); |
|
194 | 131 |
|
195 | 132 |
// free cloned frame |
196 | 133 |
BlinkenFrameFree(pProcFrame); |
... | ... |
@@ -14,8 +14,10 @@ |
14 | 14 |
#include "Directory.h" |
15 | 15 |
#include "File.h" |
16 | 16 |
#include "Format.h" |
17 |
+#include "FormatFile.h" |
|
18 |
+#include "InStreamFile.h" |
|
17 | 19 |
#include "Module.h" |
18 |
-#include "SettingFile.h" |
|
20 |
+#include "OutStreamFile.h" |
|
19 | 21 |
#include "StreamMgr.h" |
20 | 22 |
#include "StreamRecv.h" |
21 | 23 |
|
... | ... |
@@ -55,21 +57,9 @@ public: |
55 | 57 |
virtual void setFrame(const std::string &stream, stBlinkenFrame *pFrame); |
56 | 58 |
|
57 | 59 |
protected: |
58 |
- /// get input stream and attach to it |
|
59 |
- void getInStream(); |
|
60 |
- |
|
61 |
- /// detach from input stream and release it |
|
62 |
- void releaseInStream(); |
|
63 |
- |
|
64 | 60 |
/// (re-)get format to resize to |
65 | 61 |
void getFormat(); |
66 | 62 |
|
67 |
- /// get output stream |
|
68 |
- void getOutStream(); |
|
69 |
- |
|
70 |
- /// release output stream |
|
71 |
- void releaseOutStream(); |
|
72 |
- |
|
73 | 63 |
/// send current frame to output stream |
74 | 64 |
void sendFrame(); |
75 | 65 |
|
... | ... |
@@ -80,15 +70,9 @@ protected: |
80 | 70 |
void procFrame(stBlinkenFrame *pFrame); |
81 | 71 |
|
82 | 72 |
protected: |
83 |
- SettingFile m_fileInStream; ///< input stream name file |
|
84 |
- SettingFile m_fileFormat; ///< format file |
|
85 |
- SettingFile m_fileOutStream; ///< output stream name file |
|
86 |
- std::string m_nameInStream; ///< name of input stream |
|
87 |
- Stream *m_pInStream; ///< input stream |
|
88 |
- bool m_haveFormat; ///< if the format to resize to is available |
|
89 |
- Format m_format; ///< format to resize to |
|
90 |
- std::string m_nameOutStream; ///< name of output stream |
|
91 |
- Stream *m_pOutStream; ///< output stream |
|
73 |
+ InStreamFile m_fileInStream; ///< input stream name file |
|
74 |
+ FormatFile m_fileFormat; ///< format file |
|
75 |
+ OutStreamFile m_fileOutStream; ///< output stream name file |
|
92 | 76 |
}; // class Resizer |
93 | 77 |
|
94 | 78 |
} // namespace Blinker |
... | ... |
@@ -12,9 +12,10 @@ |
12 | 12 |
#include "CallMgr.h" |
13 | 13 |
#include "Directory.h" |
14 | 14 |
#include "File.h" |
15 |
+#include "InStreamFile.h" |
|
15 | 16 |
#include "Module.h" |
17 |
+#include "OutStreamFile.h" |
|
16 | 18 |
#include "Scaler.h" |
17 |
-#include "SettingFile.h" |
|
18 | 19 |
#include "Size.h" |
19 | 20 |
#include "StreamMgr.h" |
20 | 21 |
#include "StreamRecv.h" |
... | ... |
@@ -30,42 +31,32 @@ namespace Blinker { |
30 | 31 |
Scaler::Scaler(CallMgr &callMgr, StreamMgr &streamMgr, |
31 | 32 |
const Directory &dirBase): |
32 | 33 |
Module(callMgr, streamMgr, dirBase), |
33 |
- m_fileInStream(dirBase.getFile("instream")), |
|
34 |
+ m_fileInStream(dirBase.getFile("instream"), streamMgr), |
|
34 | 35 |
m_fileSize(dirBase.getFile("size")), |
35 |
- m_fileOutStream(dirBase.getFile("outstream")), |
|
36 |
- m_pInStream(NULL), |
|
37 |
- m_haveSize(false), |
|
38 |
- m_pOutStream(NULL) |
|
36 |
+ m_fileOutStream(dirBase.getFile("outstream"), streamMgr) |
|
39 | 37 |
{ |
40 | 38 |
// set up |
41 |
- getInStream(); |
|
42 | 39 |
getSize(); |
43 |
- getOutStream(); |
|
40 |
+ m_fileInStream.setStreamRecv(this); |
|
44 | 41 |
} |
45 | 42 |
|
46 | 43 |
/// virtual destructor |
47 | 44 |
Scaler::~Scaler() |
48 | 45 |
{ |
49 | 46 |
// clean up |
50 |
- releaseInStream(); |
|
51 |
- releaseOutStream(); |
|
47 |
+ m_fileInStream.setStreamRecv(NULL); |
|
52 | 48 |
} |
53 | 49 |
|
54 | 50 |
/// check for update of configuration |
55 | 51 |
void Scaler::updateConfig() |
56 | 52 |
{ |
57 | 53 |
// stream name or size file was modified -> re-get stream or size |
58 |
- if (m_fileInStream.checkModified()) { |
|
59 |
- releaseInStream(); |
|
60 |
- getInStream(); |
|
61 |
- } |
|
62 |
- if (m_fileSize.checkModified()) { |
|
54 |
+ if (m_fileInStream.checkModified()) |
|
55 |
+ m_fileInStream.update(); |
|
56 |
+ if (m_fileSize.checkModified()) |
|
63 | 57 |
getSize(); |
64 |
- } |
|
65 |
- if (m_fileOutStream.checkModified()) { |
|
66 |
- releaseOutStream(); |
|
67 |
- getOutStream(); |
|
68 |
- } |
|
58 |
+ if (m_fileOutStream.checkModified()) |
|
59 |
+ m_fileOutStream.update(); |
|
69 | 60 |
} |
70 | 61 |
|
71 | 62 |
/** |
... | ... |
@@ -79,76 +70,21 @@ void Scaler::setFrame(const std::string &stream, stBlinkenFrame *pFrame) |
79 | 70 |
(void)stream; // unused |
80 | 71 |
} |
81 | 72 |
|
82 |
-/// get input stream and attach to it |
|
83 |
-void Scaler::getInStream() |
|
84 |
-{ |
|
85 |
- // get input stream |
|
86 |
- m_fileInStream.getStr(m_nameInStream); |
|
87 |
- m_pInStream = &m_streamMgr.refStream(m_nameInStream); |
|
88 |
- |
|
89 |
- // attach to input stream |
|
90 |
- if (m_pInStream) |
|
91 |
- m_pInStream->attach(this); |
|
92 |
-} |
|
93 |
- |
|
94 |
-/// detach from input stream and release it |
|
95 |
-void Scaler::releaseInStream() |
|
96 |
-{ |
|
97 |
- // detach from input stream |
|
98 |
- if (m_pInStream) |
|
99 |
- m_pInStream->detach(this); |
|
100 |
- |
|
101 |
- // unreference stream |
|
102 |
- m_pInStream = NULL; |
|
103 |
- m_streamMgr.unrefStream(m_nameInStream); |
|
104 |
-} |
|
105 |
- |
|
106 | 73 |
/// (re-)get size to scale to |
107 | 74 |
void Scaler::getSize() |
108 | 75 |
{ |
109 |
- std::string strSize; |
|
110 |
- |
|
111 | 76 |
// read size from size file |
112 |
- m_haveSize = m_fileSize.getStr(strSize) && m_size.fromStr(strSize); |
|
113 |
- |
|
114 |
- // send current frame to output stream |
|
115 |
- sendFrame(); |
|
116 |
-} |
|
117 |
- |
|
118 |
-/// get output stream |
|
119 |
-void Scaler::getOutStream() |
|
120 |
-{ |
|
121 |
- // get output stream |
|
122 |
- m_fileOutStream.getStr(m_nameOutStream); |
|
123 |
- m_pOutStream = &m_streamMgr.refStream(m_nameOutStream); |
|
77 |
+ m_fileSize.update(); |
|
124 | 78 |
|
125 | 79 |
// send current frame to output stream |
126 | 80 |
sendFrame(); |
127 | 81 |
} |
128 | 82 |
|
129 |
-/// release output stream |
|
130 |
-void Scaler::releaseOutStream() |
|
131 |
-{ |
|
132 |
- // send no frame information |
|
133 |
- if (m_pOutStream) |
|
134 |
- m_pOutStream->setFrame(NULL); |
|
135 |
- |
|
136 |
- // unreference stream |
|
137 |
- m_pOutStream = NULL; |
|
138 |
- m_streamMgr.unrefStream(m_nameOutStream); |
|
139 |
-} |
|
140 |
- |
|
141 | 83 |
/// send current frame to output stream |
142 | 84 |
void Scaler::sendFrame() |
143 | 85 |
{ |
144 |
- stBlinkenFrame *pFrame; |
|
145 |
- |
|
146 | 86 |
// get current frame from input stream and process it |
147 |
- if (m_pInStream) |
|
148 |
- pFrame = m_pInStream->getCurFrame(); |
|
149 |
- else |
|
150 |
- pFrame = NULL; |
|
151 |
- procFrame(pFrame); |
|
87 |
+ procFrame(m_fileInStream.getCurFrame()); |
|
152 | 88 |
} |
153 | 89 |
|
154 | 90 |
/** |
... | ... |
@@ -157,37 +93,36 @@ void Scaler::sendFrame() |
157 | 93 |
*/ |
158 | 94 |
void Scaler::procFrame(stBlinkenFrame *pFrame) |
159 | 95 |
{ |
96 |
+ int width, height; |
|
160 | 97 |
stBlinkenFrame *pProcFrame; |
161 | 98 |
|
162 |
- // no output stream -> nothing to do |
|
163 |
- if (!m_pOutStream) |
|
164 |
- return; |
|
165 |
- |
|
166 | 99 |
// no frame or no size -> pass "no frame" |
167 |
- if (!pFrame || !m_haveSize) { |
|
168 |
- m_pOutStream->setFrame(NULL); |
|
100 |
+ if (!pFrame || !m_fileSize.m_valid) { |
|
101 |
+ m_fileOutStream.setFrame(NULL); |
|
169 | 102 |
return; |
170 | 103 |
} |
104 |
+ width = m_fileSize.m_obj.m_width; |
|
105 |
+ height = m_fileSize.m_obj.m_height; |
|
171 | 106 |
|
172 | 107 |
// size matches -> pass frame directly |
173 |
- if ((unsigned int)BlinkenFrameGetWidth(pFrame) == m_size.m_width && |
|
174 |
- (unsigned int)BlinkenFrameGetHeight(pFrame) == m_size.m_height) { |
|
175 |
- m_pOutStream->setFrame(pFrame); |
|
108 |
+ if (BlinkenFrameGetWidth(pFrame) == width && |
|
109 |
+ BlinkenFrameGetHeight(pFrame) == height ) { |
|
110 |
+ m_fileOutStream.setFrame(pFrame); |
|
176 | 111 |
return; |
177 | 112 |
} |
178 | 113 |
|
179 | 114 |
// clone frame |
180 | 115 |
pProcFrame = BlinkenFrameClone(pFrame); |
181 | 116 |
if (!pProcFrame) { |
182 |
- m_pOutStream->setFrame(NULL); |
|
117 |
+ m_fileOutStream.setFrame(NULL); |
|
183 | 118 |
return; |
184 | 119 |
} |
185 | 120 |
|
186 | 121 |
// scale frame |
187 |
- BlinkenFrameScale(pProcFrame, m_size.m_height, m_size.m_width); |
|
122 |
+ BlinkenFrameScale(pProcFrame, height, width); |
|
188 | 123 |
|
189 | 124 |
// pass process frame to output stream |
190 |
- m_pOutStream->setFrame(pProcFrame); |
|
125 |
+ m_fileOutStream.setFrame(pProcFrame); |
|
191 | 126 |
|
192 | 127 |
// free cloned frame |
193 | 128 |
BlinkenFrameFree(pProcFrame); |
... | ... |
@@ -13,9 +13,11 @@ |
13 | 13 |
#include "CallMgr.h" |
14 | 14 |
#include "Directory.h" |
15 | 15 |
#include "File.h" |
16 |
+#include "InStreamFile.h" |
|
16 | 17 |
#include "Module.h" |
17 |
-#include "SettingFile.h" |
|
18 |
+#include "OutStreamFile.h" |
|
18 | 19 |
#include "Size.h" |
20 |
+#include "SizeFile.h" |
|
19 | 21 |
#include "StreamMgr.h" |
20 | 22 |
#include "StreamRecv.h" |
21 | 23 |
|
... | ... |
@@ -55,21 +57,9 @@ public: |
55 | 57 |
virtual void setFrame(const std::string &stream, stBlinkenFrame *pFrame); |
56 | 58 |
|
57 | 59 |
protected: |
58 |
- /// get input stream and attach to it |
|
59 |
- void getInStream(); |
|
60 |
- |
|
61 |
- /// detach from input stream and release it |
|
62 |
- void releaseInStream(); |
|
63 |
- |
|
64 | 60 |
/// (re-)get size to scale to |
65 | 61 |
void getSize(); |
66 | 62 |
|
67 |
- /// get output stream |
|
68 |
- void getOutStream(); |
|
69 |
- |
|
70 |
- /// release output stream |
|
71 |
- void releaseOutStream(); |
|
72 |
- |
|
73 | 63 |
/// send current frame to output stream |
74 | 64 |
void sendFrame(); |
75 | 65 |
|
... | ... |
@@ -80,15 +70,9 @@ protected: |
80 | 70 |
void procFrame(stBlinkenFrame *pFrame); |
81 | 71 |
|
82 | 72 |
protected: |
83 |
- SettingFile m_fileInStream; ///< input stream name file |
|
84 |
- SettingFile m_fileSize; ///< size file |
|
85 |
- SettingFile m_fileOutStream; ///< output stream name file |
|
86 |
- std::string m_nameInStream; ///< name of input stream |
|
87 |
- Stream *m_pInStream; ///< input stream |
|
88 |
- bool m_haveSize; ///< if the size to scale to is available |
|
89 |
- Size m_size; ///< size to scale to |
|
90 |
- std::string m_nameOutStream; ///< name of output stream |
|
91 |
- Stream *m_pOutStream; ///< output stream |
|
73 |
+ InStreamFile m_fileInStream; ///< input stream name file |
|
74 |
+ SizeFile m_fileSize; ///< size file |
|
75 |
+ OutStreamFile m_fileOutStream; ///< output stream name file |
|
92 | 76 |
}; // class Scaler |
93 | 77 |
|
94 | 78 |
} // namespace Blinker |
... | ... |
@@ -16,9 +16,11 @@ |
16 | 16 |
#include "CallMgr.h" |
17 | 17 |
#include "Directory.h" |
18 | 18 |
#include "File.h" |
19 |
+#include "InStreamFile.h" |
|
19 | 20 |
#include "IoCallee.h" |
20 | 21 |
#include "Module.h" |
21 | 22 |
#include "Protocol.h" |
23 |
+#include "ProtocolFile.h" |
|
22 | 24 |
#include "SettingFile.h" |
23 | 25 |
#include "StreamMgr.h" |
24 | 26 |
#include "StreamRecv.h" |
... | ... |
@@ -33,6 +35,9 @@ class Sender: public IoCallee, public Module, public StreamRecv, |
33 | 35 |
public TimeCallee |
34 | 36 |
{ |
35 | 37 |
protected: |
38 |
+ /// type for address setting file |
|
39 |
+ typedef SettingFile<ADDR> AddrFile; |
|
40 |
+ |
|
36 | 41 |
/// static destination |
37 | 42 |
class Dest; |
38 | 43 |
|
... | ... |
@@ -98,12 +103,6 @@ protected: |
98 | 103 |
/// (re-)read protocol |
99 | 104 |
void readProto(); |
100 | 105 |
|
101 |
- /// get input stream and attach to it |
|
102 |
- void getInStream(); |
|
103 |
- |
|
104 |
- /// detach from input stream and release it |
|
105 |
- void releaseInStream(); |
|
106 |
- |
|
107 | 106 |
/// create socket and bind it |
108 | 107 |
void createSock(); |
109 | 108 |
|
... | ... |
@@ -155,15 +154,11 @@ protected: |
155 | 154 |
void receiveFromSock(); |
156 | 155 |
|
157 | 156 |
protected: |
158 |
- SettingFile m_fileInStream; ///< input stream name file |
|
159 |
- SettingFile m_fileBind; ///< bind address file |
|
160 |
- SettingFile m_fileProtocol; ///< protocol file |
|
157 |
+ InStreamFile m_fileInStream; ///< input stream name file |
|
158 |
+ AddrFile m_fileBind; ///< bind address file |
|
159 |
+ ProtocolFile m_fileProtocol; ///< protocol file |
|
161 | 160 |
Directory m_dirDests; ///< static destinations directory |
162 |
- std::string m_nameInStream; ///< name of input stream |
|
163 |
- Stream *m_pInStream; ///< input stream |
|
164 | 161 |
SOCK *m_pSock; ///< socket to use for sending streams |
165 |
- Protocol m_protocol; ///< protocol |
|
166 |
- bool m_haveProtocol; ///< if protocol is known |
|
167 | 162 |
DestList m_destList; ///< static destinations |
168 | 163 |
DynDests m_dynDests; ///< dynamic destinations |
169 | 164 |
std::string m_noFrameData; ///< "no frame" protocol data (empty if unknown) |
... | ... |
@@ -63,9 +63,7 @@ protected: |
63 | 63 |
|
64 | 64 |
protected: |
65 | 65 |
Sender &m_sender; ///< owning sender object |
66 |
- SettingFile m_fileAddr; ///< address file |
|
67 |
- ADDR m_addr; ///< address |
|
68 |
- bool m_haveAddr; ///< if address is available |
|
66 |
+ AddrFile m_fileAddr; ///< address file |
|
69 | 67 |
const std::string *m_pNoFrameData; ///< protocol data for "no frame" packet |
70 | 68 |
const std::string *m_pData; ///< protocol data to send to address |
71 | 69 |
}; // class Sender<ADDr, SOCK>::Dest |
... | ... |
@@ -29,7 +29,6 @@ Sender<ADDR, SOCK>::Dest::Dest(Sender &sender, const Directory &dirBase, |
29 | 29 |
const std::string *pNoFrameData): |
30 | 30 |
m_sender(sender), |
31 | 31 |
m_fileAddr(dirBase.getFile("addr")), |
32 |
- m_haveAddr(false), |
|
33 | 32 |
m_pNoFrameData(pNoFrameData), |
34 | 33 |
m_pData(pNoFrameData) |
35 | 34 |
{ |
... | ... |
@@ -77,8 +76,8 @@ void Sender<ADDR, SOCK>::Dest::getAddr() |
77 | 76 |
// send "no frame" protocol data to old address |
78 | 77 |
send(m_pNoFrameData); |
79 | 78 |
|
80 |
- // parse new address from file |
|
81 |
- m_haveAddr = m_fileAddr.getStr(strAddr) && m_addr.fromStr(strAddr); |
|
79 |
+ // get new address from file |
|
80 |
+ m_fileAddr.update(); |
|
82 | 81 |
|
83 | 82 |
// send current protocol data to new address |
84 | 83 |
send(m_pData); |
... | ... |
@@ -91,8 +90,8 @@ void Sender<ADDR, SOCK>::Dest::getAddr() |
91 | 90 |
template<typename ADDR, typename SOCK> |
92 | 91 |
void Sender<ADDR, SOCK>::Dest::send(const std::string *pData) |
93 | 92 |
{ |
94 |
- if (m_sender.m_pSock && m_haveAddr && !pData->empty()) |
|
95 |
- m_sender.m_pSock->send(*pData, m_addr); |
|
93 |
+ if (m_sender.m_pSock && m_fileAddr.m_valid && !pData->empty()) |
|
94 |
+ m_sender.m_pSock->send(*pData, m_fileAddr.m_obj); |
|
96 | 95 |
} |
97 | 96 |
|
98 | 97 |
} // namespace Blinker |
... | ... |
@@ -16,9 +16,11 @@ |
16 | 16 |
#include "CallMgr.h" |
17 | 17 |
#include "Directory.h" |
18 | 18 |
#include "File.h" |
19 |
+#include "InStreamFile.h" |
|
19 | 20 |
#include "IoCallee.h" |
20 | 21 |
#include "Module.h" |
21 | 22 |
#include "Protocol.h" |
23 |
+#include "ProtocolFile.h" |
|
22 | 24 |
#include "Sender.h" |
23 | 25 |
#include "SenderDest.h" |
24 | 26 |
#include "SenderDest_impl.h" |
... | ... |
@@ -40,19 +42,17 @@ template<typename ADDR, typename SOCK> |
40 | 42 |
Sender<ADDR, SOCK>::Sender(CallMgr &callMgr, StreamMgr &streamMgr, |
41 | 43 |
const Directory &dirBase): |
42 | 44 |
Module(callMgr, streamMgr, dirBase), |
43 |
- m_fileInStream(dirBase.getFile("instream")), |
|
45 |
+ m_fileInStream(dirBase.getFile("instream"), streamMgr), |
|
44 | 46 |
m_fileBind(dirBase.getFile("bind")), |
45 | 47 |
m_fileProtocol(dirBase.getFile("protocol")), |
46 | 48 |
m_dirDests(dirBase.getSubdir("destinations")), |
47 |
- m_pInStream(NULL), |
|
48 |
- m_pSock(NULL), |
|
49 |
- m_haveProtocol(false) |
|
49 |
+ m_pSock(NULL) |
|
50 | 50 |
{ |
51 | 51 |
// read protocol |
52 | 52 |
readProto(); |
53 | 53 |
|
54 |
- // get input stream and attach to it |
|
55 |
- getInStream(); |
|
54 |
+ // attac to input stream |
|
55 |
+ m_fileInStream.setStreamRecv(this); |
|
56 | 56 |
// create and bind socket |
57 | 57 |
createSock(); |
58 | 58 |
|
... | ... |
@@ -75,8 +75,8 @@ Sender<ADDR, SOCK>::~Sender() |
75 | 75 |
|
76 | 76 |
// destroy socket |
77 | 77 |
destroySock(); |
78 |
- // detach from input stream and release it |
|
79 |
- releaseInStream(); |
|
78 |
+ // detach from input stream |
|
79 |
+ m_fileInStream.setStreamRecv(NULL); |
|
80 | 80 |
// cancel time callback |
81 | 81 |
m_callMgr.cancelTimeCall(this); |
82 | 82 |
} |
... | ... |
@@ -86,10 +86,8 @@ template<typename ADDR, typename SOCK> |
86 | 86 |
void Sender<ADDR, SOCK>::updateConfig() |
87 | 87 |
{ |
88 | 88 |
// input stream name file was modified -> re-get input stream |
89 |
- if (m_fileInStream.checkModified()) { |
|
90 |
- releaseInStream(); |
|
91 |
- getInStream(); |
|
92 |
- } |
|
89 |
+ if (m_fileInStream.checkModified()) |
|
90 |
+ m_fileInStream.update(); |
|
93 | 91 |
|
94 | 92 |
// bind address file was modified -> re-create socket |
95 | 93 |
if (m_fileBind.checkModified()) { |
... | ... |
@@ -161,8 +159,6 @@ void Sender<ADDR, SOCK>::ioWriteCall(Io *io) |
161 | 159 |
template<typename ADDR, typename SOCK> |
162 | 160 |
void Sender<ADDR, SOCK>::readProto() |
163 | 161 |
{ |
164 |
- std::string strProto; |
|
165 |
- |
|
166 | 162 |
// send "no frame" to all destinations |
167 | 163 |
// (stream with old protocol will stop now) |
168 | 164 |
sendAllNoFrame(); |
... | ... |
@@ -176,55 +172,20 @@ void Sender<ADDR, SOCK>::readProto() |
176 | 172 |
m_data.clear(); |
177 | 173 |
|
178 | 174 |
// read new protocol from file |
179 |
- m_haveProtocol = m_fileProtocol.getStr(strProto) && |
|
180 |
- m_protocol.fromStr(strProto); |
|
175 |
+ m_fileProtocol.update(); |
|
181 | 176 |
|
182 | 177 |
// create new no frame protocol data and new protocol data |
183 |
- if (m_haveProtocol) { |
|
184 | 178 |
frame2data(NULL, m_noFrameData); |
185 |
- if (m_pInStream) |
|
186 |
- frame2data(m_pInStream->getCurFrame(), m_data); |
|
187 |
- else |
|
188 |
- frame2data(NULL, m_data); |
|
189 |
- } |
|
179 |
+ frame2data(m_fileInStream.getCurFrame(), m_data); |
|
190 | 180 |
|
191 | 181 |
// send current protocol data to all destinations |
192 | 182 |
sendAllProto(); |
193 | 183 |
} |
194 | 184 |
|
195 |
-/// get input stream and attach to it |
|
196 |
-template<typename ADDR, typename SOCK> |
|
197 |
-void Sender<ADDR, SOCK>::getInStream() |
|
198 |
-{ |
|
199 |
- // get input stream |
|
200 |
- m_fileInStream.getStr(m_nameInStream); |
|
201 |
- m_pInStream = &m_streamMgr.refStream(m_nameInStream); |
|
202 |
- |
|
203 |
- // attach to input stream |
|
204 |
- if (m_pInStream) |
|
205 |
- m_pInStream->attach(this); |
|
206 |
-} |
|
207 |
- |
|
208 |
-/// detach from input stream and release it |
|
209 |
-template<typename ADDR, typename SOCK> |
|
210 |
-void Sender<ADDR, SOCK>::releaseInStream() |
|
211 |
-{ |
|
212 |
- // detach from input stream |
|
213 |
- if (m_pInStream) |
|
214 |
- m_pInStream->detach(this); |
|
215 |
- |
|
216 |
- // unreference stream |
|
217 |
- m_pInStream = NULL; |
|
218 |
- m_streamMgr.unrefStream(m_nameInStream); |
|
219 |
-} |
|
220 |
- |
|
221 | 185 |
/// create socket and bind it |
222 | 186 |
template<typename ADDR, typename SOCK> |
223 | 187 |
void Sender<ADDR, SOCK>::createSock() |
224 | 188 |
{ |
225 |
- std::string strAddr; |
|
226 |
- ADDR addr; |
|
227 |
- |
|
228 | 189 |
// create socket |
229 | 190 |
if (!m_pSock) { |
230 | 191 |
m_pSock = new SOCK(); |
... | ... |
@@ -233,14 +194,15 @@ void Sender<ADDR, SOCK>::createSock() |
233 | 194 |
} |
234 | 195 |
|
235 | 196 |
// get bind address from bind address setting file |
236 |
- if (!m_fileBind.getStr(strAddr) || !addr.fromStr(strAddr)) { |
|
197 |
+ m_fileBind.update(); |
|
198 |
+ if (!m_fileBind.m_valid) { |
|
237 | 199 |
delete m_pSock; |
238 | 200 |
m_pSock = NULL; |
239 | 201 |
return; |
240 | 202 |
} |
241 | 203 |
|
242 | 204 |
// bind socket |
243 |
- if (!m_pSock->bind(addr)) { |
|
205 |
+ if (!m_pSock->bind(m_fileBind.m_obj)) { |
|
244 | 206 |
delete m_pSock; |
245 | 207 |
m_pSock = NULL; |
246 | 208 |
return; |
... | ... |
@@ -424,20 +386,22 @@ template<typename ADDR, typename SOCK> |
424 | 386 |
void Sender<ADDR, SOCK>::frame2data(stBlinkenFrame *pFrame, |
425 | 387 |
std::string &data) const |
426 | 388 |
{ |
389 |
+ etBlinkenProto proto; |
|
427 | 390 |
char buf[65536]; |
428 | 391 |
int len; |
429 | 392 |
|
430 | 393 |
// no protocol -> leave with empty data |
431 |
- if (!m_haveProtocol) { |
|
394 |
+ if (!m_fileProtocol.m_valid) { |
|
432 | 395 |
data.clear(); |
433 | 396 |
return; |
434 | 397 |
} |
398 |
+ proto = m_fileProtocol.m_obj.m_proto; |
|
435 | 399 |
|
436 | 400 |
// convert frame to protcol data |
437 | 401 |
if (pFrame) |
438 |
- len = BlinkenFrameToNetwork(pFrame, m_protocol.m_proto, buf, sizeof(buf)); |
|
402 |
+ len = BlinkenFrameToNetwork(pFrame, proto, buf, sizeof(buf)); |
|
439 | 403 |
else |
440 |
- len = BlinkenProtoMakePacket(m_protocol.m_proto, BlinkenPacketStreamEnd, |
|
404 |
+ len = BlinkenProtoMakePacket(proto, BlinkenPacketStreamEnd, |
|
441 | 405 |
buf, sizeof(buf)); |
442 | 406 |
if (len < 0) |
443 | 407 |
len = 0; |
... | ... |
@@ -464,7 +428,7 @@ void Sender<ADDR, SOCK>::receiveFromSock() |
464 | 428 |
// detect packet type and protocol |
465 | 429 |
BlinkenProtoDetectPacket(data.c_str(), data.size(), &proto, &packet); |
466 | 430 |
|
467 |
- if (m_haveProtocol && proto == m_protocol.m_proto) { |
|
431 |
+ if (m_fileProtocol.m_valid && proto == m_fileProtocol.m_obj.m_proto) { |
|
468 | 432 |
switch (packet) { |
469 | 433 |
|
470 | 434 |
// request -> add to dynamic destinations and send current frame |
... | ... |
@@ -482,7 +446,7 @@ void Sender<ADDR, SOCK>::receiveFromSock() |
482 | 446 |
break; |
483 | 447 |
|
484 | 448 |
} // switch (packet) |
485 |
- } // if (m_haveProtocol ... |
|
449 |
+ } // if (m_fileProtocol.m_valid ... |
|
486 | 450 |
|
487 | 451 |
} |
488 | 452 |
|
... | ... |
@@ -13,6 +13,7 @@ |
13 | 13 |
namespace Blinker { |
14 | 14 |
|
15 | 15 |
/// file containting a single setting |
16 |
+template<typename TYPE> |
|
16 | 17 |
class SettingFile: public File |
17 | 18 |
{ |
18 | 19 |
public: |
... | ... |
@@ -35,13 +36,20 @@ public: |
35 | 36 |
const SettingFile & operator=(const File &file); |
36 | 37 |
|
37 | 38 |
public: |
39 |
+ /// update, i.e. (re-)read file |
|
40 |
+ void update(); |
|
41 |
+ |
|
42 |
+protected: |
|
38 | 43 |
/** |
39 | 44 |
* @brief get setting as string |
40 | 45 |
* @param[out] val setting read from file |
41 |
- * @param[in] def default setting (to return on error) |
|
42 | 46 |
* @return if setting was successfully read from file |
43 | 47 |
*/ |
44 |
- bool getStr(std::string& val, const std::string& def = "") const; |
|
48 |
+ bool getStr(std::string& val) const; |
|
49 |
+ |
|
50 |
+public: |
|
51 |
+ TYPE m_obj; ///< setting object read from file |
|
52 |
+ bool m_valid; ///< if setting object could be read and parsed |
|
45 | 53 |
}; // class SettingFile |
46 | 54 |
|
47 | 55 |
} // namespace Blinker |
... | ... |
@@ -3,6 +3,9 @@ |
3 | 3 |
Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
4 | 4 |
a blinkenarea.org project */ |
5 | 5 |
|
6 |
+#ifndef SETTINGFILE_IMPL_H |
|
7 |
+#define SETTINGFILE_IMPL_H |
|
8 |
+ |
|
6 | 9 |
#include <fstream> |
7 | 10 |
#include <string> |
8 | 11 |
|
... | ... |
@@ -15,50 +18,60 @@ namespace Blinker { |
15 | 18 |
* @brief constructor from path |
16 | 19 |
* @param[in] path path to file |
17 | 20 |
*/ |
18 |
-SettingFile::SettingFile(const std::string &path): |
|
21 |
+template<typename TYPE> |
|
22 |
+SettingFile<TYPE>::SettingFile(const std::string &path): |
|
19 | 23 |
File(path) |
20 | 24 |
{ |
25 |
+ update(); |
|
21 | 26 |
} |
22 | 27 |
|
23 | 28 |
/** |
24 | 29 |
* @brief constructor from basic file |
25 | 30 |
* @param[in] file basic file object |
26 | 31 |
*/ |
27 |
-SettingFile::SettingFile(const File &file): |
|
32 |
+template<typename TYPE> |
|
33 |
+SettingFile<TYPE>::SettingFile(const File &file): |
|
28 | 34 |
File(file) |
29 | 35 |
{ |
36 |
+ update(); |
|
30 | 37 |
} |
31 | 38 |
|
32 | 39 |
/** |
33 | 40 |
* @brief assignment operator |
34 | 41 |
* @param[in] file basic file object |
35 | 42 |
*/ |
36 |
-const SettingFile & SettingFile::operator=(const File &file) |
|
43 |
+template<typename TYPE> |
|
44 |
+const SettingFile<TYPE> & SettingFile<TYPE>::operator=(const File &file) |
|
37 | 45 |
{ |
38 | 46 |
File::operator=(file); |
47 |
+ update(); |
|
39 | 48 |
return *this; |
40 | 49 |
} |
41 | 50 |
|
51 |
+/// update, i.e. (re-)read file |
|
52 |
+template<typename TYPE> |
|
53 |
+void SettingFile<TYPE>::update() |
|
54 |
+{ |
|
55 |
+ std::string strSize; |
|
56 |
+ |
|
57 |
+ m_valid = getStr(strSize) && m_obj.fromStr(strSize); |
|
58 |
+} |
|
59 |
+ |
|
42 | 60 |
/** |
43 | 61 |
* @brief get setting as string |
44 | 62 |
* @param[out] val setting read from file |
45 |
- * @param[in] def default setting (to return on error) |
|
46 | 63 |
* @return if setting was successfully read from file |
47 | 64 |
*/ |
48 |
-bool SettingFile::getStr(std::string &val, |
|
49 |
- const std::string &def /*= ""*/) const |
|
65 |
+template<typename TYPE> |
|
66 |
+bool SettingFile<TYPE>::getStr(std::string &val) const |
|
50 | 67 |
{ |
51 | 68 |
std::ifstream ifstrm(m_path.c_str(), std::ios::in); |
52 |
- if (!ifstrm.is_open()) { |
|
53 |
- val = def; |
|
69 |
+ if (!ifstrm.is_open()) |
|
54 | 70 |
return false; |
55 |
- } |
|
56 | 71 |
|
57 | 72 |
std::getline(ifstrm, val); |
58 |
- if (ifstrm.fail()) { |
|
59 |
- val = def; |
|
73 |
+ if (ifstrm.fail()) |
|
60 | 74 |
return false; |
61 |
- } |
|
62 | 75 |
|
63 | 76 |
ifstrm.close(); |
64 | 77 |
|
... | ... |
@@ -67,3 +80,5 @@ bool SettingFile::getStr(std::string &val, |
67 | 80 |
|
68 | 81 |
} // namespace Blinker |
69 | 82 |
|
83 |
+#endif // #ifndef SETTINGFILE_IMPL_H |
|
84 |
+ |
... | ... |
@@ -0,0 +1,20 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef SIZEFILE_H |
|
7 |
+#define SIZEFILE_H |
|
8 |
+ |
|
9 |
+#include "SettingFile_impl.h" |
|
10 |
+#include "Size.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/// setting file containting frame size |
|
15 |
+typedef SettingFile<Size> SizeFile; |
|
16 |
+ |
|
17 |
+} // namespace Blinker |
|
18 |
+ |
|
19 |
+#endif // #ifndef SIZEFILE_H |
|
20 |
+ |
... | ... |
@@ -0,0 +1,83 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#include "File.h" |
|
7 |
+#include "NameFile.h" |
|
8 |
+#include "Stream.h" |
|
9 |
+#include "StreamFile.h" |
|
10 |
+#include "StreamMgr.h" |
|
11 |
+ |
|
12 |
+namespace Blinker { |
|
13 |
+ |
|
14 |
+/** |
|
15 |
+ * @brief constructor from path |
|
16 |
+ * @param[in] path path to file |
|
17 |
+ * @param[in] streamMgr stream manager |
|
18 |
+ */ |
|
19 |
+StreamFile::StreamFile(const std::string &path, StreamMgr &streamMgr): |
|
20 |
+ NameFile(path), |
|
21 |
+ m_streamMgr(streamMgr), |
|
22 |
+ m_pStream(NULL) |
|
23 |
+{ |
|
24 |
+ update(); |
|
25 |
+} |
|
26 |
+ |
|
27 |
+/** |
|
28 |
+ * @brief constructor from basic file |
|
29 |
+ * @param[in] file basic file object |
|
30 |
+ * @param[in] streamMgr stream manager |
|
31 |
+ */ |
|
32 |
+StreamFile::StreamFile(const File &file, StreamMgr &streamMgr): |
|
33 |
+ NameFile(file), |
|
34 |
+ m_streamMgr(streamMgr), |
|
35 |
+ m_pStream(NULL) |
|
36 |
+{ |
|
37 |
+ update(); |
|
38 |
+} |
|
39 |
+ |
|
40 |
+/// destructor |
|
41 |
+StreamFile::~StreamFile() |
|
42 |
+{ |
|
43 |
+ unref(); |
|
44 |
+} |
|
45 |
+ |
|
46 |
+/** |
|
47 |
+ * @brief assignment operator |
|
48 |
+ * @param[in] file basic file object |
|
49 |
+ */ |
|
50 |
+const StreamFile & StreamFile::operator=(const File &file) |
|
51 |
+{ |
|
52 |
+ unref(); |
|
53 |
+ NameFile::operator=(file); |
|
54 |
+ ref(); |
|
55 |
+ return *this; |
|
56 |
+} |
|
57 |
+ |
|
58 |
+/// update, i.e. (re-)read file and reference new stream |
|
59 |
+void StreamFile::update() |
|
60 |
+{ |
|
61 |
+ unref(); |
|
62 |
+ NameFile::update(); |
|
63 |
+ ref(); |
|
64 |
+} |
|
65 |
+ |
|
66 |
+/// unreference stream |
|
67 |
+void StreamFile::unref() |
|
68 |
+{ |
|
69 |
+ if (m_pStream) { |
|
70 |
+ m_streamMgr.unrefStream(m_obj.m_str); |
|
71 |
+ m_pStream = NULL; |
|
72 |
+ } |
|
73 |
+} |
|
74 |
+ |
|
75 |
+/// reference stream |
|
76 |
+void StreamFile::ref() |
|
77 |
+{ |
|
78 |
+ if (m_valid) |
|
79 |
+ m_pStream = &m_streamMgr.refStream(m_obj.m_str); |
|
80 |
+} |
|
81 |
+ |
|
82 |
+} // namespace Blinker |
|
83 |
+ |
... | ... |
@@ -0,0 +1,62 @@ |
1 |
+/* Blinker |
|
2 |
+ Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org> |
|
3 |
+ Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html |
|
4 |
+ a blinkenarea.org project */ |
|
5 |
+ |
|
6 |
+#ifndef STREAMFILE_H |
|
7 |
+#define STREAMFILE_H |
|
8 |
+ |
|
9 |
+#include "File.h" |
|
10 |
+#include "NameFile.h" |
|
11 |
+#include "Stream.h" |
|
12 |
+#include "StreamMgr.h" |
|
13 |
+ |
|
14 |
+namespace Blinker { |
|
15 |
+ |
|
16 |
+/// setting file containting a name of a stream |
|
17 |
+class StreamFile: public NameFile |
|
18 |
+{ |
|
19 |
+public: |
|
20 |
+ /** |
|
21 |
+ * @brief constructor from path |
|
22 |
+ * @param[in] path path to file |
|
23 |
+ * @param[in] streamMgr stream manager |
|
24 |
+ */ |
|
25 |
+ StreamFile(const std::string &path, StreamMgr &streamMgr); |
|
26 |
+ |
|
27 |
+ /** |
|
28 |
+ * @brief constructor from basic file |
|
29 |
+ * @param[in] file basic file object |
|
30 |
+ * @param[in] streamMgr stream manager |
|
31 |
+ */ |
|
32 |
+ StreamFile(const File &file, StreamMgr &streamMgr); |
|
33 |
+ |
|
34 |
+ /// destructor |
|
35 |
+ ~StreamFile(); |
|
36 |
+ |
|
37 |
+ /** |
|
38 |
+ * @brief assignment operator |
|
39 |
+ * @param[in] file basic file object |
|
40 |
+ */ |
|
41 |
+ const StreamFile & operator=(const File &file); |
|
42 |
+ |
|
43 |
+public: |
|
44 |
+ /// update, i.e. (re-)read file and reference new stream |
|
45 |
+ void update(); |
|
46 |
+ |
|
47 |
+protected: |
|
48 |
+ /// unreference stream |
|
49 |
+ void unref(); |
|
50 |
+ |
|
51 |
+ /// reference stream |
|
52 |
+ void ref(); |
|
53 |
+ |
|
54 |
+protected: |
|
55 |
+ StreamMgr &m_streamMgr; ///< stream manager |
|
56 |
+ Stream *m_pStream; ///< stream |
|
57 |
+}; // class StreamFile |
|
58 |
+ |
|
59 |
+} // namespace Blinker |
|
60 |
+ |
|
61 |
+#endif // #ifndef STREAMFILE_H |
|
62 |
+ |
|
0 | 63 |