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


/* This file contains backwards compatibility stubs for applications using
 * the VP8 version 1.0 API.
 */
#ifndef VP8E_H
#define VP8E_H
#include "vpx_codec_impl_top.h"

#if defined(VPX_CODEC_DISABLE_COMPAT) && VPX_CODEC_DISABLE_COMPAT
#error "Backwards compatibility disabled: don't include vp8e.h"
#endif

#include "vp8cx.h"
DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_enc_vp8_algo DEPRECATED;


enum
{
    VP8E_SET_REFERENCE     = VP8_SET_REFERENCE,
    VP8E_COPY_REFERENCE    = VP8_COPY_REFERENCE,
    VP8E_SET_PREVIEWPP     = VP8_SET_POSTPROC,
    VP8E_SET_FLUSHFLAG     = 4,
    VP8E_SET_FRAMETYPE     = 10,
    VP8E_SET_ENCODING_MODE = 12
};

#define NORMAL_FRAME   (0)
#define KEY_FRAME      (1)

/* Change VP8E to VP8 to get the undeprecated version of these (defined in
 * vp8.h)
 */
VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_REFERENCE,   vpx_ref_frame_t *)
VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_COPY_REFERENCE,  vpx_ref_frame_t *)
VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_PREVIEWPP,   vp8_postproc_cfg_t *)


/* Flush is done by calling vpx_codec_encode with a NULL input image. */
VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_FLUSHFLAG,          int)


/* Frame type is set with a flag to vpx_codec_control. See VPX_EFLAG_FORCE_KF
 */
VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_FRAMETYPE,          int)


/* This control has been deprecated in favor of the duration parameter to
 * vpx_codec_encode(). Use the #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY,
 * #VPX_DL_BEST_QUALITY constants to that parameter instead.
 */
VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ENCODING_MODE, vp8e_encoding_mode)
#include "vpx_codec_impl_bottom.h"
#endif
