diff --git a/app/streaming/video/ffmpeg-renderers/drm.cpp b/app/streaming/video/ffmpeg-renderers/drm.cpp index 2a68dc52..2abe0645 100644 --- a/app/streaming/video/ffmpeg-renderers/drm.cpp +++ b/app/streaming/video/ffmpeg-renderers/drm.cpp @@ -517,6 +517,41 @@ ssize_t DrmRenderer::exportEGLImages(AVFrame *frame, EGLDisplay dpy, } } + // Add colorspace data if present + switch (frame->colorspace) { + case AVCOL_SPC_BT2020_CL: + case AVCOL_SPC_BT2020_NCL: + attribs[attribIndex++] = EGL_YUV_COLOR_SPACE_HINT_EXT; + attribs[attribIndex++] = EGL_ITU_REC2020_EXT; + break; + case AVCOL_SPC_SMPTE170M: + case AVCOL_SPC_BT470BG: + case AVCOL_SPC_FCC: + attribs[attribIndex++] = EGL_YUV_COLOR_SPACE_HINT_EXT; + attribs[attribIndex++] = EGL_ITU_REC601_EXT; + break; + case AVCOL_SPC_BT709: + attribs[attribIndex++] = EGL_YUV_COLOR_SPACE_HINT_EXT; + attribs[attribIndex++] = EGL_ITU_REC709_EXT; + break; + default: + break; + } + + // Add color range data if present + switch (frame->color_range) { + case AVCOL_RANGE_JPEG: + attribs[attribIndex++] = EGL_SAMPLE_RANGE_HINT_EXT; + attribs[attribIndex++] = EGL_YUV_FULL_RANGE_EXT; + break; + case AVCOL_RANGE_MPEG: + attribs[attribIndex++] = EGL_SAMPLE_RANGE_HINT_EXT; + attribs[attribIndex++] = EGL_YUV_NARROW_RANGE_EXT; + break; + default: + break; + } + // Terminate the attribute list attribs[attribIndex++] = EGL_NONE; SDL_assert(attribIndex <= MAX_ATTRIB_COUNT); diff --git a/app/streaming/video/ffmpeg-renderers/renderer.h b/app/streaming/video/ffmpeg-renderers/renderer.h index ddca40c9..672f2eab 100644 --- a/app/streaming/video/ffmpeg-renderers/renderer.h +++ b/app/streaming/video/ffmpeg-renderers/renderer.h @@ -48,6 +48,17 @@ typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platf #define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 #define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 #define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A +#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B +#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C +#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D +#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E +#define EGL_ITU_REC601_EXT 0x327F +#define EGL_ITU_REC709_EXT 0x3280 +#define EGL_ITU_REC2020_EXT 0x3281 +#define EGL_YUV_FULL_RANGE_EXT 0x3282 +#define EGL_YUV_NARROW_RANGE_EXT 0x3283 +#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 +#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 #endif #ifndef EGL_EXT_image_dma_buf_import_modifiers