[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [Phonon-VLC] 0ed61de: Support for MediaSource::Stream
From: Jean-Baptiste Kempf <jb () videolan ! org>
Date: 2010-04-14 22:45:02
Message-ID: 201004142245.o3EMj2F9028983 () kore ! kollide ! net
[Download RAW message or body]
commit 0ed61de075e78c6f75fb1794f6404409b8bb32ed
Author: Jean-Baptiste Kempf <jb@videolan.org>
Date: Thu Apr 15 00:52:06 2010 +0200
Support for MediaSource::Stream
Patch by Daniel O'Neill - ver from gangrenegang
diff --git a/vlc/CMakeLists.txt b/vlc/CMakeLists.txt
index b14d134..a721b7d 100644
--- a/vlc/CMakeLists.txt
+++ b/vlc/CMakeLists.txt
@@ -16,6 +16,8 @@ set(phonon_vlc_SRCS
mediaobject.cpp
seekstack.cpp
sinknode.cpp
+ streamhooks.cpp
+ streamreader.cpp
videowidget.cpp
vlcloader.cpp
vlcmediacontroller.cpp
diff --git a/vlc/mediaobject.cpp b/vlc/mediaobject.cpp
index 760f361..e364773 100644
--- a/vlc/mediaobject.cpp
+++ b/vlc/mediaobject.cpp
@@ -21,6 +21,7 @@
*****************************************************************************/
#include "mediaobject.h"
+#include "streamhooks.h"
#include "seekstack.h"
@@ -251,6 +252,7 @@ void MediaObject::setSource(const MediaSource & source)
}
break;
case MediaSource::Stream:
+ loadStream();
break;
default:
qCritical() << __FUNCTION__
@@ -262,6 +264,31 @@ void MediaObject::setSource(const MediaSource & source)
emit currentSourceChanged(mediaSource);
}
+void MediaObject::loadStream()
+{
+ streamReader = new StreamReader(mediaSource);
+
+ char rptr[64];
+ snprintf(rptr, sizeof(rptr), "%p", streamReadCallback);
+
+ char rdptr[64];
+ snprintf(rdptr, sizeof(rdptr), "%p", streamReadDoneCallback);
+
+ char sptr[64];
+ snprintf(sptr, sizeof(sptr), "%p", streamSeekCallback);
+
+ char srptr[64];
+ snprintf(srptr, sizeof(srptr), "%p", streamReader);
+
+ loadMedia( "imem/ffmpeg://" );
+
+ setOption("imem-cat=4");
+ setOption(QString("imem-data=%1").arg(srptr));
+ setOption(QString("imem-get=%1").arg(rptr));
+ setOption(QString("imem-release=%1").arg(rdptr));
+ setOption(QString("imem-seek=%1").arg(sptr));
+}
+
void MediaObject::setNextSource(const MediaSource & source)
{
qDebug() << __FUNCTION__;
diff --git a/vlc/mediaobject.h b/vlc/mediaobject.h
index b3ccec5..9309ae6 100644
--- a/vlc/mediaobject.h
+++ b/vlc/mediaobject.h
@@ -28,6 +28,9 @@
#include <QtCore/QObject>
#include <QtGui/QWidget>
+#include "streamreader.h"
+
+
namespace Phonon
{
namespace VLC {
@@ -96,6 +99,7 @@ protected:
virtual void seekInternal(qint64 milliseconds) = 0;
virtual qint64 currentTimeInternal() const = 0;
+ virtual void setOption(QString opt) = 0;
bool checkGaplessWaiting();
@@ -113,13 +117,14 @@ private slots:
private:
void loadMedia(const QString & filename);
+ void loadStream();
void resume();
QString PhononStateToString( Phonon::State newState );
MediaSource mediaSource;
-
+ StreamReader *streamReader;
Phonon::State currentState;
qint32 i_prefinish_mark;
diff --git a/vlc/vlcmediaobject.cpp b/vlc/vlcmediaobject.cpp
index 00505b7..b268110 100644
--- a/vlc/vlcmediaobject.cpp
+++ b/vlc/vlcmediaobject.cpp
@@ -453,5 +453,10 @@ void VLCMediaObject::removeSink( SinkNode * node )
m_sinks.removeAll( node );
}
+void VLCMediaObject::setOption(QString opt)
+{
+ libvlc_media_add_option_flag(p_vlc_media, opt.toLocal8Bit(), libvlc_media_option_trusted);
+}
+
}
} // Namespace Phonon::VLC
diff --git a/vlc/vlcmediaobject.h b/vlc/vlcmediaobject.h
index 2c60044..6bd8b6d 100644
--- a/vlc/vlcmediaobject.h
+++ b/vlc/vlcmediaobject.h
@@ -106,6 +106,7 @@ protected:
void loadMediaInternal(const QString & filename);
void playInternal();
void seekInternal(qint64 milliseconds);
+ void setOption(QString opt);
qint64 currentTimeInternal() const;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic