32 #include <QFileDialog> 40 , time_tolerance_(100)
42 setObjectName(
"VideoPlayback");
66 connect(
ui_.sync, SIGNAL(clicked()),
this, SLOT(
sync()));
103 return QObject::eventFilter(watched, event);
109 ui_.videoPlayer->stop();
110 ui_.videoPlayer->close();
143 QString fileName = QFileDialog::getOpenFileName(
widget_, tr(
"Open Movie"),
144 QDir::homePath(), filter);
146 if (fileName.isEmpty())
return;
148 ui_.videoPlayer->load(fileName);
149 ui_.sync->setChecked(
false);
156 case Phonon::StoppedState:
157 ui_.videoPlayer->play();
159 case Phonon::PausedState:
160 ui_.videoPlayer->play();
162 case Phonon::PlayingState:
163 ui_.videoPlayer->pause();
166 qDebug() <<
"Unhandled Phonon state: " <<
mediaObject()->state();
197 qint64 new_time =
ui_.videoPlayer->currentTime() -
step_time_;
199 ui_.videoPlayer->seek(new_time);
204 qint64 new_time =
ui_.videoPlayer->currentTime() +
step_time_;
205 if (new_time < ui_.videoPlayer->totalTime())
206 ui_.videoPlayer->seek(new_time);
211 if (
ui_.videoPlayer->currentTime() != value)
212 ui_.videoPlayer->seek(value);
219 nsec = (time - sec * 1000ll) * 1000000;
225 return (qint64(duration.
sec) * 1000ll + qint64(duration.
nsec) / 1000000ll);
230 tick(
ui_.videoPlayer->mediaObject()->currentTime());
235 ui_.slider->setSliderPosition(tick);
237 qint64 currentVideo =
tick;
238 qint64 totalTime =
ui_.videoPlayer->totalTime();
241 if (
ui_.videoPlayer->mediaObject()->currentSource().type() == Phonon::MediaSource::Empty) {
242 ui_.controls->setEnabled(
false);
247 if (!
ui_.sync->isChecked()) {
248 ui_.controls->setEnabled(
true);
255 ui_.controls->setEnabled(
false);
259 ui_.videoPlayer->pause();
265 std::cout <<
"video: " << currentVideo <<
"/" << totalTime <<
", ROS: " << currentRos <<
" => diff: " << (currentVideo - currentRos) << std::endl;
268 if (currentRos < totalTime) {
269 ui_.videoPlayer->seek(currentRos);
270 ui_.videoPlayer->play();
272 ui_.videoPlayer->pause();
277 if (currentRos >= 0) {
278 ui_.videoPlayer->seek(currentRos);
279 ui_.videoPlayer->play();
281 ui_.videoPlayer->pause();
289 case Phonon::PlayingState:
290 ui_.play->setIcon(QIcon::fromTheme(
"media-playback-pause"));
293 case Phonon::StoppedState:
294 ui_.play->setIcon(QIcon::fromTheme(
"media-playback-start"));
297 case Phonon::PausedState:
298 ui_.play->setIcon(QIcon::fromTheme(
"media-playback-start"));
305 ui_.slider->setMaximum(total);
virtual void callbackClock(const rosgraph_msgs::Clock::ConstPtr &msg)
virtual void initPlugin(qt_gui_cpp::PluginContext &context)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ros::Duration toRos(qint64 time)
ros::Subscriber subscriber_
void stateChanged(Phonon::State newstate, Phonon::State oldstate)
void addWidget(QWidget *widget)
virtual void restoreSettings(const qt_gui_cpp::Settings &plugin_settings, const qt_gui_cpp::Settings &instance_settings)
virtual bool eventFilter(QObject *watched, QEvent *event)
void sliderValueChanged(int)
qint64 fromRos(const ros::Duration &duration)
virtual void shutdownPlugin()
void currentSourceChanged(Phonon::MediaSource)
ros::NodeHandle & getNodeHandle() const
Phonon::MediaObject * mediaObject() const
void totalTimeChanged(qint64)
virtual void saveSettings(qt_gui_cpp::Settings &plugin_settings, qt_gui_cpp::Settings &instance_settings) const
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)