diff options
author | Maarten Lankhorst <[email protected]> | 2011-10-31 10:23:03 +0100 |
---|---|---|
committer | Christian König <[email protected]> | 2011-11-03 13:52:00 +0100 |
commit | c9c6eec1c6650623f1be412dc2acd935de6b728b (patch) | |
tree | f04129179f48ba5fcf546624ceb765ab1005f37a /src/gallium/state_trackers | |
parent | 8a7e645c9befb8578c8a571ccc951ed908d177ae (diff) |
state_trackers/vdpau: Implement VdpGenerateCSCMatrix
With the smpte240 profile, which was missing.
Signed-off-by: Maarten Lankhorst <[email protected]>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r-- | src/gallium/state_trackers/vdpau/mixer.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c index 8728157e8a5..ed5a6464088 100644 --- a/src/gallium/state_trackers/vdpau/mixer.c +++ b/src/gallium/state_trackers/vdpau/mixer.c @@ -257,9 +257,27 @@ vlVdpGenerateCSCMatrix(VdpProcamp *procamp, VdpColorStandard standard, VdpCSCMatrix *csc_matrix) { - VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Generating CSCMatrix\n"); + float matrix[16]; + enum VL_CSC_COLOR_STANDARD vl_std; + struct vl_procamp camp; + if (!(csc_matrix && procamp)) return VDP_STATUS_INVALID_POINTER; + if (procamp->struct_version > VDP_PROCAMP_VERSION) + return VDP_STATUS_INVALID_STRUCT_VERSION; + + switch (standard) { + case VDP_COLOR_STANDARD_ITUR_BT_601: vl_std = VL_CSC_COLOR_STANDARD_BT_601; break; + case VDP_COLOR_STANDARD_ITUR_BT_709: vl_std = VL_CSC_COLOR_STANDARD_BT_709; break; + case VDP_COLOR_STANDARD_SMPTE_240M: vl_std = VL_CSC_COLOR_STANDARD_SMPTE_240M; break; + default: return VDP_STATUS_INVALID_COLOR_STANDARD; + } + camp.brightness = procamp->brightness; + camp.contrast = procamp->contrast; + camp.saturation = procamp->saturation; + camp.hue = procamp->hue; + vl_csc_get_matrix(vl_std, &camp, 1, matrix); + memcpy(csc_matrix, matrix, sizeof(float)*12); return VDP_STATUS_OK; } |