1
|
/**
|
2
|
* Vehicle ModelOutput Behaviour Source.
|
3
|
*
|
4
|
* @file
|
5
|
* Copyright © Digiteq automotive. All rights reserved
|
6
|
*
|
7
|
* $Author: voigtlpi $
|
8
|
* $Date: 2013-10-21 16:19:03 +0200 (Mon, 21 Oct 2013) $
|
9
|
* $Revision: 41925 $
|
10
|
*
|
11
|
* @remarks
|
12
|
*/
|
13
|
#include "stdafx.h"
|
14
|
#include "VehicleModelOutputBehaviour.h"
|
15
|
|
16
|
/// Create filter for random number generator
|
17
|
ADTF_FILTER_PLUGIN("Vehicle ModelOutput Behaviour", OID_ADTF_MODEL_OUT_BEHAVIOR_FILTER, cVehicleModelOutputB)
|
18
|
|
19
|
|
20
|
|
21
|
cVehicleModelOutputB::cVehicleModelOutputB(const tChar* __info) : adtf::cAsyncDataTriggeredFilter(__info)
|
22
|
{
|
23
|
memset(&m_sVehicleBehaviour, 0, sizeof(m_sVehicleBehaviour));
|
24
|
m_DataReceived = false;
|
25
|
m_CycleTime = 100000;
|
26
|
}
|
27
|
|
28
|
|
29
|
cVehicleModelOutputB::~cVehicleModelOutputB()
|
30
|
{
|
31
|
}
|
32
|
|
33
|
|
34
|
|
35
|
tResult cVehicleModelOutputB::Start( __exception)
|
36
|
{
|
37
|
m_oThread.Run();
|
38
|
return cFilter::Start(__exception_ptr);
|
39
|
}
|
40
|
|
41
|
tResult cVehicleModelOutputB::Stop( __exception)
|
42
|
{
|
43
|
m_oThread.Suspend();
|
44
|
return cFilter::Stop(__exception_ptr);
|
45
|
}
|
46
|
|
47
|
|
48
|
const char OUTPUT_PIN_NAME[] = "output_vehicle_behaviour";
|
49
|
const char INPUT_PIN_NAME[] = "input_vehicle_behaviour";
|
50
|
|
51
|
tResult cVehicleModelOutputB::Init(tInitStage eStage, __exception)
|
52
|
{
|
53
|
RETURN_IF_FAILED(cAsyncDataTriggeredFilter::Init(eStage, __exception_ptr));
|
54
|
|
55
|
switch(eStage)
|
56
|
{
|
57
|
case StageFirst:
|
58
|
// Output to ADTF framework
|
59
|
RETURN_IF_FAILED(m_oOutputVehicleBehaviour.Create(OUTPUT_PIN_NAME,
|
60
|
cObjectPtr<IMediaType>(new cMediaType(MEDIA_TYPE_VEHICLE_MODEL_OUTPUT_BEHAVIOUR, MEDIA_SUBTYPE_VEHICLE_MODEL_OUTPUT_BEHAVIOUR_V1)),
|
61
|
static_cast<IPinEventSink*>(this)));
|
62
|
RETURN_IF_FAILED(RegisterPin(&m_oOutputVehicleBehaviour));
|
63
|
|
64
|
// Input from Matlab
|
65
|
RETURN_IF_FAILED(m_pInputPin.Create(INPUT_PIN_NAME,
|
66
|
cObjectPtr<IMediaType>(new cMediaType(0,0)), //MEDIA_TYPE_STRUCTURED_DATA, MEDIA_SUBTYPE_STRUCT_STRUCTURED)), // Regular output for ADTF-Matlab connection
|
67
|
//cObjectPtr<IMediaType>(new cMediaType(MEDIA_TYPE_VEHICLE_MODEL_OUTPUT_BEHAVIOUR, MEDIA_SUBTYPE_VEHICLE_MODEL_OUTPUT_BEHAVIOUR_V1)), // Just a hack for EF6 testing.
|
68
|
static_cast<IPinEventSink*>(this)));
|
69
|
RETURN_IF_FAILED(RegisterPin(&m_pInputPin));
|
70
|
|
71
|
break;
|
72
|
|
73
|
case StageNormal:
|
74
|
// init all properties
|
75
|
{
|
76
|
adtf_util::cString strByteOrder = "LE";
|
77
|
if(PLATFORM_BYTEORDER == PLATFORM_BIG_ENDIAN_8)
|
78
|
{
|
79
|
strByteOrder = "BE";
|
80
|
}
|
81
|
adtf_util::cString strTypeNameI = adtf_util::cString::Format("tVehicleModelOutputBehaviour_%s", OIGetInstanceName());
|
82
|
|
83
|
adtf_util::cString strMyDescriptionI = adtf_util::cString::Format(
|
84
|
"<structs>"
|
85
|
"<struct alignment=\"8\" name=\"tVehicleModelAnimationState\" version=\"1\">"
|
86
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tFloat64\" name=\"fSteeringPosition\"/>"
|
87
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"8\" type=\"tFloat64\" name=\"afWheelAngle0\"/>"
|
88
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"16\" type=\"tFloat64\" name=\"afWheelAngle1\"/>"
|
89
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"24\" type=\"tFloat64\" name=\"afWheelAngle2\"/>"
|
90
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"32\" type=\"tFloat64\" name=\"afWheelAngle3\"/>"
|
91
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"40\" type=\"tFloat64\" name=\"afWheelDeflection0\"/>"
|
92
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"48\" type=\"tFloat64\" name=\"afWheelDeflection1\"/>"
|
93
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"56\" type=\"tFloat64\" name=\"afWheelDeflection2\"/>"
|
94
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"64\" type=\"tFloat64\" name=\"afWheelDeflection3\"/>"
|
95
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"72\" type=\"tUInt32\" name=\"nLightMask\"/>"
|
96
|
"<element alignment=\"4\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"74\" type=\"tUInt32\" name=\"void\"/>"
|
97
|
"</struct>"
|
98
|
"<struct alignment=\"8\" name=\"tDrivetrain\" version=\"1\">"
|
99
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tFloat64\" name=\"fGear\"/>"
|
100
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"8\" type=\"tFloat64\" name=\"fGearboxType\"/>"
|
101
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"16\" type=\"tFloat64\" name=\"fDrivetrainType\"/>"
|
102
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"24\" type=\"tFloat64\" name=\"fTorqueGearBoxIn\"/>"
|
103
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"32\" type=\"tFloat64\" name=\"fTorqueCenterDiffOut0\"/>"
|
104
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"40\" type=\"tFloat64\" name=\"fTorqueCenterDiffOut1\"/>"
|
105
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"48\" type=\"tFloat64\" name=\"fTorqueShaft\"/>"
|
106
|
"</struct>"
|
107
|
"<struct alignment=\"8\" name=\"tEngine\" version=\"1\">"
|
108
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tFloat64\" name=\"fRpm\"/>"
|
109
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"8\" type=\"tFloat64\" name=\"fTorque\"/>"
|
110
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"16\" type=\"tFloat64\" name=\"fLoad\"/>"
|
111
|
"</struct>"
|
112
|
"<struct alignment=\"8\" name=\"tWheel\" version=\"1\">"
|
113
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tFloat64\" name=\"fSpringCompression\"/>"
|
114
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"8\" type=\"tFloat64\" name=\"fSteeringAngle\"/>"
|
115
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"16\" type=\"tFloat64\" name=\"fRotAngle\"/>"
|
116
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"24\" type=\"tFloat64\" name=\"fRotAngleDot\"/>"
|
117
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"32\" type=\"tFloat64\" name=\"fSlip\"/>"
|
118
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"40\" type=\"tFloat64\" name=\"fBrakePressure\"/>"
|
119
|
"</struct>"
|
120
|
"<struct alignment=\"8\" name=\"tVehicleModelOutputBehaviour\" version=\"1\">"
|
121
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tVTDPosition\" name=\"sPosition\"/>"
|
122
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"120\" type=\"tVehicleModelAnimationState\" name=\"sAnimationState\"/>"
|
123
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"200\" type=\"tFloat64\" name=\"fSteeringMoment\"/>"
|
124
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"208\" type=\"tEngine\" name=\"sEngine\"/>"
|
125
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"232\" type=\"tDrivetrain\" name=\"sDrivetrain\"/>"
|
126
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"288\" type=\"tWheel\" name=\"sWheel0\"/>"
|
127
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"336\" type=\"tWheel\" name=\"sWheel1\"/>"
|
128
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"384\" type=\"tWheel\" name=\"sWheel2\"/>"
|
129
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"432\" type=\"tWheel\" name=\"sWheel3\"/>"
|
130
|
"</struct>"
|
131
|
"<struct alignment=\"8\" name=\"tVTDPosition\" version=\"1\">"
|
132
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tFloat64\" name=\"afXYZ0\"/>"
|
133
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"8\" type=\"tFloat64\" name=\"afXYZ1\"/>"
|
134
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"16\" type=\"tFloat64\" name=\"afXYZ2\"/>"
|
135
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"24\" type=\"tFloat64\" name=\"afXYZdot0\"/>"
|
136
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"32\" type=\"tFloat64\" name=\"afXYZdot1\"/>"
|
137
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"40\" type=\"tFloat64\" name=\"afXYZdot2\"/>"
|
138
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"48\" type=\"tFloat64\" name=\"afXYZdotdot0\"/>"
|
139
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"56\" type=\"tFloat64\" name=\"afXYZdotdot1\"/>"
|
140
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"64\" type=\"tFloat64\" name=\"afXYZdotdot2\"/>"
|
141
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"72\" type=\"tFloat64\" name=\"afHPR0\"/>"
|
142
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"80\" type=\"tFloat64\" name=\"afHPR1\"/>"
|
143
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"88\" type=\"tFloat64\" name=\"afHPR2\"/>"
|
144
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"96\" type=\"tFloat64\" name=\"afHPRdot0\"/>"
|
145
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"104\" type=\"tFloat64\" name=\"afHPRdot1\"/>"
|
146
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"112\" type=\"tFloat64\" name=\"afHPRdot2\"/>"
|
147
|
"</struct>"
|
148
|
"</structs>");
|
149
|
|
150
|
ucom::cObjectPtr<adtf::IMediaType> pTypeI = NULL;
|
151
|
RETURN_IF_FAILED(m_pInputPin.GetMediaType(&pTypeI));
|
152
|
ucom::cObjectPtr<adtf::IMediaTypeDescription> pTypeDescriptionI = NULL;
|
153
|
if(IS_OK(pTypeI->GetInterface(IID_ADTF_MEDIA_TYPE_DESCRIPTION, (tVoid**)&pTypeDescriptionI)))
|
154
|
{
|
155
|
//if you are not sure your description works!
|
156
|
//react on this return value!
|
157
|
RETURN_IF_FAILED(pTypeDescriptionI->SetMediaSampleDescription("tVehicleModelOutputBehaviour", //strTypeName,
|
158
|
strMyDescriptionI.GetPtr(),
|
159
|
IMediaDescription::MDF_DDL020000));
|
160
|
}
|
161
|
|
162
|
adtf_util::cString strMyDescription = adtf_util::cString::Format(
|
163
|
"<structs>"
|
164
|
"<struct alignment=\"8\" name=\"tVehicleModelAnimationStateI\" version=\"1\">"
|
165
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fSteeringPosition\"/>"
|
166
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelAngle0\"/>"
|
167
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelAngle1\"/>"
|
168
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelAngle2\"/>"
|
169
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelAngle3\"/>"
|
170
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelDeflection0\"/>"
|
171
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelDeflection1\"/>"
|
172
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelDeflection2\"/>"
|
173
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"afWheelDeflection3\"/>"
|
174
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tUInt32\" name=\"nLightMask\"/>"
|
175
|
"<element alignment=\"4\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tUInt32\" name=\"void\"/>"
|
176
|
"</struct>"
|
177
|
"<struct alignment=\"8\" name=\"tDrivetrainI\" version=\"1\">"
|
178
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fGear\"/>"
|
179
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fGearboxType\"/>"
|
180
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fDrivetrainType\"/>"
|
181
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fTorqueGearBoxIn\"/>"
|
182
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fTorqueCenterDiffOut0\"/>"
|
183
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fTorqueCenterDiffOut1\"/>"
|
184
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fTorqueShaft\"/>"
|
185
|
"</struct>"
|
186
|
"<struct alignment=\"8\" name=\"tEngineI\" version=\"1\">"
|
187
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fRpm\"/>"
|
188
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fTorque\"/>"
|
189
|
"<element alignment=\"8\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fLoad\"/>"
|
190
|
"</struct>"
|
191
|
"<struct alignment=\"8\" name=\"tWheelI\" version=\"1\">"
|
192
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fSpringCompression\"/>"
|
193
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fSteeringAngle\"/>"
|
194
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fRotAngle\"/>"
|
195
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fRotAngleDot\"/>"
|
196
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fSlip\"/>"
|
197
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fBrakePressure\"/>"
|
198
|
"</struct>"
|
199
|
"<struct alignment=\"8\" name=\"%s\" version=\"1\">"
|
200
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tVTDPositionI\" name=\"sPosition\"/>"
|
201
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tVehicleModelAnimationStateI\" name=\"sAnimationState\"/>"
|
202
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tFloat64\" name=\"fSteeringMoment\"/>"
|
203
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tEngineI\" name=\"sEngine\"/>"
|
204
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tDrivetrainI\" name=\"sDrivetrain\"/>"
|
205
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tWheelI\" name=\"sWheel0\"/>"
|
206
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tWheelI\" name=\"sWheel1\"/>"
|
207
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tWheelI\" name=\"sWheel2\"/>"
|
208
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"%u\" type=\"tWheelI\" name=\"sWheel3\"/>"
|
209
|
"</struct>"
|
210
|
"<struct alignment=\"8\" name=\"tVTDPositionI\" version=\"1\">"
|
211
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"0\" type=\"tFloat64\" name=\"afXYZ0\"/>"
|
212
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"8\" type=\"tFloat64\" name=\"afXYZ1\"/>"
|
213
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"16\" type=\"tFloat64\" name=\"afXYZ2\"/>"
|
214
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"24\" type=\"tFloat64\" name=\"afXYZdot0\"/>"
|
215
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"32\" type=\"tFloat64\" name=\"afXYZdot1\"/>"
|
216
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"40\" type=\"tFloat64\" name=\"afXYZdot2\"/>"
|
217
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"48\" type=\"tFloat64\" name=\"afXYZdotdot0\"/>"
|
218
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"56\" type=\"tFloat64\" name=\"afXYZdotdot1\"/>"
|
219
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"64\" type=\"tFloat64\" name=\"afXYZdotdot2\"/>"
|
220
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"72\" type=\"tFloat64\" name=\"afHPR0\"/>"
|
221
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"80\" type=\"tFloat64\" name=\"afHPR1\"/>"
|
222
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"88\" type=\"tFloat64\" name=\"afHPR2\"/>"
|
223
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"96\" type=\"tFloat64\" name=\"afHPRdot0\"/>"
|
224
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"104\" type=\"tFloat64\" name=\"afHPRdot1\"/>"
|
225
|
"<element alignment=\"1\" arraysize=\"1\" byteorder=\"LE\" bytepos=\"112\" type=\"tFloat64\" name=\"afHPRdot2\"/>"
|
226
|
"</struct>"
|
227
|
"</structs>",
|
228
|
offsetof(tVehicleModelAnimationState, fSteeringPosition),
|
229
|
offsetof(tVehicleModelAnimationState, afWheelAngle),
|
230
|
offsetof(tVehicleModelAnimationState, afWheelAngle) + sizeof(tFloat64),
|
231
|
offsetof(tVehicleModelAnimationState, afWheelAngle) + 2*sizeof(tFloat64),
|
232
|
offsetof(tVehicleModelAnimationState, afWheelAngle) + 3*sizeof(tFloat64),
|
233
|
offsetof(tVehicleModelAnimationState, afWheelDeflection),
|
234
|
offsetof(tVehicleModelAnimationState, afWheelDeflection) + sizeof(tFloat64),
|
235
|
offsetof(tVehicleModelAnimationState, afWheelDeflection) + 2*sizeof(tFloat64),
|
236
|
offsetof(tVehicleModelAnimationState, afWheelDeflection) + 3*sizeof(tFloat64),
|
237
|
offsetof(tVehicleModelAnimationState, nLightMask),
|
238
|
offsetof(tVehicleModelAnimationState, nLightMask) + 4,
|
239
|
|
240
|
offsetof(tDrivetrain, fGear),
|
241
|
offsetof(tDrivetrain, fGearboxType),
|
242
|
offsetof(tDrivetrain, fDrivetrainType),
|
243
|
offsetof(tDrivetrain, fTorqueGearBoxIn),
|
244
|
offsetof(tDrivetrain, fTorqueCenterDiffOut),
|
245
|
offsetof(tDrivetrain, fTorqueCenterDiffOut) + sizeof(tFloat64),
|
246
|
offsetof(tDrivetrain, fTorqueShaft),
|
247
|
|
248
|
offsetof(tEngine, fRpm),
|
249
|
offsetof(tEngine, fTorque),
|
250
|
offsetof(tEngine, fLoad),
|
251
|
|
252
|
offsetof(tWheel, fSpringCompression),
|
253
|
offsetof(tWheel, fSteeringAngle),
|
254
|
offsetof(tWheel, fRotAngle),
|
255
|
offsetof(tWheel, fRotAngleDot),
|
256
|
offsetof(tWheel, fSlip),
|
257
|
offsetof(tWheel, fBrakePressure),
|
258
|
|
259
|
OUTPUT_PIN_NAME,
|
260
|
offsetof(tVehicleModelOutputBehaviour,sAnimationState),
|
261
|
offsetof(tVehicleModelOutputBehaviour,fSteeringMoment),
|
262
|
offsetof(tVehicleModelOutputBehaviour,sEngine),
|
263
|
offsetof(tVehicleModelOutputBehaviour,sDrivetrain),
|
264
|
offsetof(tVehicleModelOutputBehaviour,sWheel),
|
265
|
offsetof(tVehicleModelOutputBehaviour,sWheel) + sizeof(tWheel),
|
266
|
offsetof(tVehicleModelOutputBehaviour,sWheel) + 2*sizeof(tWheel),
|
267
|
offsetof(tVehicleModelOutputBehaviour,sWheel) + 3*sizeof(tWheel)
|
268
|
);
|
269
|
|
270
|
ucom::cObjectPtr<adtf::IMediaType> pType = NULL;
|
271
|
RETURN_IF_FAILED(m_oOutputVehicleBehaviour.GetMediaType(&pType));
|
272
|
ucom::cObjectPtr<adtf::IMediaTypeDescription> pTypeDescription = NULL;
|
273
|
if(IS_OK(pType->GetInterface(IID_ADTF_MEDIA_TYPE_DESCRIPTION, (tVoid**)&pTypeDescription)))
|
274
|
{
|
275
|
//if you are not sure your description works!
|
276
|
//react on this return value!
|
277
|
RETURN_IF_FAILED(pTypeDescription->SetMediaSampleDescription(OUTPUT_PIN_NAME,
|
278
|
strMyDescription.GetPtr(),
|
279
|
IMediaDescription::MDF_DDL020000));
|
280
|
}
|
281
|
}
|
282
|
break;
|
283
|
|
284
|
case StageGraphReady:
|
285
|
memset(&m_sVehicleBehaviour, 0, sizeof(m_sVehicleBehaviour));
|
286
|
m_DataReceived = false;
|
287
|
|
288
|
m_oThread.SetCycleTime(m_CycleTime);
|
289
|
m_oThread.Create(0,0,A_UTILS_NS::cThread::TF_Suspended,this);
|
290
|
break;
|
291
|
}
|
292
|
|
293
|
RETURN_NOERROR;
|
294
|
}
|
295
|
|
296
|
|
297
|
tResult cVehicleModelOutputB::Shutdown(tInitStage eStage, __exception)
|
298
|
{
|
299
|
tResult nResult = ERR_NOERROR;
|
300
|
|
301
|
RETURN_IF_FAILED(cFilter::Shutdown(eStage, __exception_ptr));
|
302
|
|
303
|
switch (eStage)
|
304
|
{
|
305
|
case StageFirst: break;
|
306
|
case StageNormal: break;
|
307
|
|
308
|
case StageGraphReady:
|
309
|
{
|
310
|
m_oThread.Release();
|
311
|
break;
|
312
|
}
|
313
|
}
|
314
|
RETURN_NOERROR;
|
315
|
}
|
316
|
|
317
|
|
318
|
tResult cVehicleModelOutputB::Cycle(__exception)
|
319
|
{
|
320
|
if(!m_DataReceived) return ERR_NOERROR;
|
321
|
// declare smart pointer to media sample which automatically
|
322
|
// releases the reference to the sample in the sample pool
|
323
|
// at function exit
|
324
|
ucom::cObjectPtr<adtf::IMediaSample> pNewSample;
|
325
|
|
326
|
// get a new media sample container from sample pool
|
327
|
RETURN_IF_FAILED(AllocMediaSample((tVoid**)&pNewSample));
|
328
|
|
329
|
// alloc array buffer
|
330
|
RETURN_IF_FAILED(pNewSample->AllocBuffer(sizeof(tVehicleModelOutputBehaviour)));
|
331
|
|
332
|
tTimeStamp tmStreamTime = _clock ? _clock->GetStreamTime() : adtf_util::cHighResTimer::GetTime();
|
333
|
pNewSample->SetTime(tmStreamTime);
|
334
|
|
335
|
// access the sample data buffer
|
336
|
try
|
337
|
{
|
338
|
// acquire the write lock
|
339
|
__sample_write_lock(pNewSample, tVehicleModelOutputBehaviour, pDestDataX);
|
340
|
if(pDestDataX==NULL) return ERR_POINTER;
|
341
|
|
342
|
memcpy(pDestDataX, &m_sVehicleBehaviour, sizeof(tVehicleModelOutputBehaviour));
|
343
|
|
344
|
// the write lock will be released when leaving this scope
|
345
|
}
|
346
|
catch(...)
|
347
|
{
|
348
|
LOG_ERROR("VehicleModelOutputBehaviour: cVehicleModelOutputB::Cycle crashed.");
|
349
|
return ERR_EXCEPTION_RAISED;
|
350
|
}
|
351
|
|
352
|
// transmit sample through the output pin
|
353
|
RETURN_IF_FAILED(m_oOutputVehicleBehaviour.Transmit(pNewSample));
|
354
|
|
355
|
RETURN_NOERROR;
|
356
|
}
|
357
|
|
358
|
|
359
|
tResult cVehicleModelOutputB::ThreadFunc(A_UTILS_NS::cThread *pThread, tVoid*pvUserData, tSize szUserData)
|
360
|
{
|
361
|
if(pThread==&m_oThread) Cycle();
|
362
|
RETURN_NOERROR;
|
363
|
}
|
364
|
|
365
|
|
366
|
|
367
|
tResult cVehicleModelOutputB::OnPinEvent(IPin* pSource, tInt nEventCode, tInt nParam1, tInt nParam2, IMediaSample* pMediaSample)
|
368
|
{
|
369
|
if(nEventCode == IPinEventSink::PE_MediaSampleReceived)
|
370
|
{
|
371
|
if(pSource == &m_pInputPin)
|
372
|
{
|
373
|
tResult ret = ProcessInputBehaviour(pMediaSample);
|
374
|
if(ret != ERR_NOERROR) return ret;
|
375
|
ret = PushOutputVehicleBehaviour();
|
376
|
if(ret != ERR_NOERROR) return ret;
|
377
|
}
|
378
|
else RETURN_ERROR(ERR_NOT_SUPPORTED);
|
379
|
}
|
380
|
|
381
|
RETURN_NOERROR;
|
382
|
}
|
383
|
|
384
|
|
385
|
tResult cVehicleModelOutputB::OnAsyncPinEvent(IPin *pSource, tInt nEventCode, tInt nParam1, tInt nParam2, IMediaSample *pMediaSample)
|
386
|
{
|
387
|
if(nEventCode == IPinEventSink::PE_MediaSampleReceived)
|
388
|
{
|
389
|
if(pSource == &m_pInputPin)
|
390
|
{
|
391
|
tResult ret = ProcessInputBehaviour(pMediaSample);
|
392
|
if(ret != ERR_NOERROR) return ret;
|
393
|
ret = PushOutputVehicleBehaviour();
|
394
|
if(ret != ERR_NOERROR) return ret;
|
395
|
}
|
396
|
else RETURN_ERROR(ERR_NOT_SUPPORTED);
|
397
|
}
|
398
|
|
399
|
RETURN_NOERROR;
|
400
|
}
|
401
|
|
402
|
|
403
|
#define LD_Float64(dest,src) memcpy(&dest,src,sizeof(double))
|
404
|
#define LD_UInt32(dest,src) memcpy(&dest,src,sizeof(unsigned))
|
405
|
|
406
|
void cVehicleModelOutputB::LoadVTDposition(const char *psInput, tVTDPosition &pVTDPosition)
|
407
|
{
|
408
|
// <struct alignment="8" name="tVTDPosition" version="1">
|
409
|
LD_Float64(pVTDPosition.afXYZ[0],psInput); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="0" type="tFloat64" name="afXYZ0"/>
|
410
|
LD_Float64(pVTDPosition.afXYZ[1],psInput+8); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="8" type="tFloat64" name="afXYZ1"/>
|
411
|
LD_Float64(pVTDPosition.afXYZ[2],psInput+16); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="16" type="tFloat64" name="afXYZ2"/>
|
412
|
LD_Float64(pVTDPosition.afXYZdot[0],psInput+24); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="24" type="tFloat64" name="afXYZdot0"/>
|
413
|
LD_Float64(pVTDPosition.afXYZdot[1],psInput+32); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="32" type="tFloat64" name="afXYZdot1"/>
|
414
|
LD_Float64(pVTDPosition.afXYZdot[2],psInput+40); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="40" type="tFloat64" name="afXYZdot2"/>
|
415
|
LD_Float64(pVTDPosition.afXYZdotdot[0],psInput+48); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="48" type="tFloat64" name="afXYZdotdot0"/>
|
416
|
LD_Float64(pVTDPosition.afXYZdotdot[1],psInput+56); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="56" type="tFloat64" name="afXYZdotdot1"/>
|
417
|
LD_Float64(pVTDPosition.afXYZdotdot[2],psInput+64); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="64" type="tFloat64" name="afXYZdotdot2"/>
|
418
|
LD_Float64(pVTDPosition.afHPR[0],psInput+72); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="72" type="tFloat64" name="afHPR0"/>
|
419
|
LD_Float64(pVTDPosition.afHPR[1],psInput+80); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="80" type="tFloat64" name="afHPR1"/>
|
420
|
LD_Float64(pVTDPosition.afHPR[2],psInput+88); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="88" type="tFloat64" name="afHPR2"/>
|
421
|
LD_Float64(pVTDPosition.afHPRdot[0],psInput+96); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="96" type="tFloat64" name="afHPRdot0"/>
|
422
|
LD_Float64(pVTDPosition.afHPRdot[1],psInput+104); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="104" type="tFloat64" name="afHPRdot1"/>
|
423
|
LD_Float64(pVTDPosition.afHPRdot[2],psInput+112); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="112" type="tFloat64" name="afHPRdot2"/>
|
424
|
// </struct>
|
425
|
}
|
426
|
|
427
|
|
428
|
void cVehicleModelOutputB::LoadModelAnimationState(const char *psInput, tVehicleModelAnimationState &pAnimationState)
|
429
|
{
|
430
|
// <struct alignment="8" name="tVehicleModelAnimationState" version="1">
|
431
|
LD_Float64(pAnimationState.fSteeringPosition,psInput); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="0" type="tFloat64" name="fSteeringPosition"/>
|
432
|
LD_Float64(pAnimationState.afWheelAngle[0],psInput+8); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="8" type="tFloat64" name="afWheelAngle0"/>
|
433
|
LD_Float64(pAnimationState.afWheelAngle[1],psInput+16); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="16" type="tFloat64" name="afWheelAngle1"/>
|
434
|
LD_Float64(pAnimationState.afWheelAngle[2],psInput+24); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="24" type="tFloat64" name="afWheelAngle2"/>
|
435
|
LD_Float64(pAnimationState.afWheelAngle[3],psInput+32); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="32" type="tFloat64" name="afWheelAngle3"/>
|
436
|
LD_Float64(pAnimationState.afWheelDeflection[0],psInput+40); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="40" type="tFloat64" name="afWheelDeflection0"/>
|
437
|
LD_Float64(pAnimationState.afWheelDeflection[1],psInput+48); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="48" type="tFloat64" name="afWheelDeflection1"/>
|
438
|
LD_Float64(pAnimationState.afWheelDeflection[2],psInput+56); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="56" type="tFloat64" name="afWheelDeflection2"/>
|
439
|
LD_Float64(pAnimationState.afWheelDeflection[3],psInput+64); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="64" type="tFloat64" name="afWheelDeflection3"/>
|
440
|
LD_UInt32(pAnimationState.afWheelDeflection[0],psInput+72); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="72" type="tUInt32" name="nLightMask"/>
|
441
|
// <element alignment="4" arraysize="1" byteorder="LE" bytepos="74" type="tUInt32" name="void"/>
|
442
|
// </struct>
|
443
|
}
|
444
|
|
445
|
|
446
|
void cVehicleModelOutputB::LoadEngine(const char *psInput, tEngine &pEngine)
|
447
|
{
|
448
|
// <struct alignment="8" name="tEngine" version="1">
|
449
|
LD_Float64(pEngine.fRpm,psInput); //// <element alignment="8" arraysize="1" byteorder="LE" bytepos="0" type="tFloat64" name="fRpm"/>
|
450
|
LD_Float64(pEngine.fTorque,psInput+8); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="8" type="tFloat64" name="fTorque"/>
|
451
|
LD_Float64(pEngine.fLoad,psInput+16); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="16" type="tFloat64" name="fLoad"/>
|
452
|
// </struct>
|
453
|
}
|
454
|
|
455
|
|
456
|
void cVehicleModelOutputB::LoadWheel(const char *psInput, tWheel &pWheel)
|
457
|
{
|
458
|
// <struct alignment="8" name="tWheel" version="1">
|
459
|
LD_Float64(pWheel.fSpringCompression,psInput); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="0" type="tFloat64" name="fSpringCompression"/>
|
460
|
LD_Float64(pWheel.fSteeringAngle,psInput+8); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="8" type="tFloat64" name="fSteeringAngle"/>
|
461
|
LD_Float64(pWheel.fRotAngle,psInput+16); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="16" type="tFloat64" name="fRotAngle"/>
|
462
|
LD_Float64(pWheel.fRotAngleDot,psInput+24); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="24" type="tFloat64" name="fRotAngleDot"/>
|
463
|
LD_Float64(pWheel.fSlip,psInput+32); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="32" type="tFloat64" name="fSlip"/>
|
464
|
LD_Float64(pWheel.fBrakePressure,psInput+40); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="40" type="tFloat64" name="fBrakePressure"/>
|
465
|
// </struct>
|
466
|
}
|
467
|
|
468
|
|
469
|
void cVehicleModelOutputB::LoadDrivetrain(const char *psInput, tDrivetrain &pDrivetrain)
|
470
|
{
|
471
|
// <struct alignment="8" name="tDrivetrain" version="1">
|
472
|
LD_Float64(pDrivetrain.fGear,psInput); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="0" type="tFloat64" name="fGear"/>
|
473
|
LD_Float64(pDrivetrain.fGearboxType,psInput+8); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="8" type="tFloat64" name="fGearboxType"/>
|
474
|
LD_Float64(pDrivetrain.fDrivetrainType,psInput+16);// <element alignment="8" arraysize="1" byteorder="LE" bytepos="16" type="tFloat64" name="fDrivetrainType"/>
|
475
|
LD_Float64(pDrivetrain.fTorqueGearBoxIn,psInput+24);// <element alignment="8" arraysize="1" byteorder="LE" bytepos="24" type="tFloat64" name="fTorqueGearBoxIn"/>
|
476
|
LD_Float64(pDrivetrain.fTorqueCenterDiffOut[0],psInput+32);// <element alignment="8" arraysize="1" byteorder="LE" bytepos="32" type="tFloat64" name="fTorqueCenterDiffOut0"/>
|
477
|
LD_Float64(pDrivetrain.fTorqueCenterDiffOut[1],psInput+40);// <element alignment="8" arraysize="1" byteorder="LE" bytepos="40" type="tFloat64" name="fTorqueCenterDiffOut1"/>
|
478
|
LD_Float64(pDrivetrain.fTorqueShaft,psInput+48); // <element alignment="8" arraysize="1" byteorder="LE" bytepos="48" type="tFloat64" name="fTorqueShaft"/>
|
479
|
// </struct>
|
480
|
}
|
481
|
|
482
|
|
483
|
//#############################################################################
|
484
|
tResult cVehicleModelOutputB::ProcessInputBehaviour(IMediaSample* pSample)
|
485
|
{
|
486
|
RETURN_IF_POINTER_NULL(pSample);
|
487
|
const char *psInput;
|
488
|
|
489
|
const int sz = pSample->GetSize();
|
490
|
if(sz != 480) return ERR_INVALID_TYPE;
|
491
|
|
492
|
pSample->Lock((const tVoid**)&psInput);
|
493
|
|
494
|
memset(&m_sVehicleBehaviour,0,sizeof(m_sVehicleBehaviour));
|
495
|
// <struct alignment="8" name="tVehicleModelOutputBehaviour" version="1">
|
496
|
LoadVTDposition(psInput,m_sVehicleBehaviour.sPosition); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="0" type="tVTDPosition" name="sPosition"/>
|
497
|
LoadModelAnimationState(psInput+120,m_sVehicleBehaviour.sAnimationState); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="120" type="tVehicleModelAnimationState" name="sAnimationState"/>
|
498
|
LD_Float64(m_sVehicleBehaviour.fSteeringMoment,psInput+200); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="200" type="tFloat64" name="fSteeringMoment"/>
|
499
|
LoadEngine(psInput+208,m_sVehicleBehaviour.sEngine); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="208" type="tEngine" name="sEngine"/>
|
500
|
LoadDrivetrain(psInput+232,m_sVehicleBehaviour.sDrivetrain); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="232" type="tDrivetrain" name="sDrivetrain"/>
|
501
|
LoadWheel(psInput+288,m_sVehicleBehaviour.sWheel[0]); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="288" type="tWheel" name="sWheel0"/>
|
502
|
LoadWheel(psInput+336,m_sVehicleBehaviour.sWheel[1]); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="336" type="tWheel" name="sWheel1"/>
|
503
|
LoadWheel(psInput+384,m_sVehicleBehaviour.sWheel[2]); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="384" type="tWheel" name="sWheel2"/>
|
504
|
LoadWheel(psInput+432,m_sVehicleBehaviour.sWheel[3]); // <element alignment="1" arraysize="1" byteorder="LE" bytepos="432" type="tWheel" name="sWheel3"/>
|
505
|
// </struct>
|
506
|
|
507
|
pSample->Unlock((tVoid*)psInput);
|
508
|
m_DataReceived = true;
|
509
|
RETURN_NOERROR;
|
510
|
}
|
511
|
|
512
|
|
513
|
//#############################################################################
|
514
|
tResult cVehicleModelOutputB::PushOutputVehicleBehaviour()
|
515
|
{
|
516
|
cObjectPtr<IMediaSample> pVehicleBehaviourSample;
|
517
|
RETURN_IF_FAILED(AllocMediaSample((tVoid**)&pVehicleBehaviourSample));
|
518
|
tTimeStamp tmStreamTime = _clock ? _clock->GetStreamTime() : adtf_util::cHighResTimer::GetTime();
|
519
|
try{RETURN_IF_FAILED(pVehicleBehaviourSample->Update(tmStreamTime, &m_sVehicleBehaviour, sizeof(m_sVehicleBehaviour), IMediaSample::MSF_None));}
|
520
|
catch(...)
|
521
|
{
|
522
|
LOG_ERROR("VehicleModelOutputBehaviour: pVehicleInputInit->Update crashed.");
|
523
|
return ERR_EXCEPTION_RAISED;
|
524
|
}
|
525
|
RETURN_IF_FAILED(m_oOutputVehicleBehaviour.Transmit(pVehicleBehaviourSample));
|
526
|
|
527
|
RETURN_NOERROR;
|
528
|
}
|