[vlmc-devel] [PATCH 1/4] VmemRenderer, VLCSource: Don't use QImage to store a snapshot
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Tue Apr 12 14:34:01 CEST 2016
On 04/12/2016 01:10 PM, Yikai Lu wrote:
> ---
> src/Backend/VLC/VLCSource.cpp | 2 +-
> src/Backend/VLC/VLCSource.h | 4 ++--
> src/Backend/VLC/VLCVmemRenderer.cpp | 12 ++++++------
> src/Backend/VLC/VLCVmemRenderer.h | 6 ++----
> 4 files changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/src/Backend/VLC/VLCSource.cpp b/src/Backend/VLC/VLCSource.cpp
> index 39fa756..d38d12f 100644
> --- a/src/Backend/VLC/VLCSource.cpp
> +++ b/src/Backend/VLC/VLCSource.cpp
> @@ -176,7 +176,7 @@ VLCSource::snapshot() const
> {
> if ( hasVideo() == false || m_snapshot == nullptr )
> return nullptr;
> - return m_snapshot->bits();
> + return m_snapshot;
> }
>
> int64_t
> diff --git a/src/Backend/VLC/VLCSource.h b/src/Backend/VLC/VLCSource.h
> index 60ecb11..10a7d08 100644
> --- a/src/Backend/VLC/VLCSource.h
> +++ b/src/Backend/VLC/VLCSource.h
> @@ -23,7 +23,7 @@
> #ifndef VLCRSOURCE_H
> #define VLCRSOURCE_H
>
> -#include <QImage>
> +#include <QtGlobal>
>
> #include "Backend/ISource.h"
> #include "libvlcpp/vlcpp/vlc.hpp"
> @@ -69,7 +69,7 @@ private:
> unsigned int m_nbVideoTracks;
> unsigned int m_nbAudioTracks;
> int64_t m_length; //in milliseconds.
> - QImage* m_snapshot;
> + uint8_t* m_snapshot;
> bool m_isParsed;
> int64_t m_nbFrames;
> };
> diff --git a/src/Backend/VLC/VLCVmemRenderer.cpp b/src/Backend/VLC/VLCVmemRenderer.cpp
> index d840e31..d062bbe 100644
> --- a/src/Backend/VLC/VLCVmemRenderer.cpp
> +++ b/src/Backend/VLC/VLCVmemRenderer.cpp
> @@ -35,8 +35,7 @@ VmemRenderer::VmemRenderer( VLCBackend* backend, VLCSource *source , ISourceRend
> {
> m_media.parse();
> setName( "VmemRenderer" );
> - m_snapshot = new QImage( 320, 180, QImage::Format_RGB32 );
> - m_mediaPlayer.setVideoFormat( "RV32", m_snapshot->width(), m_snapshot->height(), m_snapshot->bytesPerLine() );
> + m_mediaPlayer.setVideoFormat( "RV32", 320, 180, 320 * 4 );
> m_mediaPlayer.setVideoCallbacks(
> // Lock:
> [this]( void** planes ) {
> @@ -60,7 +59,7 @@ VmemRenderer::~VmemRenderer()
> * destroyed in a potentially locked state, while the vmem tries to lock/unlock.
> */
> stop();
> - delete m_snapshot;
> + delete[] m_snapshot;
> }
>
> ::VLC::MediaPlayer&
> @@ -69,21 +68,22 @@ VmemRenderer::mediaPlayer()
> return m_mediaPlayer;
> }
>
> -QImage*
> +uint8_t*
> VmemRenderer::waitSnapshot()
> {
> QMutexLocker lock( &m_mutex );
> m_snapshotRequired = true;
> if ( m_waitCond.wait( &m_mutex, 3000 ) == false )
> return nullptr;
> - return new QImage( *m_snapshot );
> + return m_snapshot;
> }
>
> void*
> VmemRenderer::vmemLock( void **planes)
> {
> QMutexLocker lock( &m_mutex );
> - *planes = m_snapshot->bits();
> + m_snapshot = new uint8_t[320 * 180 * 4];
> + *planes = m_snapshot;
> return m_snapshot;
> }
>
> diff --git a/src/Backend/VLC/VLCVmemRenderer.h b/src/Backend/VLC/VLCVmemRenderer.h
> index 447d6bc..89b105d 100644
> --- a/src/Backend/VLC/VLCVmemRenderer.h
> +++ b/src/Backend/VLC/VLCVmemRenderer.h
> @@ -28,8 +28,6 @@
>
> #include "VLCSourceRenderer.h"
>
> -class QImage;
> -
> namespace Backend
> {
> namespace VLC
> @@ -49,14 +47,14 @@ public:
> * the caller.
> * @return
> */
> - QImage *waitSnapshot();
> + uint8_t *waitSnapshot();
>
> private:
> void* vmemLock( void **planes );
> void vmemUnlock( void* picture );
>
> private:
> - QImage* m_snapshot;
> + uint8_t* m_snapshot;
> bool m_snapshotRequired;
> QMutex m_mutex;
> QWaitCondition m_waitCond;
>
Nice! Thanks :)
More information about the Vlmc-devel
mailing list