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
7#include <cstdint>
8#include <vector>
9
10namespace Gfx
11{
12struct LibavEncoder;
14{
15 explicit LibavEncoderNode(
16 const LibavOutputSettings&, LibavEncoder& encoder, int stream);
17 virtual ~LibavEncoderNode();
18
19 LibavEncoder& encoder;
20 int stream{};
21
22 std::weak_ptr<score::gfx::RenderList> m_renderer{};
23 QRhiTexture* m_texture{};
25 std::shared_ptr<score::gfx::RenderState> m_renderState{};
26
27 // GPU encoder for YUV conversion (if target is not RGBA)
28 std::unique_ptr<score::gfx::GPUVideoEncoder> m_encoder[2];
29 int m_encoderIdx{};
30
31 // Double-buffered readback for RGBA path (NDI pattern)
32 QRhiReadbackResult m_readback[2];
33 QRhiReadbackResult* m_currentReadback{&m_readback[0]};
34 Gfx::InvertYRenderer* m_inv_y_renderer{};
35
36 // 10-bit target codec with no 8-bit GPU encoder: render RGBA16F and feed
37 // libav RGBA64 (real >8-bit precision) instead of the RGBA8 fast path.
38 bool m_tenBit{};
39 std::vector<uint16_t> m_rgba64;
40
41 void startRendering() override;
42 void onRendererChange() override;
43 void render() override;
44 bool canRender() const override;
45 void stopRendering() override;
46
47 void setRenderer(std::shared_ptr<score::gfx::RenderList> r) override;
48 score::gfx::RenderList* renderer() const override;
49
50 void createOutput(score::gfx::OutputConfiguration) override;
51 void destroyOutput() override;
52
53 std::shared_ptr<score::gfx::RenderState> renderState() const override;
55 createRenderer(score::gfx::RenderList& r) const noexcept override;
56 Configuration configuration() const noexcept override;
57
58 LibavOutputSettings m_settings;
59};
60}
Definition InvertYRenderer.hpp:10
Base class for sink nodes (QWindow, spout, syphon, NDI output, ...)
Definition OutputNode.hpp:56
Definition OutputNode.hpp:38
List of nodes to be rendered to an output.
Definition RenderList.hpp:36
Binds the rendering pipeline to ossia processes.
Definition AssetTable.cpp:7
Definition LibavEncoder.hpp:24
Definition LibavEncoderNode.hpp:14
score::gfx::OutputNodeRenderer * createRenderer(score::gfx::RenderList &r) const noexcept override
Create a renderer in a given context for this node.
Definition LibavEncoderNode.cpp:315
Definition LibavOutputSettings.hpp:16
Definition OutputNode.hpp:17
Definition OutputNode.hpp:94
Useful abstraction for storing all the data related to a render target.
Definition score-plugin-gfx/Gfx/Graph/Utils.hpp:307