Loading...
Searching...
No Matches
LibavDevice.hpp
1#pragma once
2#include <Media/Libav.hpp>
3#if SCORE_HAS_LIBAV
4
5#include <Gfx/GfxDevice.hpp>
6#include <Gfx/GfxInputDevice.hpp>
7#include <Gfx/Libav/LibavOutputSettings.hpp>
8
9#include <Device/Protocol/DeviceInterface.hpp>
10#include <Device/Protocol/DeviceSettings.hpp>
11#include <Device/Protocol/ProtocolFactoryInterface.hpp>
12#include <Device/Protocol/ProtocolSettingsWidget.hpp>
13
14#include <ossia/detail/hash_map.hpp>
15
16#include <verdigris>
17
18class QComboBox;
19class QFormLayout;
20class QLineEdit;
21class QPlainTextEdit;
22class QSpinBox;
23
24namespace Gfx
25{
26
28{
29 enum Direction
30 {
31 Input,
32 Output
33 };
34
35 Direction direction{Input};
36 QString path;
37
38 // Shared
39 int width{1280};
40 int height{720};
41 double rate{30};
42 int audio_channels{2};
43 int threads{0};
44
45 // Output-specific
46 QString audio_encoder_short, audio_encoder_long;
47 QString audio_converted_smpfmt;
48 int audio_sample_rate{44100};
49 QString video_encoder_short, video_encoder_long;
50 QString video_render_pixfmt;
51 QString video_converted_pixfmt;
52 QString muxer, muxer_long;
53 ossia::hash_map<QString, QString> options;
54 int input_transfer{13}; // AVColorTransferCharacteristic: 13=sRGB
55
56 // Convert to LibavOutputSettings for the encoder
57 LibavOutputSettings toOutputSettings() const
58 {
60 s.path = path;
61 s.width = width;
62 s.height = height;
63 s.rate = rate;
64 s.audio_channels = audio_channels;
65 s.threads = threads;
66 s.audio_encoder_short = audio_encoder_short;
67 s.audio_encoder_long = audio_encoder_long;
68 s.audio_converted_smpfmt = audio_converted_smpfmt;
69 s.audio_sample_rate = audio_sample_rate;
70 s.video_encoder_short = video_encoder_short;
71 s.video_encoder_long = video_encoder_long;
72 s.video_render_pixfmt = video_render_pixfmt;
73 s.video_converted_pixfmt = video_converted_pixfmt;
74 s.muxer = muxer;
75 s.muxer_long = muxer_long;
76 s.options = options;
77 s.input_transfer = input_transfer;
78 return s;
79 }
80};
81
83{
84 SCORE_CONCRETE("8b3e4f2a-1d5c-4e7b-a9f3-6c2d8e4b1a7f")
85public:
86 QString prettyName() const noexcept override;
87 QString category() const noexcept override;
88 QUrl manual() const noexcept override;
89
90 Device::DeviceEnumerators
91 getEnumerators(const score::DocumentContext& ctx) const override;
92
93 Device::DeviceInterface* makeDevice(
94 const Device::DeviceSettings& settings,
95 const Explorer::DeviceDocumentPlugin& plugin,
96 const score::DocumentContext& ctx) override;
97 const Device::DeviceSettings& defaultSettings() const noexcept override;
98
99 Device::AddressDialog* makeAddAddressDialog(
100 const Device::DeviceInterface& dev, const score::DocumentContext& ctx,
101 QWidget* parent) override;
102 Device::AddressDialog* makeEditAddressDialog(
104 const score::DocumentContext& ctx, QWidget*) override;
105
106 Device::ProtocolSettingsWidget* makeSettingsWidget() override;
107
108 QVariant makeProtocolSpecificSettings(const VisitorVariant& visitor) const override;
109
110 void serializeProtocolSpecificSettings(
111 const QVariant& data, const VisitorVariant& visitor) const override;
112
113 bool checkCompatibility(
114 const Device::DeviceSettings& a,
115 const Device::DeviceSettings& b) const noexcept override;
116};
117
118}
119
120SCORE_SERIALIZE_DATASTREAM_DECLARE(, Gfx::LibavSettings);
121Q_DECLARE_METATYPE(Gfx::LibavSettings)
122W_REGISTER_ARGTYPE(Gfx::LibavSettings)
123#endif
Definition ProtocolSettingsWidget.hpp:46
Definition DeviceInterface.hpp:66
Definition ProtocolFactoryInterface.hpp:49
Definition ProtocolSettingsWidget.hpp:27
Definition LibavDevice.hpp:83
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:30
Definition AddressSettings.hpp:49
Definition DeviceSettings.hpp:20
Definition LibavOutputSettings.hpp:16
Definition LibavDevice.hpp:28
The VisitorVariant struct.
Definition VisitorInterface.hpp:26
Definition DocumentContext.hpp:18