OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 * \note | 241 * \note |
242 * When decoding VP9, the application may be required to pass in at least | 242 * When decoding VP9, the application may be required to pass in at least |
243 * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame | 243 * #VP9_MAXIMUM_REF_BUFFERS + #VPX_MAXIMUM_WORK_BUFFERS external frame |
244 * buffers. | 244 * buffers. |
245 */ | 245 */ |
246 typedef vpx_codec_err_t (*vpx_codec_set_fb_fn_t)( | 246 typedef vpx_codec_err_t (*vpx_codec_set_fb_fn_t)( |
247 vpx_codec_alg_priv_t *ctx, | 247 vpx_codec_alg_priv_t *ctx, |
248 vpx_get_frame_buffer_cb_fn_t cb_get, | 248 vpx_get_frame_buffer_cb_fn_t cb_get, |
249 vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); | 249 vpx_release_frame_buffer_cb_fn_t cb_release, void *cb_priv); |
250 | 250 |
251 /*\brief eXternal Memory Allocation memory map get iterator | |
252 * | |
253 * Iterates over a list of the memory maps requested by the decoder. The | |
254 * iterator storage should be initialized to NULL to start the iteration. | |
255 * Iteration is complete when this function returns NULL. | |
256 * | |
257 * \param[in out] iter Iterator storage, initialized to NULL | |
258 * | |
259 * \return Returns a pointer to an memory segment descriptor, or NULL to | |
260 * indicate end-of-list. | |
261 */ | |
262 typedef vpx_codec_err_t (*vpx_codec_get_mmap_fn_t)(const vpx_codec_ctx_t *c
tx, | |
263 vpx_codec_mmap_t *m
map, | |
264 vpx_codec_iter_t *i
ter); | |
265 | |
266 | |
267 /*\brief eXternal Memory Allocation memory map set iterator | |
268 * | |
269 * Sets a memory descriptor inside the decoder instance. | |
270 * | |
271 * \param[in] ctx Pointer to this instance's context | |
272 * \param[in] mmap Memory map to store. | |
273 * | |
274 * \retval #VPX_CODEC_OK | |
275 * The memory map was accepted and stored. | |
276 * \retval #VPX_CODEC_MEM_ERROR | |
277 * The memory map was rejected. | |
278 */ | |
279 typedef vpx_codec_err_t (*vpx_codec_set_mmap_fn_t)(vpx_codec_ctx_t *ctx, | |
280 const vpx_codec_mmap_t *mmap
); | |
281 | |
282 | 251 |
283 typedef vpx_codec_err_t (*vpx_codec_encode_fn_t)(vpx_codec_alg_priv_t *ctx, | 252 typedef vpx_codec_err_t (*vpx_codec_encode_fn_t)(vpx_codec_alg_priv_t *ctx, |
284 const vpx_image_t *img, | 253 const vpx_image_t *img, |
285 vpx_codec_pts_t pts, | 254 vpx_codec_pts_t pts, |
286 unsigned long duration
, | 255 unsigned long duration
, |
287 vpx_enc_frame_flags_t flags, | 256 vpx_enc_frame_flags_t flags, |
288 unsigned long deadline
); | 257 unsigned long deadline
); |
289 typedef const vpx_codec_cx_pkt_t *(*vpx_codec_get_cx_data_fn_t)(vpx_codec_alg_pr
iv_t *ctx, | 258 typedef const vpx_codec_cx_pkt_t *(*vpx_codec_get_cx_data_fn_t)(vpx_codec_alg_pr
iv_t *ctx, |
290 vpx_codec_iter_t
*iter); | 259 vpx_codec_iter_t
*iter); |
291 | 260 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 * | 292 * |
324 * All decoders \ref MUST expose a variable of this type. | 293 * All decoders \ref MUST expose a variable of this type. |
325 */ | 294 */ |
326 struct vpx_codec_iface { | 295 struct vpx_codec_iface { |
327 const char *name; /**< Identification String */ | 296 const char *name; /**< Identification String */ |
328 int abi_version; /**< Implemented ABI version */ | 297 int abi_version; /**< Implemented ABI version */ |
329 vpx_codec_caps_t caps; /**< Decoder capabilities */ | 298 vpx_codec_caps_t caps; /**< Decoder capabilities */ |
330 vpx_codec_init_fn_t init; /**< \copydoc ::vpx_codec_init_fn_t */ | 299 vpx_codec_init_fn_t init; /**< \copydoc ::vpx_codec_init_fn_t */ |
331 vpx_codec_destroy_fn_t destroy; /**< \copydoc ::vpx_codec_destroy_fn_t
*/ | 300 vpx_codec_destroy_fn_t destroy; /**< \copydoc ::vpx_codec_destroy_fn_t
*/ |
332 vpx_codec_ctrl_fn_map_t *ctrl_maps; /**< \copydoc ::vpx_codec_ctrl_fn_map_t
*/ | 301 vpx_codec_ctrl_fn_map_t *ctrl_maps; /**< \copydoc ::vpx_codec_ctrl_fn_map_t
*/ |
333 vpx_codec_get_mmap_fn_t get_mmap; /**< \copydoc ::vpx_codec_get_mmap_fn_t
*/ | |
334 vpx_codec_set_mmap_fn_t set_mmap; /**< \copydoc ::vpx_codec_set_mmap_fn_t
*/ | |
335 struct vpx_codec_dec_iface { | 302 struct vpx_codec_dec_iface { |
336 vpx_codec_peek_si_fn_t peek_si; /**< \copydoc ::vpx_codec_peek_si_fn_
t */ | 303 vpx_codec_peek_si_fn_t peek_si; /**< \copydoc ::vpx_codec_peek_si_fn_
t */ |
337 vpx_codec_get_si_fn_t get_si; /**< \copydoc ::vpx_codec_get_si_fn_t
*/ | 304 vpx_codec_get_si_fn_t get_si; /**< \copydoc ::vpx_codec_get_si_fn_t
*/ |
338 vpx_codec_decode_fn_t decode; /**< \copydoc ::vpx_codec_decode_fn_t
*/ | 305 vpx_codec_decode_fn_t decode; /**< \copydoc ::vpx_codec_decode_fn_t
*/ |
339 vpx_codec_get_frame_fn_t get_frame; /**< \copydoc ::vpx_codec_get_frame_f
n_t */ | 306 vpx_codec_get_frame_fn_t get_frame; /**< \copydoc ::vpx_codec_get_frame_f
n_t */ |
340 vpx_codec_set_fb_fn_t set_fb_fn; /**< \copydoc ::vpx_codec_set_fb_fn_t
*/ | 307 vpx_codec_set_fb_fn_t set_fb_fn; /**< \copydoc ::vpx_codec_set_fb_fn_t
*/ |
341 } dec; | 308 } dec; |
342 struct vpx_codec_enc_iface { | 309 struct vpx_codec_enc_iface { |
| 310 int cfg_map_count; |
343 vpx_codec_enc_cfg_map_t *cfg_maps; /**< \copydoc ::vpx_codec_
enc_cfg_map_t */ | 311 vpx_codec_enc_cfg_map_t *cfg_maps; /**< \copydoc ::vpx_codec_
enc_cfg_map_t */ |
344 vpx_codec_encode_fn_t encode; /**< \copydoc ::vpx_codec_
encode_fn_t */ | 312 vpx_codec_encode_fn_t encode; /**< \copydoc ::vpx_codec_
encode_fn_t */ |
345 vpx_codec_get_cx_data_fn_t get_cx_data; /**< \copydoc ::vpx_codec_
get_cx_data_fn_t */ | 313 vpx_codec_get_cx_data_fn_t get_cx_data; /**< \copydoc ::vpx_codec_
get_cx_data_fn_t */ |
346 vpx_codec_enc_config_set_fn_t cfg_set; /**< \copydoc ::vpx_codec_
enc_config_set_fn_t */ | 314 vpx_codec_enc_config_set_fn_t cfg_set; /**< \copydoc ::vpx_codec_
enc_config_set_fn_t */ |
347 vpx_codec_get_global_headers_fn_t get_glob_hdrs; /**< \copydoc ::vpx_codec_
get_global_headers_fn_t */ | 315 vpx_codec_get_global_headers_fn_t get_glob_hdrs; /**< \copydoc ::vpx_codec_
get_global_headers_fn_t */ |
348 vpx_codec_get_preview_frame_fn_t get_preview; /**< \copydoc ::vpx_codec_
get_preview_frame_fn_t */ | 316 vpx_codec_get_preview_frame_fn_t get_preview; /**< \copydoc ::vpx_codec_
get_preview_frame_fn_t */ |
349 vpx_codec_enc_mr_get_mem_loc_fn_t mr_get_mem_loc; /**< \copydoc ::vpx_cod
ec_enc_mr_get_mem_loc_fn_t */ | 317 vpx_codec_enc_mr_get_mem_loc_fn_t mr_get_mem_loc; /**< \copydoc ::vpx_cod
ec_enc_mr_get_mem_loc_fn_t */ |
350 } enc; | 318 } enc; |
351 }; | 319 }; |
352 | 320 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 struct vpx_codec_priv_enc_mr_cfg | 362 struct vpx_codec_priv_enc_mr_cfg |
395 { | 363 { |
396 unsigned int mr_total_resolutions; | 364 unsigned int mr_total_resolutions; |
397 unsigned int mr_encoder_id; | 365 unsigned int mr_encoder_id; |
398 struct vpx_rational mr_down_sampling_factor; | 366 struct vpx_rational mr_down_sampling_factor; |
399 void* mr_low_res_mode_info; | 367 void* mr_low_res_mode_info; |
400 }; | 368 }; |
401 | 369 |
402 #undef VPX_CTRL_USE_TYPE | 370 #undef VPX_CTRL_USE_TYPE |
403 #define VPX_CTRL_USE_TYPE(id, typ) \ | 371 #define VPX_CTRL_USE_TYPE(id, typ) \ |
404 static typ id##__value(va_list args) {return va_arg(args, typ);} \ | 372 static VPX_INLINE typ id##__value(va_list args) {return va_arg(args, typ);} |
405 | 373 |
406 #undef VPX_CTRL_USE_TYPE_DEPRECATED | 374 #undef VPX_CTRL_USE_TYPE_DEPRECATED |
407 #define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ | 375 #define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \ |
408 static typ id##__value(va_list args) {return va_arg(args, typ);} \ | 376 static VPX_INLINE typ id##__value(va_list args) {return va_arg(args, typ);} |
409 | 377 |
410 #define CAST(id, arg) id##__value(arg) | 378 #define CAST(id, arg) id##__value(arg) |
411 | 379 |
412 /* CODEC_INTERFACE convenience macro | 380 /* CODEC_INTERFACE convenience macro |
413 * | 381 * |
414 * By convention, each codec interface is a struct with extern linkage, where | 382 * By convention, each codec interface is a struct with extern linkage, where |
415 * the symbol is suffixed with _algo. A getter function is also defined to | 383 * the symbol is suffixed with _algo. A getter function is also defined to |
416 * return a pointer to the struct, since in some cases it's easier to work | 384 * return a pointer to the struct, since in some cases it's easier to work |
417 * with text symbols than data symbols (see issue #169). This function has | 385 * with text symbols than data symbols (see issue #169). This function has |
418 * the same name as the struct, less the _algo suffix. The CODEC_INTERFACE | 386 * the same name as the struct, less the _algo suffix. The CODEC_INTERFACE |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 #include <setjmp.h> | 424 #include <setjmp.h> |
457 | 425 |
458 struct vpx_internal_error_info { | 426 struct vpx_internal_error_info { |
459 vpx_codec_err_t error_code; | 427 vpx_codec_err_t error_code; |
460 int has_detail; | 428 int has_detail; |
461 char detail[80]; | 429 char detail[80]; |
462 int setjmp; | 430 int setjmp; |
463 jmp_buf jmp; | 431 jmp_buf jmp; |
464 }; | 432 }; |
465 | 433 |
466 static void vpx_internal_error(struct vpx_internal_error_info *info, | 434 void vpx_internal_error(struct vpx_internal_error_info *info, |
467 vpx_codec_err_t error, | 435 vpx_codec_err_t error, |
468 const char *fmt, | 436 const char *fmt, |
469 ...) { | 437 ...); |
470 va_list ap; | |
471 | 438 |
472 info->error_code = error; | |
473 info->has_detail = 0; | |
474 | |
475 if (fmt) { | |
476 size_t sz = sizeof(info->detail); | |
477 | |
478 info->has_detail = 1; | |
479 va_start(ap, fmt); | |
480 vsnprintf(info->detail, sz - 1, fmt, ap); | |
481 va_end(ap); | |
482 info->detail[sz - 1] = '\0'; | |
483 } | |
484 | |
485 if (info->setjmp) | |
486 longjmp(info->jmp, info->error_code); | |
487 } | |
488 | |
489 //------------------------------------------------------------------------------ | |
490 // mmap interface | |
491 | |
492 typedef struct { | |
493 unsigned int id; | |
494 unsigned long sz; | |
495 unsigned int align; | |
496 unsigned int flags; | |
497 unsigned long (*calc_sz)(const vpx_codec_dec_cfg_t *, vpx_codec_flags_t); | |
498 } mem_req_t; | |
499 | |
500 // Allocates mmap.priv and sets mmap.base based on mmap.sz/align/flags | |
501 // requirements. | |
502 // Returns #VPX_CODEC_OK on success, #VPX_CODEC_MEM_ERROR otherwise. | |
503 vpx_codec_err_t vpx_mmap_alloc(vpx_codec_mmap_t *mmap); | |
504 | |
505 // Frees mmap.base allocated by a call to vpx_mmap_alloc(). | |
506 void vpx_mmap_dtor(vpx_codec_mmap_t *mmap); | |
507 | |
508 // Checks each mmap has the size requirement specificied by mem_reqs. | |
509 // Returns #VPX_CODEC_OK on success, #VPX_CODEC_MEM_ERROR otherwise. | |
510 vpx_codec_err_t vpx_validate_mmaps(const vpx_codec_stream_info_t *si, | |
511 const vpx_codec_mmap_t *mmaps, | |
512 const mem_req_t *mem_reqs, int nreqs, | |
513 vpx_codec_flags_t init_flags); | |
514 #ifdef __cplusplus | 439 #ifdef __cplusplus |
515 } // extern "C" | 440 } // extern "C" |
516 #endif | 441 #endif |
517 | 442 |
518 #endif // VPX_INTERNAL_VPX_CODEC_INTERNAL_H_ | 443 #endif // VPX_INTERNAL_VPX_CODEC_INTERNAL_H_ |
OLD | NEW |