Loading...
Searching...
No Matches
WireEncoderFactory.hpp
Go to the documentation of this file.
1#pragma once
2
30#include <Gfx/Graph/encoders/BGRA.hpp>
31#include <Gfx/Graph/encoders/BGRACompute.hpp>
32#include <Gfx/Graph/encoders/ComputeEncoder.hpp>
33#include <Gfx/Graph/encoders/GPUVideoEncoder.hpp>
34#include <Gfx/Graph/encoders/NV12.hpp>
35#include <Gfx/Graph/encoders/P010.hpp>
36#include <Gfx/Graph/encoders/PackedRGB.hpp>
37#include <Gfx/Graph/encoders/UYVY.hpp>
38#include <Gfx/Graph/encoders/UYVYCompute.hpp>
39#include <Gfx/Graph/encoders/V210.hpp>
40#include <Gfx/Graph/encoders/V210Compute.hpp>
41#include <Gfx/Graph/encoders/YUV422P10.hpp>
42#include <Gfx/Graph/encoders/YUVPlanar.hpp>
43#include <Gfx/Graph/encoders/YUY2.hpp>
45
46#include <memory>
47
48namespace score::gfx
49{
50
53inline std::unique_ptr<GPUVideoEncoder>
55{
57 switch(fmt)
58 {
59 // -- packed 8-bit YUV 4:2:2 --
60 case F::UYVY422:
61 return std::make_unique<UYVYEncoder>();
62 case F::YUYV422:
63 return std::make_unique<YUY2Encoder>();
64
65 // -- packed 10-bit YUV 4:2:2 --
66 case F::V210:
67 return std::make_unique<V210Encoder>();
68
69 // -- packed 8-bit RGB (VideoPixelFormat names are *memory* byte order) --
70 case F::BGRA8: // memory [B,G,R,A]
71 return std::make_unique<BGRAEncoder>(BGRAEncoder::Swizzle::BGRA);
72 case F::RGBA8: // memory [R,G,B,A]
73 return std::make_unique<BGRAEncoder>(BGRAEncoder::Swizzle::RGBA);
74 case F::ARGB8: // memory [A,R,G,B]
75 return std::make_unique<BGRAEncoder>(BGRAEncoder::Swizzle::ARGB);
76 case F::ABGR8: // memory [A,B,G,R]
77 return std::make_unique<BGRAEncoder>(BGRAEncoder::Swizzle::ABGR);
78 case F::RGB24:
79 return PackedRGBEncoder::rgb24();
80 case F::BGR24:
81 return PackedRGBEncoder::bgr24();
82
83 // -- packed 10/12-bit RGB --
84 case F::R210:
85 return PackedRGBEncoder::r210be(); // DeckLink r210: R-high, big-endian
86 case F::RGB10:
87 return PackedRGBEncoder::rgb10(); // AJA 10BIT_RGB: B-high, little-endian
88 case F::ARGB10:
89 return PackedRGBEncoder::argb10();
90 case F::DPX10:
91 return PackedRGBEncoder::dpx10be();
92 case F::DPX10LE:
93 return PackedRGBEncoder::dpx10le();
94 case F::RGB12P:
95 return PackedRGBEncoder::rgb12packed();
96 case F::RGB48:
97 return PackedRGBEncoder::rgb48();
98
99 // -- planar / semi-planar (capture-card output is rare; mostly capture) --
100 case F::YUV422P10:
101 return std::make_unique<YUV422P10Encoder>();
102 case F::YUV422P:
103 return YUVPlanarEncoder::p422_8();
104 case F::YUV420P:
105 return YUVPlanarEncoder::p420_8();
106 case F::YUV420P10:
107 return YUVPlanarEncoder::p420_10();
108 case F::NV12:
109 return std::make_unique<NV12Encoder>();
110 case F::P010:
111 return std::make_unique<P010Encoder>();
112
113 default:
114 return nullptr;
115 }
116}
117
120inline std::unique_ptr<ComputeEncoder>
122{
124 switch(fmt)
125 {
126 case F::V210:
127 return std::make_unique<V210ComputeEncoder>();
128 case F::UYVY422:
129 return std::make_unique<UYVYComputeEncoder>();
130 case F::BGRA8:
131 return std::make_unique<BGRAComputeEncoder>();
132 default:
133 return nullptr;
134 }
135}
136
139inline bool
141{
143 switch(fmt)
144 {
145 case F::V210:
146 return (width % 6) == 0;
147 case F::UYVY422:
148 return (width % 2) == 0;
149 case F::BGRA8:
150 return true;
151 default:
152 return false;
153 }
154}
155
156} // namespace score::gfx
Vendor-neutral pixel format vocabulary + descriptive metadata.
VideoPixelFormat
Definition VideoPixelFormat.hpp:229
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:11
std::unique_ptr< ComputeEncoder > makeWireComputeEncoder(score::gfx::interop::VideoPixelFormat fmt)
Definition WireEncoderFactory.hpp:121
std::unique_ptr< GPUVideoEncoder > makeWireEncoder(score::gfx::interop::VideoPixelFormat fmt)
Definition WireEncoderFactory.hpp:54
bool wireComputeSupports(score::gfx::interop::VideoPixelFormat fmt, int width)
Definition WireEncoderFactory.hpp:140