summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers
diff options
context:
space:
mode:
authorGrigori Goronzy <greg@chown.ath.cx>2013-10-09 02:23:50 +0200
committerChristian König <christian.koenig@amd.com>2013-10-09 13:02:40 +0200
commit1a5bac2149fa2c6224b40c0b40839c2025414e79 (patch)
treec9aff52f1368857b3a91a3b7f8aacdb9ada96137 /src/gallium/state_trackers
parent5b4e2db12d9b45e898a8eb6599d928504ffd30c3 (diff)
st/vdpau: fix GenerateCSCMatrix with NULL procamp
As per API specification, it is legal to supply a NULL procamp. In this case, a CSC matrix according to the colorspace should be generated, but no further adjustments are made. Addresses: https://trac.videolan.org/vlc/ticket/9281 https://bugs.freedesktop.org/show_bug.cgi?id=68792 Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'src/gallium/state_trackers')
-rw-r--r--src/gallium/state_trackers/vdpau/mixer.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/gallium/state_trackers/vdpau/mixer.c b/src/gallium/state_trackers/vdpau/mixer.c
index 8476329b2b8..f9b413ea695 100644
--- a/src/gallium/state_trackers/vdpau/mixer.c
+++ b/src/gallium/state_trackers/vdpau/mixer.c
@@ -768,22 +768,25 @@ vlVdpGenerateCSCMatrix(VdpProcamp *procamp,
enum VL_CSC_COLOR_STANDARD vl_std;
struct vl_procamp camp;
- if (!(csc_matrix && procamp))
+ if (!csc_matrix)
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, true, csc_matrix);
+
+ if (procamp) {
+ if (procamp->struct_version > VDP_PROCAMP_VERSION)
+ return VDP_STATUS_INVALID_STRUCT_VERSION;
+ camp.brightness = procamp->brightness;
+ camp.contrast = procamp->contrast;
+ camp.saturation = procamp->saturation;
+ camp.hue = procamp->hue;
+ }
+
+ vl_csc_get_matrix(vl_std, procamp ? &camp : NULL, true, csc_matrix);
return VDP_STATUS_OK;
}