summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2009-12-03 06:49:51 -0500
committerJason A. Donenfeld <Jason@zx2c4.com>2009-12-03 06:49:51 -0500
commit16ba8c002702d033bb7ec4959e58bb7fb4d4ae99 (patch)
tree4e3ceb50eca46ac5e9a752da2cc5fbada39d994a
parentSmarter attachment of WinId. (diff)
downloadEmbeddedBrowserPrototype-16ba8c002702d033bb7ec4959e58bb7fb4d4ae99.tar.xz
EmbeddedBrowserPrototype-16ba8c002702d033bb7ec4959e58bb7fb4d4ae99.zip
QImage snapshot.HEADmaster
-rw-r--r--AnyClipBrowser.pro32
-rw-r--r--vlcwrapper/VLCVideoWidget.cpp57
-rw-r--r--vlcwrapper/VLCVideoWidget.h4
3 files changed, 58 insertions, 35 deletions
diff --git a/AnyClipBrowser.pro b/AnyClipBrowser.pro
index d1eeefa..85bcaa8 100644
--- a/AnyClipBrowser.pro
+++ b/AnyClipBrowser.pro
@@ -2,27 +2,27 @@ QT += webkit
CONFIG += qt
DESTDIR = bin
-win32 {
- INCLUDEPATH += win32
- LIBS += win32/libvlc.lib
- win32-msvc|win32-msvc.net|win32-msvc2002|win32-msvc2003|win32-msvc2005|win32-msvc2008:INCLUDEPATH += win32/msvc # for stdint.h, which defines C99 types that MSVC doesn't support
+win32 {
+ INCLUDEPATH += win32
+ LIBS += win32/libvlc.lib
+ win32-msvc|win32-msvc.net|win32-msvc2002|win32-msvc2003|win32-msvc2005|win32-msvc2008:INCLUDEPATH += win32/msvc # for stdint.h, which defines C99 types that MSVC doesn't support
}
mac {
- INCLUDEPATH += /Applications/VLC.app/Contents/MacOS/include
- LIBS += -L/Applications/VLC.app/Contents/MacOS/lib/
+ INCLUDEPATH += /Applications/VLC.app/Contents/MacOS/include
+ LIBS += -L/Applications/VLC.app/Contents/MacOS/lib/
}
unix {
- LIBS += -lvlc
+ LIBS += -lvlc
}
HEADERS += vlcwrapper/VLCVideoWidget.h \
- vlcwrapper/VLCLoader.h \
- RandomFrameWidget.h \
- BrowserWindow.h \
- DVDPluginWebPage.h
+ vlcwrapper/VLCLoader.h \
+ RandomFrameWidget.h \
+ BrowserWindow.h \
+ DVDPluginWebPage.h
SOURCES += vlcwrapper/VLCVideoWidget.cpp \
- vlcwrapper/VLCLoader.cpp \
- RandomFrameWidget.cpp \
- BrowserWindow.cpp \
- main.cpp \
- DVDPluginWebPage.cpp
+ vlcwrapper/VLCLoader.cpp \
+ RandomFrameWidget.cpp \
+ BrowserWindow.cpp \
+ main.cpp \
+ DVDPluginWebPage.cpp
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());
}
diff --git a/vlcwrapper/VLCVideoWidget.h b/vlcwrapper/VLCVideoWidget.h
index a270a17..c25f2c8 100644
--- a/vlcwrapper/VLCVideoWidget.h
+++ b/vlcwrapper/VLCVideoWidget.h
@@ -2,6 +2,7 @@
#define VLCVIDEOWIDGET_H
#include <QFrame>
+#include <QImage>
#include <vlc/vlc.h>
class VLCVideoWidget : public QFrame
@@ -28,6 +29,9 @@ public:
bool canPause() const;
bool hasVideoOut() const;
virtual QSize sizeHint() const;
+ int width() const;
+ int height() const;
+ QImage currentFrameImage() const;
public slots:
bool setSource(const QString &source);
bool play();