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