GPU RGBA -> p010le encoder (semi-planar 4:2:0, 10-bit). More...
Detailed Description
GPU RGBA -> p010le encoder (semi-planar 4:2:0, 10-bit).
Each 10-bit sample (0..1023) sits in the high 10 bits of its 16-bit word (low 6 bits zero), matching AV_PIX_FMT_P010LE / GStreamer P010_10LE. Two planes: Y full-res, interleaved UV half-res. Feed a >8-bit source texture (RGBA16F) for real 10-bit precision.
Two implementations selected at compile time (see YUV422P10Encoder for the full rationale and the qtbase commit reference):
- Qt >= 6.10: native R16 (Y) / RG16 (UV) targets; QRhi reads them back tightly. Bilinear sampling averages the 2x2 chroma block.
- Qt < 6.10: the GL backend reads 16-bit single/dual-channel textures back as 8-bit RGBA, so we pack the bytes into RGBA8 ourselves.
Both paths expose the same readback byte layout (Y = 2w bytes/row over h rows, UV = 2w bytes/row over h/2 rows, U then V interleaved per site), so consumers are agnostic. Requires width % 2 == 0.
Public Member Functions | |
| void | setupPlane (QRhi &rhi, const RenderState &state, QRhiTexture *inputRGBA, QRhiTexture::Format fmt, int w, int h, const char *frag, const QString &colorConversion, QRhiTexture *&tex, QRhiTextureRenderTarget *&rt, QRhiRenderPassDescriptor *&rp, QRhiShaderResourceBindings *&srb, QRhiGraphicsPipeline *&pipeline) |
| void | init (QRhi &rhi, const RenderState &state, QRhiTexture *inputRGBA, int width, int height, const QString &colorConversion=colorMatrixOut()) override |
| void | exec (QRhi &rhi, QRhiCommandBuffer &cb) override |
| int | planeCount () const override |
| Number of readback planes (1 for UYVY, 2 for NV12, 3 for I420). | |
| const QRhiReadbackResult & | readback (int plane) const override |
| Get the readback result for a given plane. Valid after endOffscreenFrame. | |
| void | release () override |
| Release all GPU resources. | |
Public Member Functions inherited from score::gfx::GPUVideoEncoder | |
| virtual QRhiTexture * | outputTexture () const noexcept |
| virtual void | setReadbackEnabled (bool) noexcept |
Static Public Attributes | |
| static constexpr const char * | pack_fn |
| static constexpr const char * | y_frag |
| static constexpr const char * | uv_frag |
Static Public Attributes inherited from score::gfx::GPUVideoEncoder | |
| static constexpr const char * | vertex_shader |
| static constexpr const char * | rgb_to_yuv_glsl |
| static constexpr const char * | y_flip_glsl |
| Fragment shader Y-flip: on GL, flip v_texcoord.y. On Metal/HLSL, no flip. | |
Member Function Documentation
◆ exec()
|
inlineoverridevirtual |
Execute the conversion pass. Call inside beginOffscreenFrame/endOffscreenFrame. Renders the conversion shader and schedules GPU->CPU readback(s).
Implements score::gfx::GPUVideoEncoder.
◆ init()
|
inlineoverridevirtual |
Create render targets, textures, samplers, and the graphics pipeline.
- Parameters
-
rhi The QRhi instance. state The render state (for shader compilation). inputRGBA The scene RGBA texture to read from. width Source width in pixels. height Source height in pixels. colorConversion GLSL code from colorMatrixOut() defining convert_from_rgb(). If empty, defaults to BT.709 full range.
Implements score::gfx::GPUVideoEncoder.
◆ planeCount()
|
inlineoverridevirtual |
Number of readback planes (1 for UYVY, 2 for NV12, 3 for I420).
Implements score::gfx::GPUVideoEncoder.
◆ readback()
|
inlineoverridevirtual |
Get the readback result for a given plane. Valid after endOffscreenFrame.
Implements score::gfx::GPUVideoEncoder.
◆ release()
|
inlineoverridevirtual |
Release all GPU resources.
Implements score::gfx::GPUVideoEncoder.
Member Data Documentation
◆ pack_fn
|
staticconstexpr |
◆ uv_frag
|
staticconstexpr |
◆ y_frag
|
staticconstexpr |
The documentation for this struct was generated from the following file:
Public Member Functions inherited from