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

#ifndef CODEC_COMMON_INTERFACE_H
#define CODEC_COMMON_INTERFACE_H

#define __export
#define _export
#define dll_export   __declspec( dllexport )
#define dll_import   __declspec( dllimport )

// Playback ERROR Codes.
#define NO_DECODER_ERROR            0
#define REMOTE_DECODER_ERROR        -1

#define DFR_BAD_DCT_COEFF           -100
#define DFR_ZERO_LENGTH_FRAME       -101
#define DFR_FRAME_SIZE_INVALID      -102
#define DFR_OUTPUT_BUFFER_OVERFLOW  -103
#define DFR_INVALID_FRAME_HEADER    -104
#define FR_INVALID_MODE_TOKEN       -110
#define ETR_ALLOCATION_ERROR        -200
#define ETR_INVALID_ROOT_PTR        -201
#define SYNCH_ERROR                 -400
#define BUFFER_UNDERFLOW_ERROR      -500
#define PB_IB_OVERFLOW_ERROR        -501

// External error triggers
#define PB_HEADER_CHECKSUM_ERROR    -601
#define PB_DATA_CHECKSUM_ERROR      -602

// DCT Error Codes
#define DDCT_EXPANSION_ERROR        -700
#define DDCT_INVALID_TOKEN_ERROR    -701

// exception_errors
#define GEN_EXCEPTIONS              -800
#define EX_UNQUAL_ERROR             -801

// Unrecoverable error codes
#define FATAL_PLAYBACK_ERROR        -1000
#define GEN_ERROR_CREATING_CDC      -1001
#define GEN_THREAD_CREATION_ERROR   -1002
#define DFR_CREATE_BMP_FAILED       -1003

// YUV buffer configuration structure
typedef struct
{
    int     y_width;
    int     y_height;
    int     y_stride;

    int     uv_width;
    int     uv_height;
    int     uv_stride;

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

} YUV_BUFFER_CONFIG;
typedef enum
{
    C_SET_KEY_FRAME,
    C_SET_FIXED_Q,
    C_SET_FIRSTPASS_FILE,
    C_SET_EXPERIMENTAL_MIN,
    C_SET_EXPERIMENTAL_MAX = C_SET_EXPERIMENTAL_MIN + 255,
    C_SET_CHECKPROTECT,
    C_SET_TESTMODE,
    C_SET_INTERNAL_SIZE,
    C_SET_RECOVERY_FRAME,
    C_SET_REFERENCEFRAME,
    C_SET_GOLDENFRAME

#ifndef VP50_COMP_INTERFACE
    // Specialist test facilities.
//    C_VCAP_PARAMS,              // DO NOT USE FOR NOW WITH VFW CODEC
#endif

} C_SETTING;

typedef unsigned long C_SET_VALUE;


#endif
