On Tue, Oct 25, 2011 at 1:35 PM, Maarten Lankhorst <m.b.lankho...@gmail.com> wrote: > Signed-off-by: Maarten Lankhorst <m.b.lankho...@gmail.com > > --- > > diff --git a/src/gallium/state_trackers/vdpau/mixer.c > b/src/gallium/state_trackers/vdpau/mixer.c > index 8728157..83daddf 100644 > --- a/src/gallium/state_trackers/vdpau/mixer.c > +++ b/src/gallium/state_trackers/vdpau/mixer.c > @@ -257,9 +257,37 @@ vlVdpGenerateCSCMatrix(VdpProcamp *procamp, > VdpColorStandard standard, > VdpCSCMatrix *csc_matrix) > { > - VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Generating CSCMatrix\n"); > + double Kry, Kby, Ry = 219., Rc = 112., ofsy = 16., Scb, Scr; > + VdpProcamp mat; > 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: Kry = 0.299; Kby = .114; break; > + case VDP_COLOR_STANDARD_ITUR_BT_709: Kry = 0.2126; Kby = .0722; break; > + case VDP_COLOR_STANDARD_SMPTE_240M: Kry = 0.212; Kby = .087; break; > + default: return VDP_STATUS_INVALID_COLOR_STANDARD; > + } > + if (procamp->hue != 0.f || procamp->saturation != 1.f || > procamp->contrast != 1.f || procamp->brightness != 0.f) > + VDPAU_MSG(VDPAU_WARN, "No support yet for color options\n"); > + > + mat[0][0] = mat[1][0] = mat[2][0] = 255. / Ry; > + mat[0][3] = mat[1][3] = mat[2][3] = -ofsy / Ry; > + Scr = (1. - Kry) / Rc; > + mat[0][1] = 0.; > + mat[0][2] = 255. * Scr; > + mat[0][3] -= 128. * Scr; > + Scb = -(1. - Kby) * Kby / ((1. - Kby) + (1. - Kry) - 1.) / Rc; > + Scr = -(1. - Kry) * Kry / ((1. - Kby) + (1. - Kry) - 1.) / Rc; > + mat[1][1] = 255. * Scb; > + mat[1][2] = 255. * Scr; > + mat[1][3] -= 128. * (Scb + Scr); > + Scb = (1. - Kby) / Rc; > + mat[2][1] = 255. * Scb; > + mat[2][2] = 0.; > + mat[2][3] -= 128. * Scb; > return VDP_STATUS_OK; > } >
Is there a reason not to use/add to the code in vl_csc.c in this case? It supports 601 and 709, wider gamut, and and it takes procamp into account. It calculates a 4x4 matrix, but you can just drop the 4th row for VDPAU. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev