st/vdpau: fix GenerateCSCMatrix with NULL procamp
authorGrigori Goronzy <greg@chown.ath.cx>
Wed, 9 Oct 2013 00:23:50 +0000 (02:23 +0200)
committerChristian König <christian.koenig@amd.com>
Wed, 9 Oct 2013 11:02:40 +0000 (13:02 +0200)
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>
src/gallium/state_trackers/vdpau/mixer.c

index 8476329b2b89f14f08462b38e1b934e8fd041fa6..f9b413ea69588430f9a9dbae1baa55edbf102243 100644 (file)
@@ -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;
 }