Skip to content
Snippets Groups Projects
Commit 12aa1880 authored by Edric Milaret's avatar Edric Milaret
Browse files

directrenderer: Use smart ptr for frame

-Also set the size for every frame

-Warning : This break frame retrieval for OS X

Refs #75280

Change-Id: I9f000988345e16ae6778dcdd1f238a3866d4a6eb
parent c3dda3f5
Branches
Tags
No related merge requests found
...@@ -72,13 +72,15 @@ void Video::DirectRenderer::stopRendering () ...@@ -72,13 +72,15 @@ void Video::DirectRenderer::stopRendering ()
emit stopped(); emit stopped();
} }
void Video::DirectRenderer::onNewFrame(const QByteArray& frame) void Video::DirectRenderer::onNewFrame(const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h)
{ {
if (!isRendering()) { if (!isRendering()) {
return; return;
} }
Video::Renderer::d_ptr->m_pFrame = const_cast<char*>(frame.data()); Video::Renderer::d_ptr->m_pSize.setWidth(w);
Video::Renderer::d_ptr->m_pSize.setHeight(h);
Video::Renderer::d_ptr->m_iFrame = frame;
emit frameUpdated(); emit frameUpdated();
} }
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#ifndef VIDEO_DIRECT_RENDERER_H #ifndef VIDEO_DIRECT_RENDERER_H
#define VIDEO_DIRECT_RENDERER_H #define VIDEO_DIRECT_RENDERER_H
#include <memory>
//Base //Base
#include <QtCore/QObject> #include <QtCore/QObject>
#include "typedefs.h" #include "typedefs.h"
...@@ -51,7 +53,7 @@ public: ...@@ -51,7 +53,7 @@ public:
//Getter //Getter
virtual ColorSpace colorSpace() const override; virtual ColorSpace colorSpace() const override;
void onNewFrame(const QByteArray& frame); void onNewFrame(const std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h);
public Q_SLOTS: public Q_SLOTS:
virtual void startRendering() override; virtual void startRendering() override;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <QtCore/QSize> #include <QtCore/QSize>
#include <atomic> #include <atomic>
#include <memory>
class QMutex; class QMutex;
...@@ -44,6 +45,7 @@ public: ...@@ -44,6 +45,7 @@ public:
char* m_pFrame ; char* m_pFrame ;
QByteArray m_Content ; QByteArray m_Content ;
unsigned int m_FrameSize ; unsigned int m_FrameSize ;
std::shared_ptr<std::vector<unsigned char> > m_iFrame;
private: private:
Video::Renderer* q_ptr; Video::Renderer* q_ptr;
......
...@@ -213,9 +213,9 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri ...@@ -213,9 +213,9 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri
m_hRenderers[rid] = r; m_hRenderers[rid] = r;
m_hRendererIds[r]=rid; m_hRendererIds[r]=rid;
DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (const unsigned char* frame) { DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) {
static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame( static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame(
QByteArray::fromRawData(reinterpret_cast<const char *>(frame), width*height) frame, w, h
); );
}); });
...@@ -244,9 +244,9 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri ...@@ -244,9 +244,9 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri
#ifdef ENABLE_LIBWRAP #ifdef ENABLE_LIBWRAP
DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (const unsigned char* frame) { DBus::VideoManager::instance().registerSinkTarget(id, [this, id, width, height] (std::shared_ptr<std::vector<unsigned char> >& frame, int w, int h) {
static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame( static_cast<Video::DirectRenderer*>(m_hRenderers[id.toLatin1()])->onNewFrame(
QByteArray::fromRawData(reinterpret_cast<const char *>(frame), width*height) frame, w, h
); );
}); });
......
...@@ -196,14 +196,14 @@ public Q_SLOTS: // METHODS ...@@ -196,14 +196,14 @@ public Q_SLOTS: // METHODS
#endif #endif
} }
void registerSinkTarget(const QString &sinkID, std::function<void(uint8_t*)>&& cb) void registerSinkTarget(const QString &sinkID, std::function<void(std::shared_ptr<std::vector<unsigned char> >&, int, int)>&& cb)
{ {
#ifdef ENABLE_VIDEO #ifdef ENABLE_VIDEO
DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb)); DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb));
#endif #endif
} }
void registerSinkTarget(const QString &sinkID, std::function<void(uint8_t*)>& cb) void registerSinkTarget(const QString &sinkID, std::function<void(std::shared_ptr<std::vector<unsigned char> >&, int, int)>& cb)
{ {
#ifdef ENABLE_VIDEO #ifdef ENABLE_VIDEO
DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb)); DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb));
......
...@@ -66,11 +66,9 @@ QSize Video::Renderer::size() const ...@@ -66,11 +66,9 @@ QSize Video::Renderer::size() const
return d_ptr->m_pSize; return d_ptr->m_pSize;
} }
const QByteArray& Video::Renderer::currentFrame() const const std::shared_ptr<std::vector<unsigned char> >& Video::Renderer::currentFrame() const
{ {
if (d_ptr->m_pFrame && d_ptr->m_FrameSize) return d_ptr->m_iFrame;
d_ptr->m_Content.setRawData(d_ptr->m_pFrame,d_ptr->m_FrameSize);
return d_ptr->m_Content;
} }
/***************************************************************************** /*****************************************************************************
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#ifndef VIDEO_ABSTRACT_RENDERER_H #ifndef VIDEO_ABSTRACT_RENDERER_H
#define VIDEO_ABSTRACT_RENDERER_H #define VIDEO_ABSTRACT_RENDERER_H
#include <memory>
//Base //Base
#include <QtCore/QObject> #include <QtCore/QObject>
#include <typedefs.h> #include <typedefs.h>
...@@ -74,7 +76,7 @@ public: ...@@ -74,7 +76,7 @@ public:
//Getters //Getters
virtual bool isRendering () const; virtual bool isRendering () const;
virtual const QByteArray& currentFrame () const; virtual const std::shared_ptr<std::vector<unsigned char> >& currentFrame () const;
virtual QSize size () const; virtual QSize size () const;
virtual QMutex* mutex () const; virtual QMutex* mutex () const;
virtual ColorSpace colorSpace () const = 0; virtual ColorSpace colorSpace () const = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment