xref: /aosp_15_r20/external/libvpx/vpx/vpx_codec.h (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker 
11*fb1b10abSAndroid Build Coastguard Worker /*!\defgroup codec Common Algorithm Interface
12*fb1b10abSAndroid Build Coastguard Worker  * This abstraction allows applications to easily support multiple video
13*fb1b10abSAndroid Build Coastguard Worker  * formats with minimal code duplication. This section describes the interface
14*fb1b10abSAndroid Build Coastguard Worker  * common to all codecs (both encoders and decoders).
15*fb1b10abSAndroid Build Coastguard Worker  * @{
16*fb1b10abSAndroid Build Coastguard Worker  */
17*fb1b10abSAndroid Build Coastguard Worker 
18*fb1b10abSAndroid Build Coastguard Worker /*!\file
19*fb1b10abSAndroid Build Coastguard Worker  * \brief Describes the codec algorithm interface to applications.
20*fb1b10abSAndroid Build Coastguard Worker  *
21*fb1b10abSAndroid Build Coastguard Worker  * This file describes the interface between an application and a
22*fb1b10abSAndroid Build Coastguard Worker  * video codec algorithm.
23*fb1b10abSAndroid Build Coastguard Worker  *
24*fb1b10abSAndroid Build Coastguard Worker  * An application instantiates a specific codec instance by using
25*fb1b10abSAndroid Build Coastguard Worker  * vpx_codec_dec_init() or vpx_codec_enc_init() and a pointer to the
26*fb1b10abSAndroid Build Coastguard Worker  * algorithm's interface structure:
27*fb1b10abSAndroid Build Coastguard Worker  *     <pre>
28*fb1b10abSAndroid Build Coastguard Worker  *     my_app.c:
29*fb1b10abSAndroid Build Coastguard Worker  *       extern vpx_codec_iface_t my_codec;
30*fb1b10abSAndroid Build Coastguard Worker  *       {
31*fb1b10abSAndroid Build Coastguard Worker  *           vpx_codec_ctx_t algo;
32*fb1b10abSAndroid Build Coastguard Worker  *           int threads = 4;
33*fb1b10abSAndroid Build Coastguard Worker  *           vpx_codec_dec_cfg_t cfg = { threads, 0, 0 };
34*fb1b10abSAndroid Build Coastguard Worker  *           res = vpx_codec_dec_init(&algo, &my_codec, &cfg, 0);
35*fb1b10abSAndroid Build Coastguard Worker  *       }
36*fb1b10abSAndroid Build Coastguard Worker  *     </pre>
37*fb1b10abSAndroid Build Coastguard Worker  *
38*fb1b10abSAndroid Build Coastguard Worker  * Once initialized, the instance is manged using other functions from
39*fb1b10abSAndroid Build Coastguard Worker  * the vpx_codec_* family.
40*fb1b10abSAndroid Build Coastguard Worker  */
41*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VPX_VPX_CODEC_H_
42*fb1b10abSAndroid Build Coastguard Worker #define VPX_VPX_VPX_CODEC_H_
43*fb1b10abSAndroid Build Coastguard Worker 
44*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
45*fb1b10abSAndroid Build Coastguard Worker extern "C" {
46*fb1b10abSAndroid Build Coastguard Worker #endif
47*fb1b10abSAndroid Build Coastguard Worker 
48*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_image.h"
49*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_integer.h"
50*fb1b10abSAndroid Build Coastguard Worker 
51*fb1b10abSAndroid Build Coastguard Worker /*!\brief Decorator indicating a function is deprecated */
52*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_DEPRECATED
53*fb1b10abSAndroid Build Coastguard Worker #if defined(__GNUC__)
54*fb1b10abSAndroid Build Coastguard Worker #define VPX_DEPRECATED __attribute__((deprecated))
55*fb1b10abSAndroid Build Coastguard Worker #elif defined(_MSC_VER)
56*fb1b10abSAndroid Build Coastguard Worker #define VPX_DEPRECATED
57*fb1b10abSAndroid Build Coastguard Worker #else
58*fb1b10abSAndroid Build Coastguard Worker #define VPX_DEPRECATED
59*fb1b10abSAndroid Build Coastguard Worker #endif
60*fb1b10abSAndroid Build Coastguard Worker #endif /* VPX_DEPRECATED */
61*fb1b10abSAndroid Build Coastguard Worker 
62*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_DECLSPEC_DEPRECATED
63*fb1b10abSAndroid Build Coastguard Worker #if defined(__GNUC__)
64*fb1b10abSAndroid Build Coastguard Worker #define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */
65*fb1b10abSAndroid Build Coastguard Worker #elif defined(_MSC_VER)
66*fb1b10abSAndroid Build Coastguard Worker /*!\brief \copydoc #VPX_DEPRECATED */
67*fb1b10abSAndroid Build Coastguard Worker #define VPX_DECLSPEC_DEPRECATED __declspec(deprecated)
68*fb1b10abSAndroid Build Coastguard Worker #else
69*fb1b10abSAndroid Build Coastguard Worker #define VPX_DECLSPEC_DEPRECATED /**< \copydoc #VPX_DEPRECATED */
70*fb1b10abSAndroid Build Coastguard Worker #endif
71*fb1b10abSAndroid Build Coastguard Worker #endif /* VPX_DECLSPEC_DEPRECATED */
72*fb1b10abSAndroid Build Coastguard Worker 
73*fb1b10abSAndroid Build Coastguard Worker /*!\brief Decorator indicating a function is potentially unused */
74*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_UNUSED
75*fb1b10abSAndroid Build Coastguard Worker #if defined(__GNUC__) || defined(__clang__)
76*fb1b10abSAndroid Build Coastguard Worker #define VPX_UNUSED __attribute__((unused))
77*fb1b10abSAndroid Build Coastguard Worker #else
78*fb1b10abSAndroid Build Coastguard Worker #define VPX_UNUSED
79*fb1b10abSAndroid Build Coastguard Worker #endif
80*fb1b10abSAndroid Build Coastguard Worker #endif /* VPX_UNUSED */
81*fb1b10abSAndroid Build Coastguard Worker 
82*fb1b10abSAndroid Build Coastguard Worker /*!\brief Current ABI version number
83*fb1b10abSAndroid Build Coastguard Worker  *
84*fb1b10abSAndroid Build Coastguard Worker  * \internal
85*fb1b10abSAndroid Build Coastguard Worker  * If this file is altered in any way that changes the ABI, this value
86*fb1b10abSAndroid Build Coastguard Worker  * must be bumped.  Examples include, but are not limited to, changing
87*fb1b10abSAndroid Build Coastguard Worker  * types, removing or reassigning enums, adding/removing/rearranging
88*fb1b10abSAndroid Build Coastguard Worker  * fields to structures
89*fb1b10abSAndroid Build Coastguard Worker  */
90*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_ABI_VERSION (4 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/
91*fb1b10abSAndroid Build Coastguard Worker 
92*fb1b10abSAndroid Build Coastguard Worker /*!\brief Algorithm return codes */
93*fb1b10abSAndroid Build Coastguard Worker typedef enum {
94*fb1b10abSAndroid Build Coastguard Worker   /*!\brief Operation completed without error */
95*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_OK,
96*fb1b10abSAndroid Build Coastguard Worker 
97*fb1b10abSAndroid Build Coastguard Worker   /*!\brief Unspecified error */
98*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_ERROR,
99*fb1b10abSAndroid Build Coastguard Worker 
100*fb1b10abSAndroid Build Coastguard Worker   /*!\brief Memory operation failed */
101*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_MEM_ERROR,
102*fb1b10abSAndroid Build Coastguard Worker 
103*fb1b10abSAndroid Build Coastguard Worker   /*!\brief ABI version mismatch */
104*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_ABI_MISMATCH,
105*fb1b10abSAndroid Build Coastguard Worker 
106*fb1b10abSAndroid Build Coastguard Worker   /*!\brief Algorithm does not have required capability */
107*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_INCAPABLE,
108*fb1b10abSAndroid Build Coastguard Worker 
109*fb1b10abSAndroid Build Coastguard Worker   /*!\brief The given bitstream is not supported.
110*fb1b10abSAndroid Build Coastguard Worker    *
111*fb1b10abSAndroid Build Coastguard Worker    * The bitstream was unable to be parsed at the highest level. The decoder
112*fb1b10abSAndroid Build Coastguard Worker    * is unable to proceed. This error \ref SHOULD be treated as fatal to the
113*fb1b10abSAndroid Build Coastguard Worker    * stream. */
114*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_UNSUP_BITSTREAM,
115*fb1b10abSAndroid Build Coastguard Worker 
116*fb1b10abSAndroid Build Coastguard Worker   /*!\brief Encoded bitstream uses an unsupported feature
117*fb1b10abSAndroid Build Coastguard Worker    *
118*fb1b10abSAndroid Build Coastguard Worker    * The decoder does not implement a feature required by the encoder. This
119*fb1b10abSAndroid Build Coastguard Worker    * return code should only be used for features that prevent future
120*fb1b10abSAndroid Build Coastguard Worker    * pictures from being properly decoded. This error \ref MAY be treated as
121*fb1b10abSAndroid Build Coastguard Worker    * fatal to the stream or \ref MAY be treated as fatal to the current GOP.
122*fb1b10abSAndroid Build Coastguard Worker    */
123*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_UNSUP_FEATURE,
124*fb1b10abSAndroid Build Coastguard Worker 
125*fb1b10abSAndroid Build Coastguard Worker   /*!\brief The coded data for this stream is corrupt or incomplete
126*fb1b10abSAndroid Build Coastguard Worker    *
127*fb1b10abSAndroid Build Coastguard Worker    * There was a problem decoding the current frame.  This return code
128*fb1b10abSAndroid Build Coastguard Worker    * should only be used for failures that prevent future pictures from
129*fb1b10abSAndroid Build Coastguard Worker    * being properly decoded. This error \ref MAY be treated as fatal to the
130*fb1b10abSAndroid Build Coastguard Worker    * stream or \ref MAY be treated as fatal to the current GOP. If decoding
131*fb1b10abSAndroid Build Coastguard Worker    * is continued for the current GOP, artifacts may be present.
132*fb1b10abSAndroid Build Coastguard Worker    */
133*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_CORRUPT_FRAME,
134*fb1b10abSAndroid Build Coastguard Worker 
135*fb1b10abSAndroid Build Coastguard Worker   /*!\brief An application-supplied parameter is not valid.
136*fb1b10abSAndroid Build Coastguard Worker    *
137*fb1b10abSAndroid Build Coastguard Worker    */
138*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_INVALID_PARAM,
139*fb1b10abSAndroid Build Coastguard Worker 
140*fb1b10abSAndroid Build Coastguard Worker   /*!\brief An iterator reached the end of list.
141*fb1b10abSAndroid Build Coastguard Worker    *
142*fb1b10abSAndroid Build Coastguard Worker    */
143*fb1b10abSAndroid Build Coastguard Worker   VPX_CODEC_LIST_END
144*fb1b10abSAndroid Build Coastguard Worker 
145*fb1b10abSAndroid Build Coastguard Worker } vpx_codec_err_t;
146*fb1b10abSAndroid Build Coastguard Worker 
147*fb1b10abSAndroid Build Coastguard Worker /*! \brief Codec capabilities bitfield
148*fb1b10abSAndroid Build Coastguard Worker  *
149*fb1b10abSAndroid Build Coastguard Worker  *  Each codec advertises the capabilities it supports as part of its
150*fb1b10abSAndroid Build Coastguard Worker  *  ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces
151*fb1b10abSAndroid Build Coastguard Worker  *  or functionality, and are not required to be supported.
152*fb1b10abSAndroid Build Coastguard Worker  *
153*fb1b10abSAndroid Build Coastguard Worker  *  The available flags are specified by VPX_CODEC_CAP_* defines.
154*fb1b10abSAndroid Build Coastguard Worker  */
155*fb1b10abSAndroid Build Coastguard Worker typedef long vpx_codec_caps_t;
156*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */
157*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */
158*fb1b10abSAndroid Build Coastguard Worker 
159*fb1b10abSAndroid Build Coastguard Worker /*! Can support images at greater than 8 bitdepth.
160*fb1b10abSAndroid Build Coastguard Worker  */
161*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_CAP_HIGHBITDEPTH 0x4
162*fb1b10abSAndroid Build Coastguard Worker 
163*fb1b10abSAndroid Build Coastguard Worker /*! \brief Initialization-time Feature Enabling
164*fb1b10abSAndroid Build Coastguard Worker  *
165*fb1b10abSAndroid Build Coastguard Worker  *  Certain codec features must be known at initialization time, to allow for
166*fb1b10abSAndroid Build Coastguard Worker  *  proper memory allocation.
167*fb1b10abSAndroid Build Coastguard Worker  *
168*fb1b10abSAndroid Build Coastguard Worker  *  The available flags are specified by VPX_CODEC_USE_* defines.
169*fb1b10abSAndroid Build Coastguard Worker  */
170*fb1b10abSAndroid Build Coastguard Worker typedef long vpx_codec_flags_t;
171*fb1b10abSAndroid Build Coastguard Worker 
172*fb1b10abSAndroid Build Coastguard Worker /*!\brief Codec interface structure.
173*fb1b10abSAndroid Build Coastguard Worker  *
174*fb1b10abSAndroid Build Coastguard Worker  * Contains function pointers and other data private to the codec
175*fb1b10abSAndroid Build Coastguard Worker  * implementation. This structure is opaque to the application.
176*fb1b10abSAndroid Build Coastguard Worker  */
177*fb1b10abSAndroid Build Coastguard Worker typedef const struct vpx_codec_iface vpx_codec_iface_t;
178*fb1b10abSAndroid Build Coastguard Worker 
179*fb1b10abSAndroid Build Coastguard Worker /*!\brief Codec private data structure.
180*fb1b10abSAndroid Build Coastguard Worker  *
181*fb1b10abSAndroid Build Coastguard Worker  * Contains data private to the codec implementation. This structure is opaque
182*fb1b10abSAndroid Build Coastguard Worker  * to the application.
183*fb1b10abSAndroid Build Coastguard Worker  */
184*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_codec_priv vpx_codec_priv_t;
185*fb1b10abSAndroid Build Coastguard Worker 
186*fb1b10abSAndroid Build Coastguard Worker /*!\brief Iterator
187*fb1b10abSAndroid Build Coastguard Worker  *
188*fb1b10abSAndroid Build Coastguard Worker  * Opaque storage used for iterating over lists.
189*fb1b10abSAndroid Build Coastguard Worker  */
190*fb1b10abSAndroid Build Coastguard Worker typedef const void *vpx_codec_iter_t;
191*fb1b10abSAndroid Build Coastguard Worker 
192*fb1b10abSAndroid Build Coastguard Worker /*!\brief Codec context structure
193*fb1b10abSAndroid Build Coastguard Worker  *
194*fb1b10abSAndroid Build Coastguard Worker  * All codecs \ref MUST support this context structure fully. In general,
195*fb1b10abSAndroid Build Coastguard Worker  * this data should be considered private to the codec algorithm, and
196*fb1b10abSAndroid Build Coastguard Worker  * not be manipulated or examined by the calling application. Applications
197*fb1b10abSAndroid Build Coastguard Worker  * may reference the 'name' member to get a printable description of the
198*fb1b10abSAndroid Build Coastguard Worker  * algorithm.
199*fb1b10abSAndroid Build Coastguard Worker  */
200*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_codec_ctx {
201*fb1b10abSAndroid Build Coastguard Worker   const char *name;             /**< Printable interface name */
202*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_iface_t *iface;     /**< Interface pointers */
203*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_err_t err;          /**< Last returned error */
204*fb1b10abSAndroid Build Coastguard Worker   const char *err_detail;       /**< Detailed info, if available */
205*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_flags_t init_flags; /**< Flags passed at init time */
206*fb1b10abSAndroid Build Coastguard Worker   union {
207*fb1b10abSAndroid Build Coastguard Worker     /**< Decoder Configuration Pointer */
208*fb1b10abSAndroid Build Coastguard Worker     const struct vpx_codec_dec_cfg *dec;
209*fb1b10abSAndroid Build Coastguard Worker     /**< Encoder Configuration Pointer */
210*fb1b10abSAndroid Build Coastguard Worker     const struct vpx_codec_enc_cfg *enc;
211*fb1b10abSAndroid Build Coastguard Worker     const void *raw;
212*fb1b10abSAndroid Build Coastguard Worker   } config;               /**< Configuration pointer aliasing union */
213*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_priv_t *priv; /**< Algorithm private storage */
214*fb1b10abSAndroid Build Coastguard Worker } vpx_codec_ctx_t;
215*fb1b10abSAndroid Build Coastguard Worker 
216*fb1b10abSAndroid Build Coastguard Worker /*!\brief Bit depth for codec
217*fb1b10abSAndroid Build Coastguard Worker  * *
218*fb1b10abSAndroid Build Coastguard Worker  * This enumeration determines the bit depth of the codec.
219*fb1b10abSAndroid Build Coastguard Worker  */
220*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_bit_depth {
221*fb1b10abSAndroid Build Coastguard Worker   VPX_BITS_8 = 8,   /**<  8 bits */
222*fb1b10abSAndroid Build Coastguard Worker   VPX_BITS_10 = 10, /**< 10 bits */
223*fb1b10abSAndroid Build Coastguard Worker   VPX_BITS_12 = 12, /**< 12 bits */
224*fb1b10abSAndroid Build Coastguard Worker } vpx_bit_depth_t;
225*fb1b10abSAndroid Build Coastguard Worker 
226*fb1b10abSAndroid Build Coastguard Worker /*
227*fb1b10abSAndroid Build Coastguard Worker  * Library Version Number Interface
228*fb1b10abSAndroid Build Coastguard Worker  *
229*fb1b10abSAndroid Build Coastguard Worker  * For example, see the following sample return values:
230*fb1b10abSAndroid Build Coastguard Worker  *     vpx_codec_version()           (1<<16 | 2<<8 | 3)
231*fb1b10abSAndroid Build Coastguard Worker  *     vpx_codec_version_str()       "v1.2.3-rc1-16-gec6a1ba"
232*fb1b10abSAndroid Build Coastguard Worker  *     vpx_codec_version_extra_str() "rc1-16-gec6a1ba"
233*fb1b10abSAndroid Build Coastguard Worker  */
234*fb1b10abSAndroid Build Coastguard Worker 
235*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the version information (as an integer)
236*fb1b10abSAndroid Build Coastguard Worker  *
237*fb1b10abSAndroid Build Coastguard Worker  * Returns a packed encoding of the library version number. This will only
238*fb1b10abSAndroid Build Coastguard Worker  * include
239*fb1b10abSAndroid Build Coastguard Worker  * the major.minor.patch component of the version number. Note that this encoded
240*fb1b10abSAndroid Build Coastguard Worker  * value should be accessed through the macros provided, as the encoding may
241*fb1b10abSAndroid Build Coastguard Worker  * change
242*fb1b10abSAndroid Build Coastguard Worker  * in the future.
243*fb1b10abSAndroid Build Coastguard Worker  *
244*fb1b10abSAndroid Build Coastguard Worker  */
245*fb1b10abSAndroid Build Coastguard Worker int vpx_codec_version(void);
246*fb1b10abSAndroid Build Coastguard Worker #define VPX_VERSION_MAJOR(v) \
247*fb1b10abSAndroid Build Coastguard Worker   (((v) >> 16) & 0xff) /**< extract major from packed version */
248*fb1b10abSAndroid Build Coastguard Worker #define VPX_VERSION_MINOR(v) \
249*fb1b10abSAndroid Build Coastguard Worker   (((v) >> 8) & 0xff) /**< extract minor from packed version */
250*fb1b10abSAndroid Build Coastguard Worker #define VPX_VERSION_PATCH(v) \
251*fb1b10abSAndroid Build Coastguard Worker   (((v) >> 0) & 0xff) /**< extract patch from packed version */
252*fb1b10abSAndroid Build Coastguard Worker 
253*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the version major number */
254*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_version_major() ((vpx_codec_version() >> 16) & 0xff)
255*fb1b10abSAndroid Build Coastguard Worker 
256*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the version minor number */
257*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_version_minor() ((vpx_codec_version() >> 8) & 0xff)
258*fb1b10abSAndroid Build Coastguard Worker 
259*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the version patch number */
260*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_version_patch() ((vpx_codec_version() >> 0) & 0xff)
261*fb1b10abSAndroid Build Coastguard Worker 
262*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the version information (as a string)
263*fb1b10abSAndroid Build Coastguard Worker  *
264*fb1b10abSAndroid Build Coastguard Worker  * Returns a printable string containing the full library version number. This
265*fb1b10abSAndroid Build Coastguard Worker  * may
266*fb1b10abSAndroid Build Coastguard Worker  * contain additional text following the three digit version number, as to
267*fb1b10abSAndroid Build Coastguard Worker  * indicate
268*fb1b10abSAndroid Build Coastguard Worker  * release candidates, prerelease versions, etc.
269*fb1b10abSAndroid Build Coastguard Worker  *
270*fb1b10abSAndroid Build Coastguard Worker  */
271*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_version_str(void);
272*fb1b10abSAndroid Build Coastguard Worker 
273*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the version information (as a string)
274*fb1b10abSAndroid Build Coastguard Worker  *
275*fb1b10abSAndroid Build Coastguard Worker  * Returns a printable "extra string". This is the component of the string
276*fb1b10abSAndroid Build Coastguard Worker  * returned
277*fb1b10abSAndroid Build Coastguard Worker  * by vpx_codec_version_str() following the three digit version number.
278*fb1b10abSAndroid Build Coastguard Worker  *
279*fb1b10abSAndroid Build Coastguard Worker  */
280*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_version_extra_str(void);
281*fb1b10abSAndroid Build Coastguard Worker 
282*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the build configuration
283*fb1b10abSAndroid Build Coastguard Worker  *
284*fb1b10abSAndroid Build Coastguard Worker  * Returns a printable string containing an encoded version of the build
285*fb1b10abSAndroid Build Coastguard Worker  * configuration. This may be useful to vpx support.
286*fb1b10abSAndroid Build Coastguard Worker  *
287*fb1b10abSAndroid Build Coastguard Worker  */
288*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_build_config(void);
289*fb1b10abSAndroid Build Coastguard Worker 
290*fb1b10abSAndroid Build Coastguard Worker /*!\brief Return the name for a given interface
291*fb1b10abSAndroid Build Coastguard Worker  *
292*fb1b10abSAndroid Build Coastguard Worker  * Returns a human readable string for name of the given codec interface.
293*fb1b10abSAndroid Build Coastguard Worker  *
294*fb1b10abSAndroid Build Coastguard Worker  * \param[in]    iface     Interface pointer
295*fb1b10abSAndroid Build Coastguard Worker  *
296*fb1b10abSAndroid Build Coastguard Worker  */
297*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_iface_name(vpx_codec_iface_t *iface);
298*fb1b10abSAndroid Build Coastguard Worker 
299*fb1b10abSAndroid Build Coastguard Worker /*!\brief Convert error number to printable string
300*fb1b10abSAndroid Build Coastguard Worker  *
301*fb1b10abSAndroid Build Coastguard Worker  * Returns a human readable string for the last error returned by the
302*fb1b10abSAndroid Build Coastguard Worker  * algorithm. The returned error will be one line and will not contain
303*fb1b10abSAndroid Build Coastguard Worker  * any newline characters.
304*fb1b10abSAndroid Build Coastguard Worker  *
305*fb1b10abSAndroid Build Coastguard Worker  *
306*fb1b10abSAndroid Build Coastguard Worker  * \param[in]    err     Error number.
307*fb1b10abSAndroid Build Coastguard Worker  *
308*fb1b10abSAndroid Build Coastguard Worker  */
309*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_err_to_string(vpx_codec_err_t err);
310*fb1b10abSAndroid Build Coastguard Worker 
311*fb1b10abSAndroid Build Coastguard Worker /*!\brief Retrieve error synopsis for codec context
312*fb1b10abSAndroid Build Coastguard Worker  *
313*fb1b10abSAndroid Build Coastguard Worker  * Returns a human readable string for the last error returned by the
314*fb1b10abSAndroid Build Coastguard Worker  * algorithm. The returned error will be one line and will not contain
315*fb1b10abSAndroid Build Coastguard Worker  * any newline characters.
316*fb1b10abSAndroid Build Coastguard Worker  *
317*fb1b10abSAndroid Build Coastguard Worker  *
318*fb1b10abSAndroid Build Coastguard Worker  * \param[in]    ctx     Pointer to this instance's context.
319*fb1b10abSAndroid Build Coastguard Worker  *
320*fb1b10abSAndroid Build Coastguard Worker  */
321*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_error(const vpx_codec_ctx_t *ctx);
322*fb1b10abSAndroid Build Coastguard Worker 
323*fb1b10abSAndroid Build Coastguard Worker /*!\brief Retrieve detailed error information for codec context
324*fb1b10abSAndroid Build Coastguard Worker  *
325*fb1b10abSAndroid Build Coastguard Worker  * Returns a human readable string providing detailed information about
326*fb1b10abSAndroid Build Coastguard Worker  * the last error. The returned string is only valid until the next
327*fb1b10abSAndroid Build Coastguard Worker  * vpx_codec_* function call (except vpx_codec_error and
328*fb1b10abSAndroid Build Coastguard Worker  * vpx_codec_error_detail) on the codec context.
329*fb1b10abSAndroid Build Coastguard Worker  *
330*fb1b10abSAndroid Build Coastguard Worker  * \param[in]    ctx     Pointer to this instance's context.
331*fb1b10abSAndroid Build Coastguard Worker  *
332*fb1b10abSAndroid Build Coastguard Worker  * \retval NULL
333*fb1b10abSAndroid Build Coastguard Worker  *     No detailed information is available.
334*fb1b10abSAndroid Build Coastguard Worker  */
335*fb1b10abSAndroid Build Coastguard Worker const char *vpx_codec_error_detail(const vpx_codec_ctx_t *ctx);
336*fb1b10abSAndroid Build Coastguard Worker 
337*fb1b10abSAndroid Build Coastguard Worker /* REQUIRED FUNCTIONS
338*fb1b10abSAndroid Build Coastguard Worker  *
339*fb1b10abSAndroid Build Coastguard Worker  * The following functions are required to be implemented for all codecs.
340*fb1b10abSAndroid Build Coastguard Worker  * They represent the base case functionality expected of all codecs.
341*fb1b10abSAndroid Build Coastguard Worker  */
342*fb1b10abSAndroid Build Coastguard Worker 
343*fb1b10abSAndroid Build Coastguard Worker /*!\brief Destroy a codec instance
344*fb1b10abSAndroid Build Coastguard Worker  *
345*fb1b10abSAndroid Build Coastguard Worker  * Destroys a codec context, freeing any associated memory buffers.
346*fb1b10abSAndroid Build Coastguard Worker  *
347*fb1b10abSAndroid Build Coastguard Worker  * \param[in] ctx   Pointer to this instance's context
348*fb1b10abSAndroid Build Coastguard Worker  *
349*fb1b10abSAndroid Build Coastguard Worker  * \retval #VPX_CODEC_OK
350*fb1b10abSAndroid Build Coastguard Worker  *     The codec instance has been destroyed.
351*fb1b10abSAndroid Build Coastguard Worker  * \retval #VPX_CODEC_INVALID_PARAM
352*fb1b10abSAndroid Build Coastguard Worker  *     ctx is a null pointer.
353*fb1b10abSAndroid Build Coastguard Worker  * \retval #VPX_CODEC_ERROR
354*fb1b10abSAndroid Build Coastguard Worker  *     Codec context not initialized.
355*fb1b10abSAndroid Build Coastguard Worker  */
356*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx);
357*fb1b10abSAndroid Build Coastguard Worker 
358*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get the capabilities of an algorithm.
359*fb1b10abSAndroid Build Coastguard Worker  *
360*fb1b10abSAndroid Build Coastguard Worker  * Retrieves the capabilities bitfield from the algorithm's interface.
361*fb1b10abSAndroid Build Coastguard Worker  *
362*fb1b10abSAndroid Build Coastguard Worker  * \param[in] iface   Pointer to the algorithm interface
363*fb1b10abSAndroid Build Coastguard Worker  *
364*fb1b10abSAndroid Build Coastguard Worker  */
365*fb1b10abSAndroid Build Coastguard Worker vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface);
366*fb1b10abSAndroid Build Coastguard Worker 
367*fb1b10abSAndroid Build Coastguard Worker /*!\brief Control algorithm
368*fb1b10abSAndroid Build Coastguard Worker  *
369*fb1b10abSAndroid Build Coastguard Worker  * This function is used to exchange algorithm specific data with the codec
370*fb1b10abSAndroid Build Coastguard Worker  * instance. This can be used to implement features specific to a particular
371*fb1b10abSAndroid Build Coastguard Worker  * algorithm.
372*fb1b10abSAndroid Build Coastguard Worker  *
373*fb1b10abSAndroid Build Coastguard Worker  * This wrapper function dispatches the request to the helper function
374*fb1b10abSAndroid Build Coastguard Worker  * associated with the given ctrl_id. It tries to call this function
375*fb1b10abSAndroid Build Coastguard Worker  * transparently, but will return #VPX_CODEC_ERROR if the request could not
376*fb1b10abSAndroid Build Coastguard Worker  * be dispatched.
377*fb1b10abSAndroid Build Coastguard Worker  *
378*fb1b10abSAndroid Build Coastguard Worker  * Note that this function should not be used directly. Call the
379*fb1b10abSAndroid Build Coastguard Worker  * #vpx_codec_control wrapper macro instead.
380*fb1b10abSAndroid Build Coastguard Worker  *
381*fb1b10abSAndroid Build Coastguard Worker  * \param[in]     ctx              Pointer to this instance's context
382*fb1b10abSAndroid Build Coastguard Worker  * \param[in]     ctrl_id          Algorithm specific control identifier
383*fb1b10abSAndroid Build Coastguard Worker  *
384*fb1b10abSAndroid Build Coastguard Worker  * \retval #VPX_CODEC_OK
385*fb1b10abSAndroid Build Coastguard Worker  *     The control request was processed.
386*fb1b10abSAndroid Build Coastguard Worker  * \retval #VPX_CODEC_ERROR
387*fb1b10abSAndroid Build Coastguard Worker  *     The control request was not processed.
388*fb1b10abSAndroid Build Coastguard Worker  * \retval #VPX_CODEC_INVALID_PARAM
389*fb1b10abSAndroid Build Coastguard Worker  *     The data was not valid.
390*fb1b10abSAndroid Build Coastguard Worker  */
391*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, int ctrl_id, ...);
392*fb1b10abSAndroid Build Coastguard Worker #if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS
393*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_control(ctx, id, data) vpx_codec_control_(ctx, id, data)
394*fb1b10abSAndroid Build Coastguard Worker #define VPX_CTRL_USE_TYPE(id, typ)
395*fb1b10abSAndroid Build Coastguard Worker #define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ)
396*fb1b10abSAndroid Build Coastguard Worker #define VPX_CTRL_VOID(id, typ)
397*fb1b10abSAndroid Build Coastguard Worker 
398*fb1b10abSAndroid Build Coastguard Worker #else
399*fb1b10abSAndroid Build Coastguard Worker /*!\brief vpx_codec_control wrapper macro
400*fb1b10abSAndroid Build Coastguard Worker  *
401*fb1b10abSAndroid Build Coastguard Worker  * This macro allows for type safe conversions across the variadic parameter
402*fb1b10abSAndroid Build Coastguard Worker  * to vpx_codec_control_().
403*fb1b10abSAndroid Build Coastguard Worker  *
404*fb1b10abSAndroid Build Coastguard Worker  * \internal
405*fb1b10abSAndroid Build Coastguard Worker  * It works by dispatching the call to the control function through a wrapper
406*fb1b10abSAndroid Build Coastguard Worker  * function named with the id parameter.
407*fb1b10abSAndroid Build Coastguard Worker  */
408*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_control(ctx, id, data) \
409*fb1b10abSAndroid Build Coastguard Worker   vpx_codec_control_##id(ctx, id, data) /**<\hideinitializer*/
410*fb1b10abSAndroid Build Coastguard Worker 
411*fb1b10abSAndroid Build Coastguard Worker /*!\brief vpx_codec_control type definition macro
412*fb1b10abSAndroid Build Coastguard Worker  *
413*fb1b10abSAndroid Build Coastguard Worker  * This macro allows for type safe conversions across the variadic parameter
414*fb1b10abSAndroid Build Coastguard Worker  * to vpx_codec_control_(). It defines the type of the argument for a given
415*fb1b10abSAndroid Build Coastguard Worker  * control identifier.
416*fb1b10abSAndroid Build Coastguard Worker  *
417*fb1b10abSAndroid Build Coastguard Worker  * \internal
418*fb1b10abSAndroid Build Coastguard Worker  * It defines a static function with
419*fb1b10abSAndroid Build Coastguard Worker  * the correctly typed arguments as a wrapper to the type-unsafe internal
420*fb1b10abSAndroid Build Coastguard Worker  * function.
421*fb1b10abSAndroid Build Coastguard Worker  */
422*fb1b10abSAndroid Build Coastguard Worker #define VPX_CTRL_USE_TYPE(id, typ)                                           \
423*fb1b10abSAndroid Build Coastguard Worker   static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int, typ) \
424*fb1b10abSAndroid Build Coastguard Worker       VPX_UNUSED;                                                            \
425*fb1b10abSAndroid Build Coastguard Worker                                                                              \
426*fb1b10abSAndroid Build Coastguard Worker   static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx,        \
427*fb1b10abSAndroid Build Coastguard Worker                                                 int ctrl_id, typ data) {     \
428*fb1b10abSAndroid Build Coastguard Worker     return vpx_codec_control_(ctx, ctrl_id, data);                           \
429*fb1b10abSAndroid Build Coastguard Worker   } /**<\hideinitializer*/
430*fb1b10abSAndroid Build Coastguard Worker 
431*fb1b10abSAndroid Build Coastguard Worker /*!\brief vpx_codec_control deprecated type definition macro
432*fb1b10abSAndroid Build Coastguard Worker  *
433*fb1b10abSAndroid Build Coastguard Worker  * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is
434*fb1b10abSAndroid Build Coastguard Worker  * deprecated and should not be used. Consult the documentation for your
435*fb1b10abSAndroid Build Coastguard Worker  * codec for more information.
436*fb1b10abSAndroid Build Coastguard Worker  *
437*fb1b10abSAndroid Build Coastguard Worker  * \internal
438*fb1b10abSAndroid Build Coastguard Worker  * It defines a static function with the correctly typed arguments as a
439*fb1b10abSAndroid Build Coastguard Worker  * wrapper to the type-unsafe internal function.
440*fb1b10abSAndroid Build Coastguard Worker  */
441*fb1b10abSAndroid Build Coastguard Worker #define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ)                            \
442*fb1b10abSAndroid Build Coastguard Worker   VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \
443*fb1b10abSAndroid Build Coastguard Worker       vpx_codec_ctx_t *, int, typ) VPX_DEPRECATED VPX_UNUSED;            \
444*fb1b10abSAndroid Build Coastguard Worker                                                                          \
445*fb1b10abSAndroid Build Coastguard Worker   VPX_DECLSPEC_DEPRECATED static vpx_codec_err_t vpx_codec_control_##id( \
446*fb1b10abSAndroid Build Coastguard Worker       vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {                     \
447*fb1b10abSAndroid Build Coastguard Worker     return vpx_codec_control_(ctx, ctrl_id, data);                       \
448*fb1b10abSAndroid Build Coastguard Worker   } /**<\hideinitializer*/
449*fb1b10abSAndroid Build Coastguard Worker 
450*fb1b10abSAndroid Build Coastguard Worker /*!\brief vpx_codec_control void type definition macro
451*fb1b10abSAndroid Build Coastguard Worker  *
452*fb1b10abSAndroid Build Coastguard Worker  * This macro allows for type safe conversions across the variadic parameter
453*fb1b10abSAndroid Build Coastguard Worker  * to vpx_codec_control_(). It indicates that a given control identifier takes
454*fb1b10abSAndroid Build Coastguard Worker  * no argument.
455*fb1b10abSAndroid Build Coastguard Worker  *
456*fb1b10abSAndroid Build Coastguard Worker  * \internal
457*fb1b10abSAndroid Build Coastguard Worker  * It defines a static function without a data argument as a wrapper to the
458*fb1b10abSAndroid Build Coastguard Worker  * type-unsafe internal function.
459*fb1b10abSAndroid Build Coastguard Worker  */
460*fb1b10abSAndroid Build Coastguard Worker #define VPX_CTRL_VOID(id)                                               \
461*fb1b10abSAndroid Build Coastguard Worker   static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *, int) \
462*fb1b10abSAndroid Build Coastguard Worker       VPX_UNUSED;                                                       \
463*fb1b10abSAndroid Build Coastguard Worker                                                                         \
464*fb1b10abSAndroid Build Coastguard Worker   static vpx_codec_err_t vpx_codec_control_##id(vpx_codec_ctx_t *ctx,   \
465*fb1b10abSAndroid Build Coastguard Worker                                                 int ctrl_id) {          \
466*fb1b10abSAndroid Build Coastguard Worker     return vpx_codec_control_(ctx, ctrl_id);                            \
467*fb1b10abSAndroid Build Coastguard Worker   } /**<\hideinitializer*/
468*fb1b10abSAndroid Build Coastguard Worker 
469*fb1b10abSAndroid Build Coastguard Worker #endif
470*fb1b10abSAndroid Build Coastguard Worker 
471*fb1b10abSAndroid Build Coastguard Worker /*!@} - end defgroup codec*/
472*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus
473*fb1b10abSAndroid Build Coastguard Worker }
474*fb1b10abSAndroid Build Coastguard Worker #endif
475*fb1b10abSAndroid Build Coastguard Worker #endif  // VPX_VPX_VPX_CODEC_H_
476