Beispiel #1
0
static int
xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
{
    CARD16 *points, *red, *green, *blue;
    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
    RRCrtcPtr crtc = config->output[config->compat_output]->crtc->randr_crtc;
    int size = max(0, crtc->gammaSize);

    if (!size)
	return Success;

    points = xcalloc(size, 3 * sizeof(CARD16));
    if (!points)
	return BadAlloc;

    red = points;
    green = points + size;
    blue = points + 2 * size;

    gamma_to_ramp(gamma.red, red, size);
    gamma_to_ramp(gamma.green, green, size);
    gamma_to_ramp(gamma.blue, blue, size);
    RRCrtcGammaSet(crtc, red, green, blue);

    xfree(points);

    pScrn->gamma = gamma;

    return Success;
}
Beispiel #2
0
int
ProcRRSetCrtcGamma (ClientPtr client)
{
    REQUEST(xRRSetCrtcGammaReq);
    RRCrtcPtr			crtc;
    unsigned long		len;
    CARD16			*red, *green, *blue;
    
    REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
    VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess);
    
    len = client->req_len - bytes_to_int32(sizeof (xRRSetCrtcGammaReq));
    if (len < (stuff->size * 3 + 1) >> 1)
	return BadLength;

    if (stuff->size != crtc->gammaSize)
	return BadMatch;
    
    red = (CARD16 *) (stuff + 1);
    green = red + crtc->gammaSize;
    blue = green + crtc->gammaSize;
    
    RRCrtcGammaSet (crtc, red, green, blue);

    return Success;
}
static int
xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma)
{
    CARD16 *points, *red, *green, *blue;
    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    RRCrtcPtr crtc = xf86CompatRRCrtc(pScrn);
    int size;

    if (!crtc)
	return Success;

    size = max(0, crtc->gammaSize);
    if (!size)
	return Success;

    points = xcalloc(size, 3 * sizeof(CARD16));
    if (!points)
	return BadAlloc;

    red = points;
    green = points + size;
    blue = points + 2 * size;

    gamma_to_ramp(gamma.red, red, size);
    gamma_to_ramp(gamma.green, green, size);
    gamma_to_ramp(gamma.blue, blue, size);
    RRCrtcGammaSet(crtc, red, green, blue);

    xfree(points);

    pScrn->gamma = gamma;

    return Success;
}