34 #include <QStringList>
37 #include <boost/bind.hpp>
38 #include "vtkImageImport.h"
39 #include "vtkImageData.h"
53 #include <QtConcurrent>
61 mVideoSourceUid(
"playback")
65 mVideoSource->setStatusString(QString(
"No US Acquisition"));
67 connect(&mUSImageDataFutureWatcher, SIGNAL(finished()),
this, SLOT(usDataLoadFinishedSlot()));
81 return mTimer ?
true :
false;
87 disconnect(mTimer.get(), SIGNAL(changed()),
this, SLOT(timerChangedSlot()));
90 connect(mTimer.get(), SIGNAL(changed()),
this, SLOT(timerChangedSlot()));
94 mVideoSource->start();
98 mVideoSource->deconfigure();
110 std::vector<TimelineEvent> events;
112 QStringList allFiles = this->getAbsolutePathToFtsFiles(mRoot);
113 for (
int i=0; i<allFiles.size(); ++i)
118 if (timestamps.empty())
122 QString(
"Acquisition %1").arg(QFileInfo(allFiles[i]).fileName()),
123 timestamps.front().mTime,
124 timestamps.back().mTime);
125 current.
mUid = allFiles[i];
126 current.mGroup =
"acquisition";
127 current.mColor = QColor::fromHsv(36, 255, 222);
129 events.push_back(current);
138 QStringList USAcquisitionVideoPlayback::getAbsolutePathToFtsFiles(QString folder)
143 void USAcquisitionVideoPlayback::timerChangedSlot()
146 for (
unsigned i=0; i<mEvents.size(); ++i)
148 if (mEvents[i].isInside(mTimer->getTime().toMSecsSinceEpoch()))
155 this->loadFullData(event.mUid);
156 this->updateFrame(event.mUid);
159 void USAcquisitionVideoPlayback::loadFullData(QString filename)
165 mVideoSource->setInfoString(QString(
""));
166 mVideoSource->setStatusString(QString(
"No US Acquisition"));
167 mVideoSource->deconfigure();
170 if (filename.isEmpty())
174 mCurrentData = USReconstructInputData();
177 if (filename.isEmpty())
182 if (!mUSImageDataReader)
184 mUSImageDataReader.reset(
new UsReconstructionFileReader());
186 mUSImageDataFutureWatcher.setFuture(mUSImageDataFutureResult);
190 void USAcquisitionVideoPlayback::usDataLoadFinishedSlot()
193 mCurrentData = mUSImageDataFutureResult.result();
196 mUSImageDataReader.reset();
198 mVideoSource->start();
201 ToolPtr tool = mBackend->getToolManager()->getFirstProbe();
210 mCurrentTimestamps.clear();
211 for (
unsigned i=0; i<mCurrentData.
mFrames.size(); ++i)
212 mCurrentTimestamps.push_back(mCurrentData.
mFrames[i].mTime);
214 this->updateFrame(mCurrentData.
mFilename);
217 void USAcquisitionVideoPlayback::updateFrame(QString filename)
219 if (mUSImageDataReader)
221 mVideoSource->setInfoString(QString(
"Loading US Data..."));
222 mVideoSource->setStatusString(QString(
"Loading US Data..."));
229 mVideoSource->setInfoString(QString(
""));
230 mVideoSource->setStatusString(QString(
"No US Acquisition"));
236 mVideoSource->start();
238 double timestamp = mTimer->getTime().toMSecsSinceEpoch();
241 std::vector<double>::iterator iter = std::lower_bound(mCurrentTimestamps.begin(), mCurrentTimestamps.end(), timestamp);
242 if (iter==mCurrentTimestamps.begin())
245 int index = std::distance(mCurrentTimestamps.begin(), iter);
248 mVideoSource->overrideTimeout(fabs(timestamp-*iter)>timeout);
250 ImagePtr image(
new Image(mVideoSourceUid, mCurrentData.
mUsRaw->getImageContainer()->get(index)));
251 image->setAcquisitionTime(QDateTime::fromMSecsSinceEpoch(timestamp));
253 mVideoSource->setInfoString(QString(
"%1 - Frame %2").arg(mCurrentData.
mUsRaw->getName()).arg(index));
254 if (mVideoSource->validData())
255 mVideoSource->setStatusString(QString(
""));
257 mVideoSource->setStatusString(QString(
"Timeout"));
259 mVideoSource->setInput(image);
Reader class for the US Acquisition files.
void setTime(PlaybackTimePtr controller)
Description of one event in time.
boost::shared_ptr< class Image > ImagePtr
std::vector< TimedPosition > readFrameTimestamps(QString fileName)
VideoSourcePtr getVideoSource()
boost::shared_ptr< class VideoServiceBackend > VideoServiceBackendPtr
void setRoot(const QString path)
boost::shared_ptr< Probe > ProbePtr
USAcquisitionVideoPlayback(VideoServiceBackendPtr backend)
USReconstructInputData readAllFiles(QString fileName, QString calFilesPath="")
boost::shared_ptr< class VideoSource > VideoSourcePtr
VideoSource controlled by a vtkImageData.
std::vector< TimelineEvent > getEvents()
QStringList getAbsolutePathToFiles(QString path, QStringList nameFilters, bool includeSubDirs)
virtual ~USAcquisitionVideoPlayback()
boost::shared_ptr< class PlaybackTime > PlaybackTimePtr
boost::shared_ptr< class Tool > ToolPtr