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
No related branches found
No related tags found
No related merge requests found
......@@ -72,13 +72,15 @@ void Video::DirectRenderer::stopRendering ()
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()) {
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();
}
......
......@@ -18,6 +18,8 @@
#ifndef VIDEO_DIRECT_RENDERER_H
#define VIDEO_DIRECT_RENDERER_H
#include <memory>
//Base
#include <QtCore/QObject>
#include "typedefs.h"
......@@ -51,7 +53,7 @@ public:
//Getter
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:
virtual void startRendering() override;
......
......@@ -23,6 +23,7 @@
#include <QtCore/QSize>
#include <atomic>
#include <memory>
class QMutex;
......@@ -44,6 +45,7 @@ public:
char* m_pFrame ;
QByteArray m_Content ;
unsigned int m_FrameSize ;
std::shared_ptr<std::vector<unsigned char> > m_iFrame;
private:
Video::Renderer* q_ptr;
......
......@@ -213,9 +213,9 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri
m_hRenderers[rid] = r;
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(
QByteArray::fromRawData(reinterpret_cast<const char *>(frame), width*height)
frame, w, h
);
});
......@@ -244,9 +244,9 @@ void VideoRendererManagerPrivate::startedDecoding(const QString& id, const QStri
#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(
QByteArray::fromRawData(reinterpret_cast<const char *>(frame), width*height)
frame, w, h
);
});
......
......@@ -196,14 +196,14 @@ public Q_SLOTS: // METHODS
#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
DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb));
#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
DRing::registerSinkTarget(sinkID.toStdString(), std::move(cb));
......
......@@ -66,11 +66,9 @@ QSize Video::Renderer::size() const
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)
d_ptr->m_Content.setRawData(d_ptr->m_pFrame,d_ptr->m_FrameSize);
return d_ptr->m_Content;
return d_ptr->m_iFrame;
}
/*****************************************************************************
......
......@@ -18,6 +18,8 @@
#ifndef VIDEO_ABSTRACT_RENDERER_H
#define VIDEO_ABSTRACT_RENDERER_H
#include <memory>
//Base
#include <QtCore/QObject>
#include <typedefs.h>
......@@ -74,7 +76,7 @@ public:
//Getters
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 QMutex* mutex () const;
virtual ColorSpace colorSpace () const = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment