/*
*Copyright(c)2014, Jeffrey Lee
*Allrightsreserved.
*
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met: 
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef PIXTRANS_H
#define PIXTRANS_H

#include <stdint.h>

extern void pixtrans_build(vncserv *serv);

/* Standard pixel translation for reading a rectangle from the screen and writing to 'output' */
extern void pixtrans_do_it(vncserv *serv, int x, int y, int w, int h, uint8_t * restrict output);

extern uint32_t pixtrans_do_8888(vncserv *serv, uint32_t col);

/* Only valid for use if the output format is a 24bpp 'CPIXEL' */
extern void pixtrans_do_CPIXEL(vncserv *serv, int x, int y, int w, int h, uint8_t * restrict output);

/* Pixel translation for i/o to a linear buffer of uint32_t's
   stride between elements is specified in units of uint32_t's, with 1 being a linear array */
extern void pixtrans_do_table(vncserv *serv, uint32_t * restrict io, int count, int stride);
extern void pixtrans_do_CPIXEL_table(vncserv *serv, uint32_t * restrict io, int count, int stride);

#endif
