diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2009-12-03 06:49:51 -0500 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2009-12-03 06:49:51 -0500 |
commit | 16ba8c002702d033bb7ec4959e58bb7fb4d4ae99 (patch) | |
tree | 4e3ceb50eca46ac5e9a752da2cc5fbada39d994a | |
parent | Smarter attachment of WinId. (diff) | |
download | EmbeddedBrowserPrototype-16ba8c002702d033bb7ec4959e58bb7fb4d4ae99.tar.xz EmbeddedBrowserPrototype-16ba8c002702d033bb7ec4959e58bb7fb4d4ae99.zip |
-rw-r--r-- | AnyClipBrowser.pro | 32 | ||||
-rw-r--r-- | vlcwrapper/VLCVideoWidget.cpp | 57 | ||||
-rw-r--r-- | vlcwrapper/VLCVideoWidget.h | 4 |
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(); |