/*
 * Copyright (c) 2001-2016, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 */

/* clang-format off */

#if !defined(_pvq_decoder_H)
# define _pvq_decoder_H (1)
# include "aom_dsp/bitreader.h"
# include "aom_dsp/entdec.h"
# include "av1/common/pvq.h"
# include "av1/decoder/decint.h"

void aom_decode_band_pvq_splits(aom_reader *r, od_pvq_codeword_ctx *adapt,
 od_coeff *y, int n, int k, int level);

#define aom_laplace_decode_special(r, decay, max, ACCT_STR_NAME) \
  aom_laplace_decode_special_(r, decay, max ACCT_STR_ARG(ACCT_STR_NAME))

int aom_laplace_decode_special_(aom_reader *r, unsigned decay,
 int max ACCT_STR_PARAM);

void od_pvq_decode(daala_dec_ctx *dec, od_coeff *ref, od_coeff *out, int q0,
    int pli, int bs, const od_val16 *beta, int nodesync, int is_keyframe,
    unsigned int *flags, PVQ_SKIP_TYPE ac_dc_coded, const int16_t *qm,
    const int16_t *qm_inv);

#endif
