idct.h 4.84 KB
Newer Older
Jingning Han's avatar
Jingning Han committed
1
/*
Yaowu Xu's avatar
Yaowu Xu committed
2
 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
Jingning Han's avatar
Jingning Han committed
3
 *
Yaowu Xu's avatar
Yaowu Xu committed
4 5 6 7 8 9
 * 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.
Jingning Han's avatar
Jingning Han committed
10 11
 */

Yaowu Xu's avatar
Yaowu Xu committed
12 13
#ifndef AV1_COMMON_IDCT_H_
#define AV1_COMMON_IDCT_H_
Jingning Han's avatar
Jingning Han committed
14 15 16

#include <assert.h>

Yaowu Xu's avatar
Yaowu Xu committed
17
#include "./aom_config.h"
18 19 20 21 22 23
#include "av1/common/blockd.h"
#include "av1/common/common.h"
#include "av1/common/enums.h"
#include "aom_dsp/inv_txfm.h"
#include "aom_dsp/txfm_common.h"
#include "aom_ports/mem.h"
Jingning Han's avatar
Jingning Han committed
24 25 26 27 28

#ifdef __cplusplus
extern "C" {
#endif

Angie Chiang's avatar
Angie Chiang committed
29 30 31 32 33
typedef struct INV_TXFM_PARAM {
  TX_TYPE tx_type;
  TX_SIZE tx_size;
  int eob;
  int lossless;
Yaowu Xu's avatar
Yaowu Xu committed
34
#if CONFIG_AOM_HIGHBITDEPTH
Angie Chiang's avatar
Angie Chiang committed
35 36 37 38
  int bd;
#endif
} INV_TXFM_PARAM;

clang-format's avatar
clang-format committed
39
typedef void (*transform_1d)(const tran_low_t *, tran_low_t *);
Jingning Han's avatar
Jingning Han committed
40 41 42 43 44

typedef struct {
  transform_1d cols, rows;  // vertical and horizontal
} transform_2d;

Yaowu Xu's avatar
Yaowu Xu committed
45
#if CONFIG_AOM_HIGHBITDEPTH
clang-format's avatar
clang-format committed
46
typedef void (*highbd_transform_1d)(const tran_low_t *, tran_low_t *, int bd);
Jingning Han's avatar
Jingning Han committed
47 48 49 50

typedef struct {
  highbd_transform_1d cols, rows;  // vertical and horizontal
} highbd_transform_2d;
Yaowu Xu's avatar
Yaowu Xu committed
51
#endif  // CONFIG_AOM_HIGHBITDEPTH
Jingning Han's avatar
Jingning Han committed
52

53 54 55 56
#define MAX_TX_SCALE 1
int get_tx_scale(const MACROBLOCKD *const xd, const TX_TYPE tx_type,
                 const TX_SIZE tx_size);

Yaowu Xu's avatar
Yaowu Xu committed
57 58 59 60 61 62 63 64 65 66
void av1_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
                     int eob);
void av1_idct4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
                     int eob);
void av1_idct8x8_add(const tran_low_t *input, uint8_t *dest, int stride,
                     int eob);
void av1_idct16x16_add(const tran_low_t *input, uint8_t *dest, int stride,
                       int eob);
void av1_idct32x32_add(const tran_low_t *input, uint8_t *dest, int stride,
                       int eob);
Jingning Han's avatar
Jingning Han committed
67

Yaowu Xu's avatar
Yaowu Xu committed
68 69 70 71 72 73 74 75 76 77 78 79
void av1_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest, int stride,
                          int eob, TX_TYPE tx_type, int lossless);
void av1_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest, int stride,
                          int eob, TX_TYPE tx_type);
void av1_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest, int stride,
                          int eob, TX_TYPE tx_type);
void av1_inv_txfm_add_8x8(const tran_low_t *input, uint8_t *dest, int stride,
                          int eob, TX_TYPE tx_type);
void av1_inv_txfm_add_16x16(const tran_low_t *input, uint8_t *dest, int stride,
                            int eob, TX_TYPE tx_type);
void av1_inv_txfm_add_32x32(const tran_low_t *input, uint8_t *dest, int stride,
                            int eob, TX_TYPE tx_type);
Angie Chiang's avatar
Angie Chiang committed
80 81
void inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
                  INV_TXFM_PARAM *inv_txfm_param);
Yaowu Xu's avatar
Yaowu Xu committed
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
#if CONFIG_AOM_HIGHBITDEPTH
void av1_highbd_iwht4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
                            int eob, int bd);
void av1_highbd_idct4x4_add(const tran_low_t *input, uint8_t *dest, int stride,
                            int eob, int bd);
void av1_highbd_idct8x8_add(const tran_low_t *input, uint8_t *dest, int stride,
                            int eob, int bd);
void av1_highbd_idct16x16_add(const tran_low_t *input, uint8_t *dest,
                              int stride, int eob, int bd);
void av1_highbd_idct32x32_add(const tran_low_t *input, uint8_t *dest,
                              int stride, int eob, int bd);
void av1_highbd_inv_txfm_add_4x4(const tran_low_t *input, uint8_t *dest,
                                 int stride, int eob, int bd, TX_TYPE tx_type,
                                 int lossless);
void av1_highbd_inv_txfm_add_4x8(const tran_low_t *input, uint8_t *dest,
                                 int stride, int eob, int bd, TX_TYPE tx_type);
void av1_highbd_inv_txfm_add_8x4(const tran_low_t *input, uint8_t *dest,
                                 int stride, int eob, int bd, TX_TYPE tx_type);
void av1_highbd_inv_txfm_add_8x8(const tran_low_t *input, uint8_t *dest,
                                 int stride, int eob, int bd, TX_TYPE tx_type);
void av1_highbd_inv_txfm_add_16x16(const tran_low_t *input, uint8_t *dest,
                                   int stride, int eob, int bd,
                                   TX_TYPE tx_type);
void av1_highbd_inv_txfm_add_32x32(const tran_low_t *input, uint8_t *dest,
                                   int stride, int eob, int bd,
                                   TX_TYPE tx_type);
Angie Chiang's avatar
Angie Chiang committed
108 109
void highbd_inv_txfm_add(const tran_low_t *input, uint8_t *dest, int stride,
                         INV_TXFM_PARAM *inv_txfm_param);
Yaowu Xu's avatar
Yaowu Xu committed
110
#endif  // CONFIG_AOM_HIGHBITDEPTH
Jingning Han's avatar
Jingning Han committed
111 112 113 114
#ifdef __cplusplus
}  // extern "C"
#endif

Yaowu Xu's avatar
Yaowu Xu committed
115
#endif  // AV1_COMMON_IDCT_H_