Patch based on a previous series by Shashank Sharma. This introduces optional properties to enable color correction at the pipe level. It relies on 3 transformations applied to every pixels displayed. First a lookup into a degamma table, then a multiplication of the rgb components by a 3x3 matrix and finally another lookup into a gamma table. The following properties can be added to a pipe : - DEGAMMA_LUT : blob containing degamma LUT - DEGAMMA_LUT_SIZE : number of elements in DEGAMMA_LUT - CTM : transformation matrix applied after the degamma LUT - GAMMA_LUT : blob containing gamma LUT - GAMMA_LUT_SIZE : number of elements in GAMMA_LUT DEGAMMA_LUT_SIZE and GAMMA_LUT_SIZE are read only properties, set by the driver to tell userspace applications what sizes should be the lookup tables in DEGAMMA_LUT and GAMMA_LUT. A helper is also provided so legacy gamma correction is redirected through these new properties. v2: Register LUT size properties as range v3: Fix round in drm_color_lut_get_value() helper More docs on how degamma/gamma properties are used v4: Update contributors v5: Rename CTM_MATRIX property to CTM (Doh!) Add legacy gamma_set atomic helper Describe CTM/LUT acronyms in the kernel doc v6: Fix missing blob unref in drm_atomic_helper_crtc_reset
Showing the changes to include/uapi (1 of 9 files). Show all
Unified · Split
| @@ -487,6 +487,21 @@ struct drm_mode_crtc_lut { · 486 unmodified lines | |||
| 487 | __u64 blue; | 487 | __u64 blue; |
| 488 | }; | 488 | }; |
| 489 | 489 | ||
| 490 | struct drm_color_ctm { | ||
| 491 | /* Conversion matrix in S31.32 format. */ | ||
| 492 | __s64 matrix[9]; | ||
| 493 | }; | ||
| 494 | |||
| 495 | struct drm_color_lut { | ||
| 496 | /* | ||
| 497 | * Data is U0.16 fixed point format. | ||
| 498 | */ | ||
| 499 | __u16 red; | ||
| 500 | __u16 green; | ||
| 501 | __u16 blue; | ||
| 502 | __u16 reserved; | ||
| 503 | }; | ||
| 504 | |||
| 490 | #define DRM_MODE_PAGE_FLIP_EVENT 0x01 | 505 | #define DRM_MODE_PAGE_FLIP_EVENT 0x01 |
| 491 | #define DRM_MODE_PAGE_FLIP_ASYNC 0x02 | 506 | #define DRM_MODE_PAGE_FLIP_ASYNC 0x02 |
| 492 | #define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT|DRM_MODE_PAGE_FLIP_ASYNC) | 507 | #define DRM_MODE_PAGE_FLIP_FLAGS (DRM_MODE_PAGE_FLIP_EVENT|DRM_MODE_PAGE_FLIP_ASYNC) |