WebM VP8 Codec SDK
|
00001 /* 00002 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 00003 * 00004 * Use of this source code is governed by a BSD-style license 00005 * that can be found in the LICENSE file in the root of the source 00006 * tree. An additional intellectual property rights grant can be found 00007 * in the file PATENTS. All contributing project authors may 00008 * be found in the AUTHORS file in the root of the source tree. 00009 */ 00010 00011 00039 #ifdef __cplusplus 00040 extern "C" { 00041 #endif 00042 00043 #ifndef VPX_CODEC_H 00044 #define VPX_CODEC_H 00045 #include "vpx_integer.h" 00046 #include "vpx_image.h" 00047 00049 #ifndef DEPRECATED 00050 #if defined(__GNUC__) && __GNUC__ 00051 #define DEPRECATED __attribute__ ((deprecated)) 00052 #define DECLSPEC_DEPRECATED 00053 #elif defined(_MSC_VER) 00054 #define DEPRECATED 00055 #define DECLSPEC_DEPRECATED __declspec(deprecated) 00056 #else 00057 #define DEPRECATED 00058 #define DECLSPEC_DEPRECATED 00059 #endif 00060 #endif 00061 00063 #ifdef UNUSED 00064 #elif __GNUC__ 00065 #define UNUSED __attribute__ ((unused)) 00066 #else 00067 #define UNUSED 00068 #endif 00069 00078 #define VPX_CODEC_ABI_VERSION (2 + VPX_IMAGE_ABI_VERSION) 00081 typedef enum { 00082 00083 VPX_CODEC_OK, 00084 00086 VPX_CODEC_ERROR, 00087 00089 VPX_CODEC_MEM_ERROR, 00090 00092 VPX_CODEC_ABI_MISMATCH, 00093 00095 VPX_CODEC_INCAPABLE, 00096 00102 VPX_CODEC_UNSUP_BITSTREAM, 00103 00111 VPX_CODEC_UNSUP_FEATURE, 00112 00121 VPX_CODEC_CORRUPT_FRAME, 00122 00126 VPX_CODEC_INVALID_PARAM, 00127 00131 VPX_CODEC_LIST_END 00132 00133 } 00134 vpx_codec_err_t; 00135 00136 00145 typedef long vpx_codec_caps_t; 00146 #define VPX_CODEC_CAP_DECODER 0x1 00147 #define VPX_CODEC_CAP_ENCODER 0x2 00148 #define VPX_CODEC_CAP_XMA 0x4 00158 typedef long vpx_codec_flags_t; 00159 #define VPX_CODEC_USE_XMA 0x00000001 00167 typedef const struct vpx_codec_iface vpx_codec_iface_t; 00168 00169 00175 typedef struct vpx_codec_priv vpx_codec_priv_t; 00176 00177 00182 typedef const void *vpx_codec_iter_t; 00183 00184 00193 typedef struct vpx_codec_ctx 00194 { 00195 const char *name; 00196 vpx_codec_iface_t *iface; 00197 vpx_codec_err_t err; 00198 const char *err_detail; 00199 vpx_codec_flags_t init_flags; 00200 union 00201 { 00202 struct vpx_codec_dec_cfg *dec; 00203 struct vpx_codec_enc_cfg *enc; 00204 void *raw; 00205 } config; 00206 vpx_codec_priv_t *priv; 00207 } vpx_codec_ctx_t; 00208 00209 00210 /* 00211 * Library Version Number Interface 00212 * 00213 * For example, see the following sample return values: 00214 * vpx_codec_version() (1<<16 | 2<<8 | 3) 00215 * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba" 00216 * vpx_codec_version_extra_str() "rc1-16-gec6a1ba" 00217 */ 00218 00227 int vpx_codec_version(void); 00228 #define VPX_VERSION_MAJOR(v) ((v>>16)&0xff) 00229 #define VPX_VERSION_MINOR(v) ((v>>8)&0xff) 00230 #define VPX_VERSION_PATCH(v) ((v>>0)&0xff) 00233 #define vpx_codec_version_major() ((vpx_codec_version()>>16)&0xff) 00234 00236 #define vpx_codec_version_minor() ((vpx_codec_version()>>8)&0xff) 00237 00239 #define vpx_codec_version_patch() ((vpx_codec_version()>>0)&0xff) 00240 00241 00249 const char *vpx_codec_version_str(void); 00250 00251 00258 const char *vpx_codec_version_extra_str(void); 00259 00260 00267 const char *vpx_codec_build_config(void); 00268 00269 00277 const char *vpx_codec_iface_name(vpx_codec_iface_t *iface); 00278 00279 00290 const char *vpx_codec_err_to_string(vpx_codec_err_t err); 00291 00292 00303 const char *vpx_codec_error(vpx_codec_ctx_t *ctx); 00304 00305 00316 const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx); 00317 00318 00319 /* REQUIRED FUNCTIONS 00320 * 00321 * The following functions are required to be implemented for all codecs. 00322 * They represent the base case functionality expected of all codecs. 00323 */ 00324 00336 vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx); 00337 00338 00346 vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface); 00347 00348 00373 vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx, 00374 int ctrl_id, 00375 ...); 00376 #if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS 00377 # define vpx_codec_control(ctx,id,data) vpx_codec_control_(ctx,id,data) 00378 # define VPX_CTRL_USE_TYPE(id, typ) 00379 # define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) 00380 # define VPX_CTRL_VOID(id, typ) 00381 00382 #else 00383 00392 # define vpx_codec_control(ctx,id,data) vpx_codec_control_##id(ctx,id,data)\ 00393 00407 # define VPX_CTRL_USE_TYPE(id, typ) \ 00408 static vpx_codec_err_t \ 00409 vpx_codec_control_##id(vpx_codec_ctx_t*, int, typ) UNUSED;\ 00410 \ 00411 static vpx_codec_err_t \ 00412 vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {\ 00413 return vpx_codec_control_(ctx, ctrl_id, data);\ 00414 } 00427 # define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ 00428 DECLSPEC_DEPRECATED static vpx_codec_err_t \ 00429 vpx_codec_control_##id(vpx_codec_ctx_t*, int, typ) DEPRECATED UNUSED;\ 00430 \ 00431 DECLSPEC_DEPRECATED static vpx_codec_err_t \ 00432 vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {\ 00433 return vpx_codec_control_(ctx, ctrl_id, data);\ 00434 } 00447 # define VPX_CTRL_VOID(id) \ 00448 static vpx_codec_err_t \ 00449 vpx_codec_control_##id(vpx_codec_ctx_t*, int) UNUSED;\ 00450 \ 00451 static vpx_codec_err_t \ 00452 vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id) {\ 00453 return vpx_codec_control_(ctx, ctrl_id);\ 00454 } 00457 #endif 00458 00459 00476 typedef struct vpx_codec_mmap 00477 { 00478 /* 00479 * The following members are set by the codec when requesting a segment 00480 */ 00481 unsigned int id; 00482 unsigned long sz; 00483 unsigned int align; 00484 unsigned int flags; 00485 #define VPX_CODEC_MEM_ZERO 0x1 00486 #define VPX_CODEC_MEM_WRONLY 0x2 00487 #define VPX_CODEC_MEM_FAST 0x4 00489 /* The following members are to be filled in by the allocation function */ 00490 void *base; 00491 void (*dtor)(struct vpx_codec_mmap *map); 00492 void *priv; 00493 } vpx_codec_mmap_t; 00517 vpx_codec_err_t vpx_codec_get_mem_map(vpx_codec_ctx_t *ctx, 00518 vpx_codec_mmap_t *mmap, 00519 vpx_codec_iter_t *iter); 00520 00521 00543 vpx_codec_err_t vpx_codec_set_mem_map(vpx_codec_ctx_t *ctx, 00544 vpx_codec_mmap_t *mmaps, 00545 unsigned int num_maps); 00546 00551 #endif 00552 #ifdef __cplusplus 00553 } 00554 #endif