CVB++ 15.0
codec_bridge.hpp
1#pragma once
2
3#include <memory>
4
5#include "../_cexports/c_codec_bridge.h"
6
7#include "../utilities/system_info.hpp"
8#include "../global.hpp"
9
10namespace Cvb
11{
12
13 CVB_BEGIN_INLINE_NS
14
16
23 namespace CodecBridge
24 {
25
26 class Decoder;
29
30 class Encoder;
33
34 class CodecConfig;
37
38 class FormatConverter;
41
42 class Frame;
45
46 class InputContainer;
49
50 class OutputContainer;
53
54 class Packet;
57
59
64 enum class LogLevel
65 {
67 Quiet = CExports::CVCBLL_Quiet,
69 Panic = CExports::CVCBLL_Panic,
71 Fatal = CExports::CVCBLL_Fatal,
73 Error = CExports::CVCBLL_Error,
75 Warning = CExports::CVCBLL_Warning,
77 Info = CExports::CVCBLL_Info,
79 Verbose = CExports::CVCBLL_Verbose,
81 Debug = CExports::CVCBLL_Debug,
83 Trace = CExports::CVCBLL_Trace,
84 };
85
87
90 enum class PixelFormat
91 {
93 None = CExports::CVCBPF_None,
95 YUV420P = CExports::CVCBPF_YUV420P,
97 YUYV422 = CExports::CVCBPF_YUYV422,
99 RGB24 = CExports::CVCBPF_RGB24,
101 BGR24 = CExports::CVCBPF_BGR24,
103 YUV422P = CExports::CVCBPF_YUV422P,
105 YUV444P = CExports::CVCBPF_YUV444P,
107 GRAY8 = CExports::CVCBPF_GRAY8,
109 NV12 = CExports::CVCBPF_NV12,
111 NV21 = CExports::CVCBPF_NV21,
113 RGBA = CExports::CVCBPF_RGBA,
115 BGRA = CExports::CVCBPF_BGRA,
117 YUV444P16LE = CExports::CVCBPF_YUV444P16LE,
119 DXVA2_VLD = CExports::CVCBPF_DXVA2_VLD,
121 YUV420P10LE = CExports::CVCBPF_YUV420P10LE,
123 YUV422P10LE = CExports::CVCBPF_YUV422P10LE,
125 YUV444P10LE = CExports::CVCBPF_YUV444P10LE,
127 GBRP = CExports::CVCBPF_GBRP,
129 GBRP10LE = CExports::CVCBPF_GBRP10LE,
131 GBRP16LE = CExports::CVCBPF_GBRP16LE,
133 NV16 = CExports::CVCBPF_NV16,
135 NV20LE = CExports::CVCBPF_NV20LE,
137 QSV = CExports::CVCBPF_QSV,
139 CUDA = CExports::CVCBPF_CUDA,
141 RGB0 = CExports::CVCBPF_RGB0,
143 BGR0 = CExports::CVCBPF_BGR0,
145 YUV420P12LE = CExports::CVCBPF_YUV420P12LE,
147 YUV422P12LE = CExports::CVCBPF_YUV422P12LE,
149 YUV444P12LE = CExports::CVCBPF_YUV444P12LE,
151 GBRP12LE = CExports::CVCBPF_GBRP12LE,
153 P010LE = CExports::CVCBPF_P010LE,
155 GRAY12LE = CExports::CVCBPF_GRAY12LE,
157 GRAY10LE = CExports::CVCBPF_GRAY10LE,
159 P016LE = CExports::CVCBPF_P016LE,
161 D3D11 = CExports::CVCBPF_D3D11,
163 Y210LE = CExports::CVCBPF_Y210LE,
165 X2RGB10LE = CExports::CVCBPF_X2RGB10LE,
167 X2BGR10LE = CExports::CVCBPF_X2BGR10LE,
168 };
169
171
174 enum class Interpolation
175 {
177 BilinearFast = CExports::CVCBI_BilinearFast,
179 Bilinear = CExports::CVCBI_Bilinear,
181 Bicubic = CExports::CVCBI_Bicubic,
182 };
183
185 enum class CodecStatus
186 {
188 Ok = CExports::CVCBCS_Ok,
190 ReadoutRequired = CExports::CVCBCS_ReadoutRequired
191 };
192
194
198 class Rational final
199 {
200
201 public:
202 Rational(int numerator, int denominator) noexcept
203 : numerator_(numerator)
204 , denominator_(denominator)
205 {
206 }
207
208 Rational() noexcept = default;
209 Rational(const Rational &other) noexcept = default;
210 Rational &operator=(const Rational &other) noexcept = default;
211 Rational(Rational &&other) noexcept = default;
212 Rational &operator=(Rational &&other) noexcept = default;
213 ~Rational() = default;
214
215 int Numerator() const noexcept
216 {
217 return numerator_;
218 }
219
220 void SetNumerator(int numerator) noexcept
221 {
222 numerator_ = numerator;
223 }
224
225 int Denominator() const noexcept
226 {
227 return denominator_;
228 }
229
230 void SetDenominator(int denominator) noexcept
231 {
232 denominator_ = denominator;
233 }
234
236
241 bool operator==(const Rational &other) const noexcept
242 {
243 return numerator_ == other.numerator_ && denominator_ == other.denominator_;
244 }
245
247
252 bool operator!=(const Rational &other) const noexcept
253 {
254 return !(*this == other);
255 }
256
257 private:
259 int32_t numerator_ = 0;
261 int32_t denominator_ = 1;
262 };
263
264 inline void SetBackendLogLevel(LogLevel logLevel)
265 {
266 CVB_CALL_CAPI_CHECKED(CVCBSetBackendLogLevel(static_cast<CExports::CVCBLogLevel>(logLevel)));
267 }
268 } // namespace CodecBridge
269
270 CVB_END_INLINE_NS
271
272} // namespace Cvb
A configuration defining a codec.
Definition codec_config.hpp:32
A decoder for video frames.
Definition decoder.hpp:32
An encoder for video frames.
Definition encoder.hpp:32
A format converter for video frames.
Definition format_converter.hpp:29
A video frame for encoding and decoding.
Definition frame.hpp:30
A container file for reading encoded videos from disk.
Definition input_container.hpp:30
A container file for writing encoded videos to disk.
Definition output_container.hpp:30
A packet that holds encoded data frame data.
Definition packet.hpp:27
bool operator!=(const Rational &other) const noexcept
Compares to an other rational.
Definition codec_bridge.hpp:252
bool operator==(const Rational &other) const noexcept
Compares to an other rational.
Definition codec_bridge.hpp:241
Namespace for encoding and decoding videos.
Definition codec_bridge.hpp:24
std::shared_ptr< FormatConverter > FormatConverterPtr
Convenience shared pointer for FormatConverter.
Definition codec_bridge.hpp:40
std::shared_ptr< Frame > FramePtr
Convenience shared pointer for Frame.
Definition codec_bridge.hpp:44
std::shared_ptr< Packet > PacketPtr
Convenience shared pointer for Packet.
Definition codec_bridge.hpp:56
std::shared_ptr< OutputContainer > OutputContainerPtr
Convenience shared pointer for OutputContainer.
Definition codec_bridge.hpp:52
CodecStatus
Status of the encoder/decoder after sending data.
Definition codec_bridge.hpp:186
@ ReadoutRequired
The data was not accepted. Receive the processed data fist.
Definition codec_bridge.hpp:190
@ Ok
The data was accepted.
Definition codec_bridge.hpp:188
PixelFormat
Subset of FFmpeg pixel formats.
Definition codec_bridge.hpp:91
@ BGR0
Equal to PIX_FMT_BGR0. Corresponds to PfncFormat::BGRa8, but the alpah channel is ignored.
Definition codec_bridge.hpp:143
@ RGB24
Equal to PIX_FMT_RGB24. Corresponds to PfncFormat::RGB8.
Definition codec_bridge.hpp:99
@ YUV444P
Equal to PIX_FMT_YUV444P.
Definition codec_bridge.hpp:105
@ NV12
Equal to PIX_FMT_NV12.
Definition codec_bridge.hpp:109
@ GBRP10LE
Equal to PIX_FMT_GBRP10LE. Corresponds to PfncFormat::BayerGB10.
Definition codec_bridge.hpp:129
@ YUV420P10LE
Equal to PIX_FMT_YUV420P10LE.
Definition codec_bridge.hpp:121
@ YUYV422
Equal to PIX_FMT_YUYV422.
Definition codec_bridge.hpp:97
@ GRAY12LE
Equal to PIX_FMT_GRAY12LE. Corresponds to PfncFormat::Mono12.
Definition codec_bridge.hpp:155
@ GRAY10LE
Equal to PIX_FMT_GRAY10LE. Corresponds to PfncFormat::Mono10.
Definition codec_bridge.hpp:157
@ BGRA
Equal to PIX_FMT_BGRA. Corresponds to PfncFormat::BGRa8.
Definition codec_bridge.hpp:115
@ P010LE
Equal to PIX_FMT_P010LE.
Definition codec_bridge.hpp:153
@ YUV422P10LE
Equal to PIX_FMT_YUV422P10LE.
Definition codec_bridge.hpp:123
@ None
Ivalid format. Equal to PIX_FMT_NONE. Corresponds to PfncFormat::InvalidPixelFormat.
Definition codec_bridge.hpp:93
@ GBRP16LE
Equal to PIX_FMT_GBRP16LE. Corresponds to PfncFormat::BayerGB16.
Definition codec_bridge.hpp:131
@ Y210LE
Equal to PIX_FMT_Y210LE.
Definition codec_bridge.hpp:163
@ NV21
Equal to PIX_FMT_NV21.
Definition codec_bridge.hpp:111
@ GBRP12LE
Equal to PIX_FMT_GBRP12LE.
Definition codec_bridge.hpp:151
@ X2RGB10LE
Equal to PIX_FMT_X2RGB10LE.
Definition codec_bridge.hpp:165
@ CUDA
Equal to PIX_FMT_CUDA.
Definition codec_bridge.hpp:139
@ GBRP
Equal to PIX_FMT_GBRP. Corresponds to PfncFormat::BayerGB8.
Definition codec_bridge.hpp:127
@ GRAY8
Equal to PIX_FMT_GRAY8. Corresponds to PfncFormat::Mono8.
Definition codec_bridge.hpp:107
@ DXVA2_VLD
Equal to PIX_FMT_DXVA2_VLD.
Definition codec_bridge.hpp:119
@ YUV444P10LE
Equal to PIX_FMT_YUV444P10LE.
Definition codec_bridge.hpp:125
@ YUV422P12LE
Equal to PIX_FMT_YUV422P12LE.
Definition codec_bridge.hpp:147
@ D3D11
Equal to PIX_FMT_D3D11.
Definition codec_bridge.hpp:161
@ QSV
Equal to PIX_FMT_QSV.
Definition codec_bridge.hpp:137
@ NV16
Equal to PIX_FMT_NV16.
Definition codec_bridge.hpp:133
@ RGB0
Equal to PIX_FMT_RGB0. Corresponds to PfncFormat::RGBa8, but the alpah channel is ignored.
Definition codec_bridge.hpp:141
@ YUV444P16LE
Equal to PIX_FMT_YUV444P16LE.
Definition codec_bridge.hpp:117
@ YUV422P
Equal to PIX_FMT_YUV422P.
Definition codec_bridge.hpp:103
@ YUV444P12LE
Equal to PIX_FMT_YUV444P12LE.
Definition codec_bridge.hpp:149
@ RGBA
Equal to PIX_FMT_RGBA. Corresponds to PfncFormat::RGBa8.
Definition codec_bridge.hpp:113
@ YUV420P
Equal to PIX_FMT_YUV420P.
Definition codec_bridge.hpp:95
@ X2BGR10LE
Equal to PIX_FMT_X2BGR10LE.
Definition codec_bridge.hpp:167
@ YUV420P12LE
Equal to PIX_FMT_YUV420P12LE.
Definition codec_bridge.hpp:145
@ NV20LE
Equal to PIX_FMT_NV20LE.
Definition codec_bridge.hpp:135
@ BGR24
Equal to PIX_FMT_BGR24. Corresponds to PfncFormat::BGR8.
Definition codec_bridge.hpp:101
@ P016LE
Equal to PIX_FMT_P016LE.
Definition codec_bridge.hpp:159
std::shared_ptr< CodecConfig > CodecConfigPtr
Convenience shared pointer for CodecConfig.
Definition codec_bridge.hpp:36
Interpolation
Interpolation method when scaling frames.
Definition codec_bridge.hpp:175
@ Bicubic
Equal to SWS_BICUBIC.
Definition codec_bridge.hpp:181
@ BilinearFast
Equal to FAST_BILINEAR.
Definition codec_bridge.hpp:177
@ Bilinear
Equal to SWS_BILINEAR.
Definition codec_bridge.hpp:179
std::shared_ptr< Encoder > EncoderPtr
Convenience shared pointer for Encoder.
Definition codec_bridge.hpp:32
LogLevel
Log level for the codecs.
Definition codec_bridge.hpp:65
@ Quiet
Equal to FFmpeg level: AV_LOG_QUIET.
Definition codec_bridge.hpp:67
@ Warning
Equal to FFmpeg level: AV_LOG_WARNING.
Definition codec_bridge.hpp:75
@ Info
Equal to FFmpeg level: AV_LOG_INFO.
Definition codec_bridge.hpp:77
@ Fatal
Equal to FFmpeg level: AV_LOG_FATAL.
Definition codec_bridge.hpp:71
@ Error
Equal to FFmpeg level: AV_LOG_ERROR.
Definition codec_bridge.hpp:73
@ Debug
Equal to FFmpeg level: AV_LOG_DEBUG.
Definition codec_bridge.hpp:81
@ Verbose
Equal to FFmpeg level: AV_LOG_VERBOSE.
Definition codec_bridge.hpp:79
@ Panic
Equal to FFmpeg level: AV_LOG_PANIC.
Definition codec_bridge.hpp:69
@ Trace
Equal to FFmpeg level: AV_LOG_TRACE.
Definition codec_bridge.hpp:83
std::shared_ptr< InputContainer > InputContainerPtr
Convenience shared pointer for InputContainer.
Definition codec_bridge.hpp:48
std::shared_ptr< Decoder > DecoderPtr
Convenience shared pointer for Decoder.
Definition codec_bridge.hpp:28
Root namespace for the Image Manager interface.
Definition c_bayer_to_rgb.h:17