[Mesa-dev] [PATCH 1/4] state_trackers/vdpau: Implement VdpGenerateCSCMatrix
Christian König
deathsimple at vodafone.de
Mon Oct 31 03:00:44 PDT 2011
On 31.10.2011 10:23, Maarten Lankhorst wrote:
> With the smpte240 profile, which was missing.
>
> Signed-off-by: Maarten Lankhorst<m.b.lankhorst at gmail.com>
> ---
> src/gallium/auxiliary/vl/vl_csc.c | 19 +++++++++++++++++++
> src/gallium/auxiliary/vl/vl_csc.h | 3 ++-
> src/gallium/state_trackers/vdpau/mixer.c | 20 +++++++++++++++++++-
> 3 files changed, 40 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/vl/vl_csc.c b/src/gallium/auxiliary/vl/vl_csc.c
> index 21da95f..56e6621 100644
> --- a/src/gallium/auxiliary/vl/vl_csc.c
> +++ b/src/gallium/auxiliary/vl/vl_csc.c
> @@ -147,6 +147,22 @@ static const float bt_709_full[16] =
> 0.0f, 0.0f, 0.0f, 1.0f
> };
>
> +static const float smpte240m[16] =
> +{
> + 1.0f, 0.0f, 1.582f, 0.0f,
> + 1.0f, -0.228f, -0.478f, 0.0f,
> + 1.0f, 1.833f, 0.0f, 0.0f,
> + 0.0f, 0.0f, 0.0f, 1.0f
> +};
> +
> +static const float smpte240m_full[16] =
> +{
> + 1.164f, 0.0f, 1.794f, 0.0f,
> + 1.164f, -0.258f, -0.543f, 0.0f,
> + 1.164f, 2.079f, 0.0f, 0.0f,
> + 0.0f, 0.0f, 0.0f, 1.0f
> +};
> +
> static const float identity[16] =
> {
> 1.0f, 0.0f, 0.0f, 0.0f,
> @@ -188,6 +204,9 @@ void vl_csc_get_matrix(enum VL_CSC_COLOR_STANDARD cs,
> case VL_CSC_COLOR_STANDARD_BT_709:
> cstd = full_range ?&bt_709_full[0] :&bt_709[0];
> break;
> + case VL_CSC_COLOR_STANDARD_SMPTE_240M:
> + cstd = full_range ?&smpte240m_full[0] :&smpte240m[0];
> + break;
> case VL_CSC_COLOR_STANDARD_IDENTITY:
> default:
> assert(cs == VL_CSC_COLOR_STANDARD_IDENTITY);
> diff --git a/src/gallium/auxiliary/vl/vl_csc.h b/src/gallium/auxiliary/vl/vl_csc.h
> index a6fb1fd..7a31dd4 100644
> --- a/src/gallium/auxiliary/vl/vl_csc.h
> +++ b/src/gallium/auxiliary/vl/vl_csc.h
> @@ -42,7 +42,8 @@ enum VL_CSC_COLOR_STANDARD
> {
> VL_CSC_COLOR_STANDARD_IDENTITY,
> VL_CSC_COLOR_STANDARD_BT_601,
> - VL_CSC_COLOR_STANDARD_BT_709
> + VL_CSC_COLOR_STANDARD_BT_709,
> + VL_CSC_COLOR_STANDARD_SMPTE_240M
> };
>
> extern const struct vl_procamp vl_default_procamp;
> diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c
> index 8728157..ed5a646 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;
> }
I haven't checked if the matrix are correct and precise enough, but
otherwise looks good to me.
Reviewed by: Christian König <deathsimple at vodafone.de>
More information about the mesa-dev
mailing list