/*
 *  Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license and patent
 *  grant that can be found in the LICENSE file in the root of the source
 *  tree. All contributing project authors may be found in the AUTHORS
 *  file in the root of the source tree.
 */


#ifndef VPXBLIT_H_INCL
#define VPXBLIT_H_INCL
/*==============================================================================
                              Includes
==============================================================================*/

/*==============================================================================
                              Defines
==============================================================================*/


#ifdef VPX_BIG_ENDIAN
#define BYTE_ZERO(X)    ((X & 0xFF000000) >> (24 - 2)   )
#define BYTE_ONE(X)     ((X & 0x00FF0000) >> (16 - 2)   )
#define BYTE_TWO(X)     ((X & 0x0000FF00) >> (8 - 2)    )
#define BYTE_THREE(X)   ((X & 0x000000FF) << (0 + 2)    )

#define BYTE_ZERO_UV(X) ((X & 0x0000FF00) >> (8 - 2)    )
#define BYTE_ONE_UV(X)  ((X & 0x000000FF) << (0 + 2)    )

#define REREFERENCE(X) (*((int *) &(X)))

#else

#define BYTE_THREE(X)   ((X & 0xFF000000) >> (24 - 2)   )
#define BYTE_TWO(X)     ((X & 0x00FF0000) >> (16 - 2)   )
#define BYTE_ONE(X)     ((X & 0x0000FF00) >> (8 - 2)    )
#define BYTE_ZERO(X)    ((X & 0x000000FF) << (0 + 2)    )

#define BYTE_ONE_UV(X) ((X & 0x0000FF00) >> (8 - 2) )
#define BYTE_ZERO_UV(X)     ((X & 0x000000FF) << (0 + 2)    )

#define REREFERENCE(X) (*((int *) &(X)))

#endif


/*==============================================================================
                            Type Definitions
==============================================================================*/
typedef struct  // YUV buffer configuration structure
{
    int   y_width;
    int   y_height;
    int   y_stride;

    int   uv_width;
    int   uv_height;
    int   uv_stride;

    char *y_buffer;
    char *u_buffer;
    char *v_buffer;

    char *uv_start;
    int   uv_dst_area;
    int   uv_used_area;

} VPX_BLIT_CONFIG;

typedef struct tx86_params
{
    unsigned int pushed_registers[6];
    unsigned int return_address;
    unsigned int dst;
    unsigned int scrn_pitch;
    VPX_BLIT_CONFIG *buff_config;
} x86_params;

/*=============================================================================
                                Enums
==============================================================================*/


/*==============================================================================
                              Structures
==============================================================================*/

/*==============================================================================
                             Constants
==============================================================================*/


/*==============================================================================
                               Variables
==============================================================================*/




/*==============================================================================
                            Function Protoypes/MICROS
==============================================================================*/
int vpx_get_size_of_pixel(unsigned int bd);
void *vpx_get_blitter(unsigned int bd);
void vpx_set_blit(void);
void vpx_destroy_blit(void);



#endif //VPXBLIT_H_INCL
