state_trackers/vdpau: Implement VdpGenerateCSCMatrix
With the smpte240 profile, which was missing. Signed-off-by: Maarten Lankhorst <m.b.lankhorst@gmail.com>
This commit is contained in:
parent
8a7e645c9b
commit
c9c6eec1c6
|
@ -147,6 +147,22 @@ static const float bt_709_full[16] =
|
||||||
0.0f, 0.0f, 0.0f, 1.0f
|
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] =
|
static const float identity[16] =
|
||||||
{
|
{
|
||||||
1.0f, 0.0f, 0.0f, 0.0f,
|
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:
|
case VL_CSC_COLOR_STANDARD_BT_709:
|
||||||
cstd = full_range ? &bt_709_full[0] : &bt_709[0];
|
cstd = full_range ? &bt_709_full[0] : &bt_709[0];
|
||||||
break;
|
break;
|
||||||
|
case VL_CSC_COLOR_STANDARD_SMPTE_240M:
|
||||||
|
cstd = full_range ? &smpte240m_full[0] : &smpte240m[0];
|
||||||
|
break;
|
||||||
case VL_CSC_COLOR_STANDARD_IDENTITY:
|
case VL_CSC_COLOR_STANDARD_IDENTITY:
|
||||||
default:
|
default:
|
||||||
assert(cs == VL_CSC_COLOR_STANDARD_IDENTITY);
|
assert(cs == VL_CSC_COLOR_STANDARD_IDENTITY);
|
||||||
|
|
|
@ -42,7 +42,8 @@ enum VL_CSC_COLOR_STANDARD
|
||||||
{
|
{
|
||||||
VL_CSC_COLOR_STANDARD_IDENTITY,
|
VL_CSC_COLOR_STANDARD_IDENTITY,
|
||||||
VL_CSC_COLOR_STANDARD_BT_601,
|
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;
|
extern const struct vl_procamp vl_default_procamp;
|
||||||
|
|
|
@ -257,9 +257,27 @@ vlVdpGenerateCSCMatrix(VdpProcamp *procamp,
|
||||||
VdpColorStandard standard,
|
VdpColorStandard standard,
|
||||||
VdpCSCMatrix *csc_matrix)
|
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))
|
if (!(csc_matrix && procamp))
|
||||||
return VDP_STATUS_INVALID_POINTER;
|
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;
|
return VDP_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue