Stefan Schuermans commited on 2011-12-04 20:10:37
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 |