source: pacpussensors/trunk/StdDbtPlayerComponents/DbtPlyStereoManager.cpp@ 30

Last change on this file since 30 was 16, checked in by DHERBOMEZ Gérald, 11 years ago

add standards replay components for some sensors that has to be used with DBITEPlayer application: StdDbtPlayerComponents

File size: 4.4 KB
Line 
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 "kernel/ComponentManager.h"
12#include "kernel/DbiteFileTypes.h"
13#include "kernel/Log.h"
14
15namespace pacpus {
16
17using namespace std;
18
19DECLARE_STATIC_LOGGER("pacpus.base.DbtPlyStereoManager");
20
21/// Construction de la fabrique de composant DbtPlyStereoManager
22static ComponentFactory<DbtPlyStereoManager> sFactory("DbtPlyStereoManager");
23
24DbtPlyStereoManager::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
41DbtPlyStereoManager::~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
55void 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
134ComponentBase::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_ = param.getProperty("width").toInt();
143 height_ = param.getProperty("height").toInt();
144 depth_ = param.getProperty("depth").toInt();
145
146 return DbtPlyFileManager::configureComponent(config);
147}
148
149void DbtPlyStereoManager::startActivity()
150{
151 DbtPlyFileManager::startActivity();
152}
153
154void DbtPlyStereoManager::stopActivity()
155{
156 DbtPlyFileManager::stopActivity();
157}
158
159void DbtPlyStereoManager::displayUI()
160{
161 // TODO: not implemented
162}
163
164void DbtPlyStereoManager::tic()
165{
166 tic_ = road_time();
167}
168
169void DbtPlyStereoManager::toc(char * text)
170{
171 cout << "duration = " << (int)(road_time() - tic_) << " " << text << "\n";
172}
173
174} // namespace pacpus
Note: See TracBrowser for help on using the repository browser.