[vlmc-devel] SourceRenderer: Add enableOutputToMemory

Yikai Lu git at videolan.org
Wed Jun 1 18:14:55 CEST 2016


vlmc | branch: master | Yikai Lu <luyikei.qmltu at gmail.com> | Wed May  4 19:59:22 2016 +0900| [431437682ecf73eec902110be8d64ea5308a0f58] | committer: Hugo Beauzée-Luyssen

SourceRenderer: Add enableOutputToMemory

void enableOutputToMemory( void* videoData, void* audioData, VideoOutputLockCallback videoLock, VideoOutputUnlockCallback videoUnlock,
                                           AudioOutputLockCallback audioLock, AudioOutputUnlockCallback audioUnlock, bool timeSync )

Signed-off-by: Hugo Beauzée-Luyssen <hugo at beauzee.fr>

> https://code.videolan.org/videolan/vlmc/commit/431437682ecf73eec902110be8d64ea5308a0f58
---

 src/Backend/ISourceRenderer.h         |  3 +++
 src/Backend/VLC/VLCSourceRenderer.cpp | 29 ++++++++++++++++++++++++-----
 src/Backend/VLC/VLCSourceRenderer.h   |  2 ++
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/Backend/ISourceRenderer.h b/src/Backend/ISourceRenderer.h
index ead40f8..8df7b26 100644
--- a/src/Backend/ISourceRenderer.h
+++ b/src/Backend/ISourceRenderer.h
@@ -99,6 +99,9 @@ namespace Backend
         virtual void    setTime( int64_t time ) = 0;
         virtual void    setPosition( float position ) = 0;
 
+        // For video and audio output to memory:
+        virtual void enableOutputToMemory( void* videoData, void* audioData, VideoOutputLockCallback videoLock, VideoOutputUnlockCallback videoUnlock,
+                                           AudioOutputLockCallback audioLock, AudioOutputUnlockCallback audioUnlock, bool timeSync ) = 0;
         // For video output to memory:
         virtual void enableVideoOutputToMemory( void* data, VideoOutputLockCallback lock, VideoOutputUnlockCallback unlock, bool timeSync ) = 0;
         // For audio output to memory:
diff --git a/src/Backend/VLC/VLCSourceRenderer.cpp b/src/Backend/VLC/VLCSourceRenderer.cpp
index d0b43e5..a2a4e28 100644
--- a/src/Backend/VLC/VLCSourceRenderer.cpp
+++ b/src/Backend/VLC/VLCSourceRenderer.cpp
@@ -115,8 +115,6 @@ VLCSourceRenderer::setupStreamOutput()
     QString     transcodeStr = ":sout=#transcode{";
     if ( m_modes.testFlag( VideoSmem ) || m_modes.testFlag( FileOutput ) )
     {
-        Q_ASSERT( m_modes.testFlag( AudioSmem ) == false );
-
         if ( m_outputVideoFourCC.isNull() == false )
             transcodeStr += ",vcodec=" + m_outputVideoFourCC;
         if ( m_outputVideoBitrate > 0 )
@@ -130,8 +128,6 @@ VLCSourceRenderer::setupStreamOutput()
     }
     if ( m_modes.testFlag( AudioSmem ) || m_modes.testFlag( FileOutput ) )
     {
-        Q_ASSERT( m_modes.testFlag( VideoSmem ) == false );
-
         if ( m_outputAudioFourCC.isNull() == false )
             transcodeStr += ",acodec=" + m_outputAudioFourCC;
         if ( m_outputAudioBitrate > 0 )
@@ -319,6 +315,30 @@ VLCSourceRenderer::setOutputAudioBitrate(unsigned int aBitrate)
 }
 
 void
+VLCSourceRenderer::enableOutputToMemory( void* videoData, void* audioData, VideoOutputLockCallback videoLock, VideoOutputUnlockCallback videoUnlock,
+                                         AudioOutputLockCallback audioLock, AudioOutputUnlockCallback audioUnlock, bool timeSync )
+{
+    m_modes |= VideoSmem;
+    m_modes |= AudioSmem;
+    m_smemChain = ":smem{";
+    if ( timeSync == true )
+        m_smemChain += "time-sync";
+    else
+        m_smemChain += "no-time-sync";
+    m_smemChain += ",video-data=" % QString::number( reinterpret_cast<intptr_t>( videoData ) )
+            % ",video-prerender-callback="
+            % QString::number( reinterpret_cast<intptr_t>( videoLock ) )
+            % ",video-postrender-callback="
+            % QString::number( reinterpret_cast<intptr_t>( videoUnlock ) )
+            % ",audio-data=" % QString::number( reinterpret_cast<intptr_t>( audioData ) )
+            % ",audio-prerender-callback="
+            % QString::number( reinterpret_cast<intptr_t>( audioLock ) )
+            % ",audio-postrender-callback="
+            % QString::number( reinterpret_cast<intptr_t>( audioUnlock ) )
+            % '}';
+}
+
+void
 VLCSourceRenderer::enableVideoOutputToMemory( void *data, VideoOutputLockCallback lock, VideoOutputUnlockCallback unlock, bool timeSync )
 {
     m_modes |= VideoSmem;
@@ -371,4 +391,3 @@ VLCSourceRenderer::enableMemoryInput( void *data, MemoryInputLockCallback lockCa
     sprintf( buffer, ":imem-data=%p", data );
     m_media.addOption( buffer );
 }
-
diff --git a/src/Backend/VLC/VLCSourceRenderer.h b/src/Backend/VLC/VLCSourceRenderer.h
index 44a5c80..7f8270e 100644
--- a/src/Backend/VLC/VLCSourceRenderer.h
+++ b/src/Backend/VLC/VLCSourceRenderer.h
@@ -90,6 +90,8 @@ public:
     virtual void    enableMemoryInput( void* data, MemoryInputLockCallback lockCallback, MemoryInputUnlockCallback unlockCallback ) override;
 
     // smem:
+    virtual void    enableOutputToMemory( void* videoData, void* audioData, VideoOutputLockCallback videoLock, VideoOutputUnlockCallback videoUnlock,
+                                          AudioOutputLockCallback audioLock, AudioOutputUnlockCallback audioUnlock, bool timeSync ) override;
     virtual void    enableVideoOutputToMemory( void* data, VideoOutputLockCallback lock, VideoOutputUnlockCallback unlock, bool timeSync ) override;
     virtual void    enableAudioOutputToMemory( void* data, AudioOutputLockCallback lock,
                                                AudioOutputUnlockCallback unlock, bool timeSync ) override;



More information about the Vlmc-devel mailing list