20  static const constexpr auto frag = R
"_(#version 450 
   22)_" SCORE_GFX_VIDEO_UNIFORMS R"_( 
   24layout(binding=3) uniform sampler2D y_tex; 
   25layout(binding=4) uniform sampler2D u_tex; 
   26layout(binding=5) uniform sampler2D v_tex; 
   28layout(location = 0) in vec2 v_texcoord; 
   29layout(location = 0) out vec4 fragColor; 
   33vec4 processTexture(vec4 tex) { 
   34  vec4 processed = convert_to_rgb(tex); 
   41  float y = 64. * texture(y_tex, v_texcoord).r; 
   42  float u = 64. * texture(u_tex, v_texcoord).r; 
   43  float v = 64. * texture(v_tex, v_texcoord).r; 
   45  fragColor = processTexture(vec4(y,u,v, 1.)); 
   57    auto& rhi = *r.
state.rhi;
 
   59    const auto w = decoder.width, h = decoder.height;
 
   62      auto tex = rhi.newTexture(QRhiTexture::R16, {w, h}, 1, QRhiTexture::Flag{});
 
   65      auto sampler = rhi.newSampler(
 
   66          QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
 
   67          QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
 
   69      samplers.push_back({sampler, tex});
 
   74      auto tex = rhi.newTexture(QRhiTexture::R16, {w / 2, h}, 1, QRhiTexture::Flag{});
 
   77      auto sampler = rhi.newSampler(
 
   78          QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
 
   79          QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
 
   81      samplers.push_back({sampler, tex});
 
   86      auto tex = rhi.newTexture(QRhiTexture::R16, {w / 2, h}, 1, QRhiTexture::Flag{});
 
   89      auto sampler = rhi.newSampler(
 
   90          QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
 
   91          QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
 
   93      samplers.push_back({sampler, tex});
 
   97        r.
state, vertexShader(), QString(frag).arg(
"").arg(colorMatrix(decoder)));
 
 
  102    setYPixels(res, frame.data[0], frame.linesize[0]);
 
  103    setUPixels(res, frame.data[1], frame.linesize[1]);
 
  104    setVPixels(res, frame.data[2], frame.linesize[2]);
 
 
  108  setYPixels(QRhiResourceUpdateBatch& res, uint8_t* pixels, 
int stride) 
const noexcept 
  110    const auto w = decoder.width, h = decoder.height;
 
  111    auto y_tex = samplers[0].texture;
 
  115    QRhiTextureUploadDescription desc{entry};
 
  116    res.uploadTexture(y_tex, desc);
 
  120  setUPixels(QRhiResourceUpdateBatch& res, uint8_t* pixels, 
int stride) 
const noexcept 
  122    const auto w = decoder.width / 2, h = decoder.height;
 
  123    auto u_tex = samplers[1].texture;
 
  127    QRhiTextureUploadDescription desc{entry};
 
  129    res.uploadTexture(u_tex, desc);
 
  133  setVPixels(QRhiResourceUpdateBatch& res, uint8_t* pixels, 
int stride) 
const noexcept 
  135    const auto w = decoder.width / 2, h = decoder.height;
 
  136    auto v_tex = samplers[2].texture;
 
  140    QRhiTextureUploadDescription desc{entry};
 
  141    res.uploadTexture(v_tex, desc);
 
 
static QRhiTextureSubresourceUploadDescription createTextureUpload(uint8_t *pixels, int w, int h, int bytesPerPixel, int stride)
Utility method to create a QRhiTextureSubresourceUploadDescription.
Definition GPUVideoDecoder.cpp:22
std::pair< QShader, QShader > makeShaders(const RenderState &v, QString vert, QString frag)
Get a pair of compiled vertex / fragment shaders from GLSL 4.5 sources.
Definition score-plugin-gfx/Gfx/Graph/Utils.cpp:393
void exec(RenderList &, QRhiResourceUpdateBatch &res, AVFrame &frame) override
Decode and upload a video frame to the GPU.
Definition YUV422P10.hpp:100
std::pair< QShader, QShader > init(RenderList &r) override
Initialize a GPUVideoDecoder.
Definition YUV422P10.hpp:55