1 /* ***** BEGIN LICENSE BLOCK *****
2 *
3 * $Id: common_types.h,v 1.21 2008/11/06 04:53:36 asuraparaju Exp $ $Name: Dirac_1_0_2 $
4 *
5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6 *
7 * The contents of this file are subject to the Mozilla Public License
8 * Version 1.1 (the "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 * http://www.mozilla.org/MPL/
11 *
12 * Software distributed under the License is distributed on an "AS IS" basis,
13 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
14 * the specific language governing rights and limitations under the License.
15 *
16 * The Original Code is BBC Research and Development code.
17 *
18 * The Initial Developer of the Original Code is the British Broadcasting
19 * Corporation.
20 * Portions created by the Initial Developer are Copyright (C) 2004.
21 * All Rights Reserved.
22 *
23 * Contributor(s): Thomas Davies (Original Author),
24 *                 Scott R Ladd,
25 *                 Tim Borer
26 *                 Andrew Kennedy,
27 *                 Anuradha Suraparaju
28 *
29 * Alternatively, the contents of this file may be used under the terms of
30 * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
31 * Public License Version 2.1 (the "LGPL"), in which case the provisions of
32 * the GPL or the LGPL are applicable instead of those above. If you wish to
33 * allow use of your version of this file only under the terms of the either
34 * the GPL or LGPL and not to allow others to use your version of this file
35 * under the MPL, indicate your decision by deleting the provisions above
36 * and replace them with the notice and other provisions required by the GPL
37 * or LGPL. If you do not delete the provisions above, a recipient may use
38 * your version of this file under the terms of any one of the MPL, the GPL
39 * or the LGPL.
40 * ***** END LICENSE BLOCK ***** */
41 
42 #ifndef _COMMON_TYPES_H_
43 #define _COMMON_TYPES_H_
44 
45 
46 /*! This file contains common enumerated types used throughout the encoder and
47     the end user interfaces to the encoder and decoder
48 */
49 
50 #ifdef __cplusplus
51 extern "C" {
52 #endif
53 /*
54 * Some basic enumeration types used throughout the codec and by end user ...//
55 */
56 
57 /*! Types of chroma formatting (formatNK=format not known) */
58 typedef enum { format444, format422, format420, formatNK } ChromaFormat;
59 
60 /*! Types of Wavelet filters supported. filterNK -  not known) */
61 typedef enum
62 {
63     DD9_7=0,      /* Deslauriers-Dubuc (9,7) */
64     LEGALL5_3,    /* LeGall (5,3) */
65     DD13_7,       /* Deslauriers-Dubuc (13,7) */
66     HAAR0,        /* Haar, no shift per level*/
67     HAAR1,        /* Haar, one shift per level*/
68     FIDELITY,    /* Fidelity wavelet */
69     DAUB9_7,       /* Integer approximation to Daubechies 97 */
70     filterNK
71 } WltFilter;
72 
73 /*! Enumerated type that defines prefiltering types supported by the
74     encoder. */
75 typedef enum
76 {
77     NO_PF = 0,
78     DIAGLP,
79     RECTLP,
80     CWM
81 } PrefilterType;
82 
83 static const int NUM_WLT_FILTERS = 8;
84 
85 /*! Types of picture */
86 typedef enum {
87         INTRA_PICTURE=0,
88         INTER_PICTURE
89     } PictureType;
90 
91 /*! Types of referencing */
92 typedef enum {
93         REFERENCE_PICTURE=0,
94         NON_REFERENCE_PICTURE
95 }   ReferenceType;
96 
97 /*! Types for video-format */
98 typedef enum {
99         VIDEO_FORMAT_CUSTOM=0,
100         VIDEO_FORMAT_QSIF525,
101         VIDEO_FORMAT_QCIF,
102         VIDEO_FORMAT_SIF525,
103         VIDEO_FORMAT_CIF,
104         VIDEO_FORMAT_4SIF525,
105         VIDEO_FORMAT_4CIF,
106         VIDEO_FORMAT_SD_480I60,
107         VIDEO_FORMAT_SD_576I50,
108         VIDEO_FORMAT_HD_720P60,
109         VIDEO_FORMAT_HD_720P50,
110         VIDEO_FORMAT_HD_1080I60,
111         VIDEO_FORMAT_HD_1080I50,
112         VIDEO_FORMAT_HD_1080P60,
113         VIDEO_FORMAT_HD_1080P50,
114         VIDEO_FORMAT_DIGI_CINEMA_2K24,
115         VIDEO_FORMAT_DIGI_CINEMA_4K24,
116         VIDEO_FORMAT_UHDTV_4K60,
117         VIDEO_FORMAT_UHDTV_4K50,
118         VIDEO_FORMAT_UHDTV_8K60,
119         VIDEO_FORMAT_UHDTV_8K50,
120         VIDEO_FORMAT_UNDEFINED
121 } VideoFormat;
122 
123 /*! Types of Colour primaries */
124 typedef enum {
125     CP_HDTV_COMP_INTERNET=0,
126     CP_SDTV_525,
127     CP_SDTV_625,
128     CP_DCINEMA,
129     CP_UNDEF
130 }ColourPrimaries;
131 
132 /*! Types of Colour Matrices */
133 typedef enum {
134     CM_HDTV_COMP_INTERNET=0,
135     CM_SDTV,
136     CM_REVERSIBLE,
137     CM_UNDEF
138 }ColourMatrix;
139 
140 /*! Types of Transfer functions */
141 typedef enum {
142     TF_TV=0,
143     TF_EXT_GAMUT,
144     TF_LINEAR,
145     TF_DCINEMA,
146     TF_UNDEF
147 } TransferFunction;
148 
149 /*! Types of Picture-rate */
150 typedef enum {
151     FRAMERATE_CUSTOM=0,
152     FRAMERATE_23p97_FPS,
153     FRAMERATE_24_FPS,
154     FRAMERATE_25_FPS,
155     FRAMERATE_29p97_FPS,
156     FRAMERATE_30_FPS,
157     FRAMERATE_50_FPS,
158     FRAMERATE_59p94_FPS,
159     FRAMERATE_60_FPS,
160     FRAMERATE_14p98_FPS,
161     FRAMERATE_12p5_FPS,
162     FRAMERATE_UNDEFINED
163 } FrameRateType;
164 
165 /*! Types of Aspect Ratio */
166 typedef enum {
167     PIXEL_ASPECT_RATIO_CUSTOM=0,
168     PIXEL_ASPECT_RATIO_1_1,
169     PIXEL_ASPECT_RATIO_10_11,
170     PIXEL_ASPECT_RATIO_12_11,
171     PIXEL_ASPECT_RATIO_40_33,
172     PIXEL_ASPECT_RATIO_16_11,
173     PIXEL_ASPECT_RATIO_4_3,
174     PIXEL_ASPECT_RATIO_UNDEFINED
175 } PixelAspectRatioType;
176 
177 
178 /*! Types of signal range */
179 typedef enum {
180     SIGNAL_RANGE_CUSTOM=0,
181     SIGNAL_RANGE_8BIT_FULL,
182     SIGNAL_RANGE_8BIT_VIDEO,
183     SIGNAL_RANGE_10BIT_VIDEO,
184     SIGNAL_RANGE_12BIT_VIDEO,
185     SIGNAL_RANGE_UNDEFINED
186 } SignalRangeType;
187 
188 /*! Types of motion-vector precision */
189 typedef enum {
190     MV_PRECISION_PIXEL=0,
191     MV_PRECISION_HALF_PIXEL,
192     MV_PRECISION_QUARTER_PIXEL,
193     MV_PRECISION_EIGHTH_PIXEL,
194     MV_PRECISION_UNDEFINED
195 } MVPrecisionType;
196 
197 /*! Type of quantiser modes when spatial partitioning is enabled */
198 typedef enum
199 {
200     QUANT_SINGLE,
201     QUANT_MULTIPLE,
202     QUANT_UNDEF
203 } CodeBlockMode;
204 
205 #ifdef __cplusplus
206 }
207 #endif
208 
209 #endif
210