Loading...
Searching...
No Matches
GStreamerDevice.hpp
1#pragma once
2#include <Gfx/GfxDevice.hpp>
3#include <Gfx/GfxExecContext.hpp>
4#include <Gfx/GfxInputDevice.hpp>
5
6#include <Device/Protocol/DeviceInterface.hpp>
7#include <Device/Protocol/DeviceSettings.hpp>
8#include <Device/Protocol/ProtocolFactoryInterface.hpp>
9#include <Device/Protocol/ProtocolSettingsWidget.hpp>
10
11#include <Video/ExternalInput.hpp>
12#include <Video/FrameQueue.hpp>
13
14#include <ossia/gfx/texture_parameter.hpp>
15#include <ossia/network/base/device.hpp>
16#include <ossia/network/base/protocol.hpp>
17#include <ossia/network/generic/generic_device.hpp>
18#include <ossia/network/generic/generic_node.hpp>
19
20#include <verdigris>
21
22class QPlainTextEdit;
23class QFormLayout;
24class QLineEdit;
25
26namespace Gfx::GStreamer
27{
28
30{
31 QString pipeline;
32
33 // Output-specific settings (used when pipeline contains appsrc)
34 int width{1280};
35 int height{720};
36 int rate{30};
37 int audio_channels{2};
38
39 // Input transfer function: what colorspace is the rendered RGBA texture in?
40 // 13 = sRGB (default), 8 = Linear, 16 = PQ (HDR10), 18 = HLG, 2 = Passthrough
41 // Stored as int to avoid including ffmpeg headers here; maps to AVColorTransferCharacteristic.
42 int input_transfer{13}; // AVCOL_TRC_IEC61966_2_1 (sRGB)
43};
44
45// Returns true if the pipeline string contains appsrc (output mode)
46inline bool pipeline_is_output(const QString& pipeline)
47{
48 return pipeline.contains(QStringLiteral("appsrc"));
49}
50
52{
53 SCORE_CONCRETE("2c644357-16a4-4c25-9e27-8e5c4a9a647d")
54public:
55 QString prettyName() const noexcept override;
56 QString category() const noexcept override;
57 QUrl manual() const noexcept override;
58
59 Device::DeviceEnumerators
60 getEnumerators(const score::DocumentContext& ctx) const override;
61
62 Device::DeviceInterface* makeDevice(
63 const Device::DeviceSettings& settings,
64 const Explorer::DeviceDocumentPlugin& plugin,
65 const score::DocumentContext& ctx) override;
66 const Device::DeviceSettings& defaultSettings() const noexcept override;
67
68 Device::AddressDialog* makeAddAddressDialog(
70 QWidget* parent) override;
71 Device::AddressDialog* makeEditAddressDialog(
73 const score::DocumentContext& ctx, QWidget*) override;
74
75 Device::ProtocolSettingsWidget* makeSettingsWidget() override;
76
77 QVariant makeProtocolSpecificSettings(const VisitorVariant& visitor) const override;
78
79 void serializeProtocolSpecificSettings(
80 const QVariant& data, const VisitorVariant& visitor) const override;
81
82 bool checkCompatibility(
84 const Device::DeviceSettings& b) const noexcept override;
85};
86
87}
88
89SCORE_SERIALIZE_DATASTREAM_DECLARE(, Gfx::GStreamer::GStreamerSettings);
90Q_DECLARE_METATYPE(Gfx::GStreamer::GStreamerSettings)
91W_REGISTER_ARGTYPE(Gfx::GStreamer::GStreamerSettings)
Definition ProtocolSettingsWidget.hpp:46
Definition DeviceInterface.hpp:66
Definition ProtocolFactoryInterface.hpp:49
Definition ProtocolSettingsWidget.hpp:27
Definition GStreamerDevice.hpp:52
Definition AddressSettings.hpp:49
Definition DeviceSettings.hpp:20
Definition GStreamerDevice.hpp:30
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition DocumentContext.hpp:18