1 | /// purpose: Dbite Player Stereo Manager implementation
|
---|
2 | ///
|
---|
3 | /// created @date 2008/01/19 - 21:23
|
---|
4 | /// @author Sergio Rodriguez
|
---|
5 | /// @version $Id: $
|
---|
6 |
|
---|
7 | #include "DbtPlyStereoManager.h"
|
---|
8 |
|
---|
9 | #include <iostream>
|
---|
10 |
|
---|
11 | #include "Pacpus/kernel/ComponentManager.h"
|
---|
12 | #include "Pacpus/kernel/DbiteFileTypes.h"
|
---|
13 | #include "Pacpus/kernel/Log.h"
|
---|
14 |
|
---|
15 | namespace pacpus {
|
---|
16 |
|
---|
17 | using namespace std;
|
---|
18 |
|
---|
19 | DECLARE_STATIC_LOGGER("pacpus.base.DbtPlyStereoManager");
|
---|
20 |
|
---|
21 | /// Construction de la fabrique de composant DbtPlyStereoManager
|
---|
22 | static ComponentFactory<DbtPlyStereoManager> sFactory("DbtPlyStereoManager");
|
---|
23 |
|
---|
24 | DbtPlyStereoManager::DbtPlyStereoManager(QString name)
|
---|
25 | : DbtPlyFileManager(name)
|
---|
26 | {
|
---|
27 | firstTime = true;
|
---|
28 | tobeRead = NULL;
|
---|
29 |
|
---|
30 | left0 = NULL;
|
---|
31 | right0 = NULL;
|
---|
32 | timeStamp0 = NULL;
|
---|
33 | timeRange0 = NULL;
|
---|
34 |
|
---|
35 | left1 = NULL;
|
---|
36 | right1 = NULL;
|
---|
37 | timeStamp1 = NULL;
|
---|
38 | timeRange1 = NULL;
|
---|
39 | }
|
---|
40 |
|
---|
41 | DbtPlyStereoManager::~DbtPlyStereoManager()
|
---|
42 | {
|
---|
43 | delete tobeRead;
|
---|
44 | delete left0;
|
---|
45 | delete right0;
|
---|
46 | delete timeStamp0;
|
---|
47 | delete timeRange0;
|
---|
48 | delete left1;
|
---|
49 | delete right1;
|
---|
50 | delete timeStamp1;
|
---|
51 | delete timeRange1;
|
---|
52 | }
|
---|
53 |
|
---|
54 | //processData unix
|
---|
55 | void DbtPlyStereoManager::processData(road_time_t t, road_timerange_t tr, void * buf)
|
---|
56 | {
|
---|
57 | if (!buf) {
|
---|
58 | return;
|
---|
59 | }
|
---|
60 |
|
---|
61 | const size_t imageSize = width_ * height_ * depth_;
|
---|
62 |
|
---|
63 | // look at the dbt index in file manager and get the identifier of dbt structure
|
---|
64 | hdfile_header_t::DataTypeT id = dbt_[dbtIndex_].pfile->getType();
|
---|
65 |
|
---|
66 | if (firstTime) {
|
---|
67 | tobeRead = new ShMem("OFFSET", sizeof(bool)); //Offset pointer to read
|
---|
68 |
|
---|
69 | left0 = new ShMem("BufferLeft0", imageSize);
|
---|
70 | right0 = new ShMem("BufferRight0", imageSize);
|
---|
71 | timeStamp0 = new ShMem("BufferTimeStamp0", sizeof(road_time_t));
|
---|
72 | timeRange0 = new ShMem("BufferTimeRange0", sizeof(road_timerange_t));
|
---|
73 |
|
---|
74 | left1 = new ShMem("BufferLeft1", imageSize);
|
---|
75 | right1 = new ShMem("BufferRight1", imageSize);
|
---|
76 | timeStamp1 = new ShMem("BufferTimeStamp1", sizeof(road_time_t));
|
---|
77 | timeRange1 = new ShMem("BufferTimeRange1", sizeof(road_timerange_t));
|
---|
78 |
|
---|
79 | firstTime = false;
|
---|
80 | leftStatus = false;
|
---|
81 | rightStatus = false;
|
---|
82 | offset = false;
|
---|
83 |
|
---|
84 | if (tobeRead == NULL) {
|
---|
85 | LOG_FATAL("Crashing because of shared memory");
|
---|
86 | }
|
---|
87 | }
|
---|
88 |
|
---|
89 | //dropping stereo images
|
---|
90 | switch (id) {
|
---|
91 | case STEREO_LEFT_IMAGE:
|
---|
92 | if (!offset)
|
---|
93 | left0->write(buf, imageSize);
|
---|
94 | else
|
---|
95 | left1->write(buf, imageSize);
|
---|
96 | leftStatus = true;
|
---|
97 | break;
|
---|
98 | case STEREO_RIGHT_IMAGE:
|
---|
99 | if (!offset)
|
---|
100 | right0->write(buf, imageSize);
|
---|
101 | else
|
---|
102 | right1->write(buf, imageSize);
|
---|
103 | rightStatus = true;
|
---|
104 | break;
|
---|
105 | default:
|
---|
106 | //Unkown id data type
|
---|
107 | break;
|
---|
108 | }
|
---|
109 |
|
---|
110 | if ((leftStatus)&&(rightStatus)) { // synchronized stereo data is available
|
---|
111 | //dropping time stamp
|
---|
112 | if (!offset) {
|
---|
113 | timeStamp0->write(&t, sizeof(road_time_t));
|
---|
114 | timeRange0->write(&tr, sizeof(road_timerange_t));
|
---|
115 | } else {
|
---|
116 | timeStamp1->write(&t, sizeof(road_time_t));
|
---|
117 | timeRange1->write(&tr, sizeof(road_timerange_t));
|
---|
118 | }
|
---|
119 | if (mVerbose >= 1) {
|
---|
120 | cout << "[Shmem update Event] at " << t << std::endl;
|
---|
121 | }
|
---|
122 | //setting read flag
|
---|
123 | tobeRead->write((char*)&offset, sizeof(bool));
|
---|
124 | if (!offset)
|
---|
125 | offset = true;
|
---|
126 | else
|
---|
127 | offset =false;
|
---|
128 |
|
---|
129 | leftStatus = false;
|
---|
130 | rightStatus = false;
|
---|
131 | }
|
---|
132 | }
|
---|
133 |
|
---|
134 | ComponentBase::COMPONENT_CONFIGURATION DbtPlyStereoManager::configureComponent(XmlComponentConfig config)
|
---|
135 | {
|
---|
136 | //default stereo image parameters
|
---|
137 | width_ = 320; // pixels
|
---|
138 | height_ = 240; // pixels
|
---|
139 | depth_ = 1; // bytes-per-pixel
|
---|
140 |
|
---|
141 | //load stereo image parameters
|
---|
142 | width_ = config.getProperty("width").toInt();
|
---|
143 | height_ = config.getProperty("height").toInt();
|
---|
144 | depth_ = config.getProperty("depth").toInt();
|
---|
145 |
|
---|
146 | return DbtPlyFileManager::configureComponent(config);
|
---|
147 | }
|
---|
148 |
|
---|
149 | void DbtPlyStereoManager::startActivity()
|
---|
150 | {
|
---|
151 | DbtPlyFileManager::startActivity();
|
---|
152 | }
|
---|
153 |
|
---|
154 | void DbtPlyStereoManager::stopActivity()
|
---|
155 | {
|
---|
156 | DbtPlyFileManager::stopActivity();
|
---|
157 | }
|
---|
158 |
|
---|
159 | void DbtPlyStereoManager::displayUI()
|
---|
160 | {
|
---|
161 | // TODO: not implemented
|
---|
162 | }
|
---|
163 |
|
---|
164 | void DbtPlyStereoManager::tic()
|
---|
165 | {
|
---|
166 | tic_ = road_time();
|
---|
167 | }
|
---|
168 |
|
---|
169 | void DbtPlyStereoManager::toc(char * text)
|
---|
170 | {
|
---|
171 | cout << "duration = " << (int)(road_time() - tic_) << " " << text << "\n";
|
---|
172 | }
|
---|
173 |
|
---|
174 | } // namespace pacpus
|
---|