/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. * * 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. * * Neither the name of The Linux Foundation. nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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 _C2DEXT_H_ #define _C2DEXT_H_ #ifdef __cplusplus extern "C" { #endif #include "c2d2.h" typedef enum { /*!< lens correction type */ C2D_LENSCORRECT_AFFINE = 0, /*!< affine, default (3x2 matrix) */ C2D_LENSCORRECT_PERSPECTIVE = (1 << 0), /*!< perspective bit (3x3) matrix */ C2D_LENSCORRECT_BILINEAR = (1 << 1), /*!< bilinear bit */ C2D_LENSCORRECT_ORIGIN_IN_MIDDLE= (1 << 2), /*!< rotation origin for matrix is in the middle */ C2D_LENSCORRECT_SOURCE_RECT = (1 << 3), /*!< enables source_rect field. When set, client has to provide C2D_LENSCORRECT_OBJECT.source_rect if not set source surface dimensions are used.*/ C2D_LENSCORRECT_TARGET_RECT = (1 << 4), /*!< enables target_rect field. When set, client has to provide C2D_LENSCORRECT_OBJECT.target_rect if not set target surface dimensions are used. */ } C2D_LENSCORRECT_TYPE; typedef struct C2D_LENSCORRECT_OBJ_STR { uint32 srcId; /*!< source surface */ C2D_RECT blitSize; /*!< C2D_RECT for blit size */ C2D_RECT gridSize; /*!< C2D_RECT for grid size */ int32 offsetX; /*!< source x offset */ int32 offsetY; /*!< source y offset */ uint32 transformType; /*!< (C2D_LENSCORRECT_AFFINE or C2D_LENSCORRECT_PERSPECTIVE) + C2D_LENSCORRECT_BILINEAR */ float *transformMatrices; /*!< transformMatrix array, 3x2 or 3x3 depending transformType */ C2D_RECT source_rect; /*!< region of the source surface, 16.16 fp */ C2D_RECT target_rect; /*!< position and scaling in target, 16.16 fp */ }C2D_LENSCORRECT_OBJECT; /* ------------------------------------------------------------------- *//*! * \external * \brief Lens correction, affine or perspective * * \param uint32 targetSurface * \param C2D_LENSCORRECT_OBJECT sourceObject * \return C2D_STATUS_OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dLensCorrection( uint32 targetSurface, C2D_LENSCORRECT_OBJECT *sourceObject); /* ------------------------------------------------------------------- *//*! * \external * \brief Locks surface and sets surfaces host pointer * * \param uint32 surface * \param void** pointer to void pointer where host address is returned * \return C2D_STATUS_OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dLockSurface( uint32 a_surface, void **y_pHostAddress, void **u_pHostAddress, void **v_pHostAddress); /* ------------------------------------------------------------------- *//*! * \external * \brief Unlocks surface * * \param uint32 surface * \return C2D_STATUS_OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dUnlockSurface( uint32 a_surface); /* ------------------------------------------------------------------- *//*! * \external * \brief Fills surface information parameters * * \param uint32 surface * \param uint32 *width * \param uint32 *height * \param uint32 *format * \return C2D_STATUS_OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dGetSurfaceInfo( uint32 a_surface, uint32 *width, uint32 *height, uint32 *format ); /* ------------------------------------------------------------------- *//*! * \external * \brief Fills device information parameters * * \param uint32 *count * \return C2D_STATUS_OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dGetDeviceInfo( uint32 *count ); //============================================================================= // C2D extension for adding shader support //============================================================================= typedef enum { /*!< C2D sampler type enum */ C2D_SAMPLER_FRAG_SRC = (1 << 0), /*!< Frag sampler for source surface*/ C2D_SAMPLER_FRAG_DST = (1 << 1), /*!< Frag sampler for target surface*/ C2D_SAMPLER_FRAG_MASK = (1 << 2) /*!< Frag sampler for mask surface */ }C2D_SAMPLER_TYPE; struct c2d_sampler { /*!< C2D sampler structure */ char* sampler_name; /*!< sampler name */ uint32 sampler_name_len; /*!< sampler name length */ C2D_SAMPLER_TYPE sampler_type; /*!< sampler type */ }; struct c2d_uniform { /*!< C2D uniform structure */ char * u_name; /*!< uniform name */ int u_name_len; /*!< uniform name length */ void* u_data; /*!< uniform data buffer */ uint32 u_data_len; /*!< uniform data buffer length */ uint32 u_item_size; /*!< per item size in buffer */ uint32 u_item_count; /*!< total item count in buffer */ }; struct c2d_program { /*!< C2D shader structure */ unsigned char* program_binary; /*!< shader binary (VS + FS) */ uint32 program_binary_len; /*!< shader binary length */ struct c2d_uniform* uniform_list; /*!< uniform list in the shader */ uint32 uniform_count; /*!< uniform count in the shader*/ struct c2d_sampler* sampler_list; /*!< sampler list in the shader */ uint32 sampler_count; /*!< sampler count in the shader*/ }; /* ------------------------------------------------------------------- *//*! * \external * \brief adding a user defined program in C2D that can be used later * * \param struct c2d_program * the program that user wants to Add * \return uint32 this is the id that will be used later * to refer the program * *//* ------------------------------------------------------------------- */ C2D_API uint32 c2dAddProgram(struct c2d_program* a_program); /* ------------------------------------------------------------------- *//*! * \external * \brief Select a shader to be used * * \param pid this is the program id user want to remove * \return C2D_STATUS C2D_STATUS_OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dRemoveProgram(uint32 pid); /* ------------------------------------------------------------------- *//*! * \external * \brief Select a program to be used by C2D. * * \param pid this is the program id user want to use * \return C2D_STATUS C2D_STATUS__OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dActivateProgram(uint32 pid); /* ------------------------------------------------------------------- *//*! * \external * \brief Deselect a program to be used by C2D. * * \param pid this is the program id user want to deactivate * \return C2D_STATUS C2D_STATUS__OK on success *//* ------------------------------------------------------------------- */ C2D_API C2D_STATUS c2dDeactivateProgram(uint32 pid); #ifdef __cplusplus } #endif #endif /* _C2DEXT_H_ */