| /* 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_ */ |