Loading...
Searching...
No Matches
LibavEncoderNode.hpp
1#pragma once
2#include <Gfx/Graph/OutputNode.hpp>
3#include <Gfx/Graph/encoders/GPUVideoEncoder.hpp>
4#include <Gfx/InvertYRenderer.hpp>
5#include <Gfx/Libav/LibavOutputSettings.hpp>
6
7namespace Gfx
8{
9struct LibavEncoder;
11{
12 explicit LibavEncoderNode(
13 const LibavOutputSettings&, LibavEncoder& encoder, int stream);
14 virtual ~LibavEncoderNode();
15
16 LibavEncoder& encoder;
17 int stream{};
18
19 std::weak_ptr<score::gfx::RenderList> m_renderer{};
20 QRhiTexture* m_texture{};
21 QRhiRenderBuffer* m_depthStencil{};
22 QRhiTextureRenderTarget* m_renderTarget{};
23 std::shared_ptr<score::gfx::RenderState> m_renderState{};
24
25 // GPU encoder for YUV conversion (if target is not RGBA)
26 std::unique_ptr<score::gfx::GPUVideoEncoder> m_encoder[2];
27 int m_encoderIdx{};
28
29 // Double-buffered readback for RGBA path (NDI pattern)
30 QRhiReadbackResult m_readback[2];
31 QRhiReadbackResult* m_currentReadback{&m_readback[0]};
32 Gfx::InvertYRenderer* m_inv_y_renderer{};
33
34 void startRendering() override;
35 void onRendererChange() override;
36 void render() override;
37 bool canRender() const override;
38 void stopRendering() override;
39
40 void setRenderer(std::shared_ptr<score::gfx::RenderList> r) override;
41 score::gfx::RenderList* renderer() const override;
42
43 void createOutput(score::gfx::OutputConfiguration) override;
44 void destroyOutput() override;
45
46 std::shared_ptr<score::gfx::RenderState> renderState() const override;
48 createRenderer(score::gfx::RenderList& r) const noexcept override;
49 Configuration configuration() const noexcept override;
50
51 LibavOutputSettings m_settings;
52};
53}
Definition InvertYRenderer.hpp:10
Base class for sink nodes (QWindow, spout, syphon, NDI output, ...)
Definition OutputNode.hpp:31
Definition OutputNode.hpp:18
List of nodes to be rendered to an output.
Definition RenderList.hpp:19
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:30
Definition LibavEncoder.hpp:23
Definition LibavEncoderNode.hpp:11
score::gfx::OutputNodeRenderer * createRenderer(score::gfx::RenderList &r) const noexcept override
Create a renderer in a given context for this node.
Definition LibavEncoderNode.cpp:251
Definition LibavOutputSettings.hpp:16
Definition OutputNode.hpp:11
Definition OutputNode.hpp:61