/*
 *  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 YV12_CONFIG_H
#define YV12_CONFIG_H
#ifdef __cplusplus
extern "C"
{
#endif

#define VP7BORDERINPIXELS       48
#define VP8BORDERINPIXELS       32

    /*************************************
     For INT_YUV:

     Y = (R+G*2+B)/4;
     U = (R-B)/2;
     V =  (G*2 - R - B)/4;
    And
     R = Y+U-V;
     G = Y+V;
     B = Y-U-V;
    ************************************/
    typedef enum
    {
        REG_YUV = 0,    // Regular yuv
        INT_YUV = 1     // The type of yuv that can be tranfer to and from RGB through integer transform
              }
              YUV_TYPE;

    typedef struct
    {
        int   y_width;
        int   y_height;
        int   y_stride;
//    int   yinternal_width;

        int   uv_width;
        int   uv_height;
        int   uv_stride;
//    int   uvinternal_width;

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

        unsigned char *buffer_alloc;
        int border;
        int frame_size;
        YUV_TYPE clrtype;
    } YV12_BUFFER_CONFIG;

    int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, int width, int height, int border);
    int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf);
    int vp8_yv12_black_frame_buffer(YV12_BUFFER_CONFIG *ybf);

#ifdef __cplusplus
}
#endif


#endif //YV12_CONFIG_H
