diff options
Diffstat (limited to 'vlcwrapper/VLCVideoWidget.cpp')
-rw-r--r-- | vlcwrapper/VLCVideoWidget.cpp | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/vlcwrapper/VLCVideoWidget.cpp b/vlcwrapper/VLCVideoWidget.cpp index 04f1a3c..6580e00 100644 --- a/vlcwrapper/VLCVideoWidget.cpp +++ b/vlcwrapper/VLCVideoWidget.cpp @@ -1,5 +1,6 @@ #include "VLCVideoWidget.h" #include "VLCLoader.h" +#include <QTemporaryFile> VLCVideoWidget::VLCVideoWidget(QWidget *parent) : QFrame(parent) @@ -54,49 +55,49 @@ void VLCVideoWidget::vlcCallbacks(const libvlc_event_t* event, void* ptr) VLCVideoWidget *self = reinterpret_cast<VLCVideoWidget*>(ptr); switch(event->type) { - case libvlc_MediaPlayerOpening: + case libvlc_MediaPlayerOpening: self->emit opening(); break; - case libvlc_MediaPlayerBuffering: + case libvlc_MediaPlayerBuffering: self->emit buffering(); break; - case libvlc_MediaPlayerPlaying: + case libvlc_MediaPlayerPlaying: self->emit playing(); break; - case libvlc_MediaPlayerPaused: + case libvlc_MediaPlayerPaused: self->emit paused(); break; - case libvlc_MediaPlayerStopped: + case libvlc_MediaPlayerStopped: self->emit stopped(); break; - case libvlc_MediaPlayerForward: + case libvlc_MediaPlayerForward: self->emit forward(); break; - case libvlc_MediaPlayerBackward: + case libvlc_MediaPlayerBackward: self->emit backward(); break; - case libvlc_MediaPlayerEndReached: + case libvlc_MediaPlayerEndReached: self->emit endReached(); break; - case libvlc_MediaPlayerEncounteredError: + case libvlc_MediaPlayerEncounteredError: self->emit error(); break; - case libvlc_MediaPlayerTimeChanged: + case libvlc_MediaPlayerTimeChanged: self->emit timeChanged(); break; - case libvlc_MediaPlayerPositionChanged: + case libvlc_MediaPlayerPositionChanged: self->emit positionChanged(); break; - case libvlc_MediaPlayerSeekableChanged: + case libvlc_MediaPlayerSeekableChanged: self->emit seekableChanged(); break; - case libvlc_MediaPlayerPausableChanged: + case libvlc_MediaPlayerPausableChanged: self->emit pausableChanged(); break; - case libvlc_MediaPlayerTitleChanged: + case libvlc_MediaPlayerTitleChanged: self->emit titleChanged(); break; - case libvlc_MediaPlayerSnapshotTaken: + case libvlc_MediaPlayerSnapshotTaken: self->emit snapshotTaken(); break; @@ -302,11 +303,29 @@ QSize VLCVideoWidget::sizeHint() const { if (!hasVideoOut()) return QSize(640, 480); //HACK: fix this? + return QSize(width(), height()); +} +int VLCVideoWidget::width() const +{ + int width = libvlc_video_get_width(m_mediaPlayer, VLCLoader::instance()->exception()); + if (!VLCLoader::instance()->checkError()) + return -1; + return width; +} +int VLCVideoWidget::height() const +{ int height = libvlc_video_get_height(m_mediaPlayer, VLCLoader::instance()->exception()); if (!VLCLoader::instance()->checkError()) - return QSize(); - int width = libvlc_video_get_width(m_mediaPlayer, VLCLoader::instance()->exception()); + return -1; + return height; +} +QImage VLCVideoWidget::currentFrameImage() const +{ + QTemporaryFile temp; + if (!temp.open()) + return QImage(); + libvlc_video_take_snapshot(m_mediaPlayer, temp.fileName().toAscii(), width(), height(), VLCLoader::instance()->exception()); if (!VLCLoader::instance()->checkError()) - return QSize(); - return QSize(width, height); + return QImage(); + return QImage(temp.fileName()); } |