[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