mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
5.2 KiB
111 lines
5.2 KiB
/*!\page usage Usage |
|
|
|
The aom multi-format codec SDK provides a unified interface amongst its |
|
supported codecs. This abstraction allows applications using this SDK to |
|
easily support multiple video formats with minimal code duplication or |
|
"special casing." This section describes the interface common to all codecs. |
|
For codec-specific details, see the \ref codecs page. |
|
|
|
The following sections are common to all codecs: |
|
- \ref usage_types |
|
- \ref usage_features |
|
- \ref usage_init |
|
- \ref usage_errors |
|
|
|
For more information on decoder and encoder specific usage, see the |
|
following pages: |
|
\if decoder |
|
\li \subpage usage_decode |
|
\endif |
|
\if encoder |
|
\li \subpage usage_encode |
|
\endif |
|
|
|
\section usage_types Important Data Types |
|
There are two important data structures to consider in this interface. |
|
|
|
\subsection usage_ctxs Contexts |
|
A context is a storage area allocated by the calling application that the |
|
codec may write into to store details about a single instance of that codec. |
|
Most of the context is implementation specific, and thus opaque to the |
|
application. The context structure as seen by the application is of fixed |
|
size, and thus can be allocated with automatic storage or dynamically |
|
on the heap. |
|
|
|
Most operations require an initialized codec context. Codec context |
|
instances are codec specific. That is, the codec to be used for the encoded |
|
video must be known at initialization time. See #aom_codec_ctx_t for further |
|
information. |
|
|
|
\subsection usage_ifaces Interfaces |
|
A codec interface is an opaque structure that controls how function calls |
|
into the generic interface are dispatched to their codec-specific |
|
implementations. Applications \ref MUSTNOT attempt to examine or override |
|
this storage, as it contains internal implementation details likely to |
|
change from release to release. |
|
|
|
Each supported codec will expose an interface structure to the application |
|
as an <code>extern</code> reference to a structure of the incomplete type |
|
#aom_codec_iface_t. |
|
|
|
\section usage_features Features |
|
Several "features" are defined that are optionally implemented by codec |
|
algorithms. Indeed, the same algorithm may support different features on |
|
different platforms. The purpose of defining these features is that when |
|
they are implemented, they conform to a common interface. The features, or |
|
capabilities, of an algorithm can be queried from it's interface by using |
|
the aom_codec_get_caps() method. Attempts to invoke features not supported |
|
by an algorithm will generally result in #AOM_CODEC_INCAPABLE. |
|
|
|
\if decoder |
|
Currently defined decoder features include: |
|
- \ref usage_cb |
|
\endif |
|
|
|
\section usage_init Initialization |
|
To initialize a codec instance, the address of the codec context |
|
and interface structures are passed to an initialization function. Depending |
|
on the \ref usage_features that the codec supports, the codec could be |
|
initialized in different modes. |
|
|
|
To prevent cases of confusion where the ABI of the library changes, |
|
the ABI is versioned. The ABI version number must be passed at |
|
initialization time to ensure the application is using a header file that |
|
matches the library. The current ABI version number is stored in the |
|
preprocessor macros #AOM_CODEC_ABI_VERSION, #AOM_ENCODER_ABI_VERSION, and |
|
#AOM_DECODER_ABI_VERSION. For convenience, each initialization function has |
|
a wrapper macro that inserts the correct version number. These macros are |
|
named like the initialization methods, but without the _ver suffix. |
|
|
|
|
|
The available initialization methods are: |
|
\if encoder |
|
\li #aom_codec_enc_init (calls aom_codec_enc_init_ver()) |
|
\li #aom_codec_enc_init_multi (calls aom_codec_enc_init_multi_ver()) |
|
\endif |
|
\if decoder |
|
\li #aom_codec_dec_init (calls aom_codec_dec_init_ver()) |
|
\endif |
|
|
|
|
|
\section usage_errors Error Handling |
|
Almost all codec functions return an error status of type #aom_codec_err_t. |
|
The semantics of how each error condition should be processed is clearly |
|
defined in the definitions of each enumerated value. Error values can be |
|
converted into ASCII strings with the aom_codec_error() and |
|
aom_codec_err_to_string() methods. The difference between these two methods is |
|
that aom_codec_error() returns the error state from an initialized context, |
|
whereas aom_codec_err_to_string() can be used in cases where an error occurs |
|
outside any context. The enumerated value returned from the last call can be |
|
retrieved from the <code>err</code> member of the decoder context as well. |
|
Finally, more detailed error information may be able to be obtained by using |
|
the aom_codec_error_detail() method. Not all errors produce detailed error |
|
information. |
|
|
|
In addition to error information, the codec library's build configuration |
|
is available at runtime on some platforms. This information can be returned |
|
by calling aom_codec_build_config(), and is formatted as a base64 coded string |
|
(comprised of characters in the set [a-z_a-Z0-9+/]). This information is not |
|
useful to an application at runtime, but may be of use to aom for support. |
|
|
|
*/
|
|
|