110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org/*
210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *
410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *  Use of this source code is governed by a BSD-style license
510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *  that can be found in the LICENSE file in the root of the source
610a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *  tree. An additional intellectual property rights grant can be found
710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *  in the file PATENTS.  All contributing project authors may
810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org *  be found in the AUTHORS file in the root of the source tree.
910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org */
1010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
1110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#ifndef VP9_COMMON_VP9_ENUMS_H_
1210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#define VP9_COMMON_VP9_ENUMS_H_
1310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
1410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#include "./vpx_config.h"
1510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
16dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus
17dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern "C" {
18dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif
19dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org
2053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org#define MI_SIZE_LOG2 3
2153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org#define MI_BLOCK_SIZE_LOG2 (6 - MI_SIZE_LOG2)  // 64 = 2^6
2210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
2353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org#define MI_SIZE (1 << MI_SIZE_LOG2)  // pixels per mi-unit
2453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org#define MI_BLOCK_SIZE (1 << MI_BLOCK_SIZE_LOG2)  // mi-units per max block
2547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org
2647265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org#define MI_MASK (MI_BLOCK_SIZE - 1)
2710a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
28ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// Bitstream profiles indicated by 2-3 bits in the uncompressed header.
29ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// 00: Profile 0.  8-bit 4:2:0 only.
3041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 10: Profile 1.  8-bit 4:4:4, 4:2:2, and 4:4:0.
3141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 01: Profile 2.  10-bit and 12-bit color only, with 4:2:0 sampling.
3241294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org// 110: Profile 3. 10-bit and 12-bit color only, with 4:2:2/4:4:4/4:4:0
3341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org//                 sampling.
34ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org// 111: Undefined profile.
35693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.comtypedef enum BITSTREAM_PROFILE {
36693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com  PROFILE_0,
37693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com  PROFILE_1,
38693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com  PROFILE_2,
39ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org  PROFILE_3,
40693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com  MAX_PROFILES
41693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com} BITSTREAM_PROFILE;
42693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com
4353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.orgtypedef enum BLOCK_SIZE {
4453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_4X4,
4553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_4X8,
4653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_8X4,
4753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_8X8,
4853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_8X16,
4953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_16X8,
5053a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_16X16,
5153a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_16X32,
5253a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_32X16,
5353a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_32X32,
5453a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_32X64,
5553a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_64X32,
5653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_64X64,
5753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_SIZES,
5853a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  BLOCK_INVALID = BLOCK_SIZES
5953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org} BLOCK_SIZE;
6010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
6110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.orgtypedef enum PARTITION_TYPE {
6210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org  PARTITION_NONE,
6310a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org  PARTITION_HORZ,
6410a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org  PARTITION_VERT,
6510a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org  PARTITION_SPLIT,
6653a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  PARTITION_TYPES,
6753a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  PARTITION_INVALID = PARTITION_TYPES
6810a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org} PARTITION_TYPE;
6910a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
7010a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#define PARTITION_PLOFFSET   4  // number of probability models per block size
71ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org#define PARTITION_CONTEXTS (4 * PARTITION_PLOFFSET)
7210a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org
73d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org// block transform size
7447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgtypedef enum {
75d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  TX_4X4 = 0,                      // 4x4 transform
76d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  TX_8X8 = 1,                      // 8x8 transform
77d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  TX_16X16 = 2,                    // 16x16 transform
78d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  TX_32X32 = 3,                    // 32x32 transform
7953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  TX_SIZES
8047265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org} TX_SIZE;
8147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org
82d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org// frame transform mode
8347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgtypedef enum {
84d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  ONLY_4X4            = 0,        // only 4x4 transform used
85d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  ALLOW_8X8           = 1,        // allow block transform size up to 8x8
86d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  ALLOW_16X16         = 2,        // allow block transform size up to 16x16
87d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  ALLOW_32X32         = 3,        // allow block transform size up to 32x32
88d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  TX_MODE_SELECT      = 4,        // transform specified for each block
8953a13f1fa964820f7a8f9d3932a6f3c0433f8bf5fgalligan@chromium.org  TX_MODES            = 5,
9047265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org} TX_MODE;
9147265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org
9247265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.orgtypedef enum {
9347265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org  DCT_DCT   = 0,                      // DCT  in both horizontal and vertical
9447265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org  ADST_DCT  = 1,                      // ADST in vertical, DCT in horizontal
9547265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org  DCT_ADST  = 2,                      // DCT  in vertical, ADST in horizontal
96d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  ADST_ADST = 3,                      // ADST in both directions
97d851b91d14ef0bd71acdce7b90c9a8f1af1181adjohannkoenig@chromium.org  TX_TYPES = 4
9847265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org} TX_TYPE;
9947265f8fe3a36a426773454ad90d20c9aa616c24johannkoenig@chromium.org
100ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.orgtypedef enum {
101ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  UNKNOWN    = 0,
102ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  BT_601     = 1,  // YUV
103ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  BT_709     = 2,  // YUV
104ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  SMPTE_170  = 3,  // YUV
105ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  SMPTE_240  = 4,  // YUV
106ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  RESERVED_1 = 5,
107ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  RESERVED_2 = 6,
108ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org  SRGB       = 7   // RGB
109ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org} COLOR_SPACE;
110ecee051929d6ced19cf324688774acccc9ad4a0ajohannkoenig@chromium.org
11193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum {
11293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org  VP9_LAST_FLAG = 1 << 0,
11393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org  VP9_GOLD_FLAG = 1 << 1,
11493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org  VP9_ALT_FLAG = 1 << 2,
11593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} VP9_REFFRAME;
11693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org
117dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus
118dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org}  // extern "C"
119dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif
120dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org
12110a9a0d835561a7f2300c561c514efcf374554d6fgalligan@chromium.org#endif  // VP9_COMMON_VP9_ENUMS_H_
122