FastLED 3.9.15
Loading...
Searching...
No Matches

◆ yuv_to_rgb()

static void fl::third_party::yuv_to_rgb ( const fl::third_party::plm_frame_t * frame,
fl::u8 * rgb_buffer )
static

Definition at line 24 of file software_decoder.cpp.hpp.

24 {
25 fl::u32 width = frame->width;
26 fl::u32 height = frame->height;
27
28 // YUV to RGB conversion coefficients (ITU-R BT.601 standard, scaled by 1000)
29 const fl::i32 YUV_TO_RGB_MATRIX[9] = {
30 1164, 0, 1596, // Y, U, V coefficients for R
31 1164, -391, -813, // Y, U, V coefficients for G
32 1164, 2017, 0 // Y, U, V coefficients for B (fixed: 2018 -> 2017)
33 };
34
35 for (fl::u32 y = 0; y < height; y++) {
36 for (fl::u32 x = 0; x < width; x++) {
37 // Get Y, U, V values
38 fl::u32 y_index = y * frame->y.width + x;
39 fl::u32 uv_x = x / 2;
40 fl::u32 uv_y = y / 2;
41 fl::u32 uv_index = uv_y * frame->cr.width + uv_x;
42
43 fl::i32 Y = frame->y.data[y_index] - 16;
44 fl::i32 U = frame->cb.data[uv_index] - 128;
45 fl::i32 V = frame->cr.data[uv_index] - 128;
46
47 // Convert to RGB
48 fl::i32 R = (YUV_TO_RGB_MATRIX[0] * Y + YUV_TO_RGB_MATRIX[1] * U + YUV_TO_RGB_MATRIX[2] * V) / 1000;
49 fl::i32 G = (YUV_TO_RGB_MATRIX[3] * Y + YUV_TO_RGB_MATRIX[4] * U + YUV_TO_RGB_MATRIX[5] * V) / 1000;
50 fl::i32 B = (YUV_TO_RGB_MATRIX[6] * Y + YUV_TO_RGB_MATRIX[7] * U + YUV_TO_RGB_MATRIX[8] * V) / 1000;
51
52 // Clamp values
53 R = R < 0 ? 0 : (R > 255 ? 255 : R);
54 G = G < 0 ? 0 : (G > 255 ? 255 : G);
55 B = B < 0 ? 0 : (B > 255 ? 255 : B);
56
57 // Store RGB values
58 fl::u32 rgb_index = (y * width + x) * 3;
59 rgb_buffer[rgb_index + 0] = static_cast<fl::u8>(R);
60 rgb_buffer[rgb_index + 1] = static_cast<fl::u8>(G);
61 rgb_buffer[rgb_index + 2] = static_cast<fl::u8>(B);
62 }
63 }
64}
unsigned char u8
Definition s16x16x4.h:132
FL_DISABLE_WARNING_PUSH unsigned char * B
u8 u8 height
Definition blur.h:186
u8 width
Definition blur.h:186

References fl::B, FL_NOEXCEPT, fl::height, fl::width, fl::x, and fl::y.

Referenced by fl::third_party::SoftwareMpeg1Decoder::videoDecodeCallback().

+ Here is the caller graph for this function: