summaryrefslogtreecommitdiffstats
path: root/vlcwrapper/VLCVideoWidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vlcwrapper/VLCVideoWidget.cpp')
-rw-r--r--vlcwrapper/VLCVideoWidget.cpp57
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());
}