diff options
Diffstat (limited to 'media/libaom/src/aom/aomdx.h')
-rw-r--r-- | media/libaom/src/aom/aomdx.h | 235 |
1 files changed, 165 insertions, 70 deletions
diff --git a/media/libaom/src/aom/aomdx.h b/media/libaom/src/aom/aomdx.h index 765856a1b..8cd5de395 100644 --- a/media/libaom/src/aom/aomdx.h +++ b/media/libaom/src/aom/aomdx.h @@ -45,6 +45,7 @@ typedef struct Accounting Accounting; /** Callback that inspects decoder frame data. */ typedef void (*aom_inspect_cb)(void *decoder, void *ctx); + #endif /*!\brief Structure to hold inspection callback and context. @@ -60,6 +61,21 @@ typedef struct aom_inspect_init { void *inspect_ctx; } aom_inspect_init; +/*!\brief Structure to collect a buffer index when inspecting. + * + * Defines a structure to hold the buffer and return an index + * when calling decode from inspect. This enables us to decode + * non showable sub frames. + */ +typedef struct { + /*! Pointer for new position in compressed buffer after decoding 1 OBU. */ + const unsigned char *buf; + /*! Index into reference buffer array to see result of decoding 1 OBU. */ + int idx; + /*! Is a show existing frame. */ + int show_existing; +} Av1DecodeReturn; + /*!\brief Structure to hold a tile's start address and size in the bitstream. * * Defines a structure to hold a tile's start address and size in the bitstream. @@ -90,146 +106,195 @@ typedef struct av1_ext_ref_frame { * This set of macros define the control functions available for the AOM * decoder interface. * - * \sa #aom_codec_control + * \sa #aom_codec_control(aom_codec_ctx_t *ctx, int ctrl_id, ...) */ enum aom_dec_control_id { - /** control function to get info on which reference frames were updated - * by the last decode + /*!\brief Codec control function to get info on which reference frames were + * updated by the last decode, int* parameter */ AOMD_GET_LAST_REF_UPDATES = AOM_DECODER_CTRL_ID_START, - /** check if the indicated frame is corrupted */ + /*!\brief Codec control function to check if the indicated frame is + corrupted, int* parameter + */ AOMD_GET_FRAME_CORRUPTED, - /** control function to get info on which reference frames were used - * by the last decode + /*!\brief Codec control function to get info on which reference frames were + * used by the last decode, int* parameter */ AOMD_GET_LAST_REF_USED, - /** control function to get the dimensions that the current frame is decoded - * at. This may be different to the intended display size for the frame as - * specified in the wrapper or frame header (see AV1D_GET_DISPLAY_SIZE). */ + /*!\brief Codec control function to get the dimensions that the current + * frame is decoded at, int* parameter. This may be different to the + * intended display size for the frame as specified in the wrapper or frame + * header (see AV1D_GET_DISPLAY_SIZE). + */ AV1D_GET_FRAME_SIZE, - /** control function to get the current frame's intended display dimensions - * (as specified in the wrapper or frame header). This may be different to - * the decoded dimensions of this frame (see AV1D_GET_FRAME_SIZE). */ + /*!\brief Codec control function to get the current frame's intended display + * dimensions (as specified in the wrapper or frame header), int* parameter. + * This may be different to the decoded dimensions of this frame (see + * AV1D_GET_FRAME_SIZE). + */ AV1D_GET_DISPLAY_SIZE, - /** control function to get the bit depth of the stream. */ + /*!\brief Codec control function to get the bit depth of the stream, + * unsigned int* parameter + */ AV1D_GET_BIT_DEPTH, - /** control function to get the image format of the stream. */ + /*!\brief Codec control function to get the image format of the stream, + * aom_img_fmt_t* parameter + */ AV1D_GET_IMG_FORMAT, - /** control function to get the size of the tile. */ + /*!\brief Codec control function to get the size of the tile, unsigned int + parameter */ AV1D_GET_TILE_SIZE, - /** control function to set the byte alignment of the planes in the reference - * buffers. Valid values are power of 2, from 32 to 1024. A value of 0 sets + /*!\brief Codec control function to get the tile count in a tile list, int* + * parameter + */ + AV1D_GET_TILE_COUNT, + + /*!\brief Codec control function to set the byte alignment of the planes in + * the reference buffers, int parameter + * + * Valid values are power of 2, from 32 to 1024. A value of 0 sets * legacy alignment. I.e. Y plane is aligned to 32 bytes, U plane directly * follows Y plane, and V plane directly follows U plane. Default value is 0. */ AV1_SET_BYTE_ALIGNMENT, - /** control function to invert the decoding order to from right to left. The - * function is used in a test to confirm the decoding independence of tile + /*!\brief Codec control function to invert the decoding order to from right to + * left, int parameter + * + * The function is used in a test to confirm the decoding independence of tile * columns. The function may be used in application where this order - * of decoding is desired. + * of decoding is desired. int parameter * * TODO(yaowu): Rework the unit test that uses this control, and in a future * release, this test-only control shall be removed. */ AV1_INVERT_TILE_DECODE_ORDER, - /** control function to set the skip loop filter flag. Valid values are - * integers. The decoder will skip the loop filter when its value is set to - * nonzero. If the loop filter is skipped the decoder may accumulate decode - * artifacts. The default value is 0. + /*!\brief Codec control function to set the skip loop filter flag, int + * parameter + * + * Valid values are integers. The decoder will skip the loop filter + * when its value is set to nonzero. If the loop filter is skipped the + * decoder may accumulate decode artifacts. The default value is 0. */ AV1_SET_SKIP_LOOP_FILTER, - /** control function to retrieve a pointer to the Accounting struct. When - * compiled without --enable-accounting, this returns AOM_CODEC_INCAPABLE. + /*!\brief Codec control function to retrieve a pointer to the Accounting + * struct, takes Accounting** as parameter + * * If called before a frame has been decoded, this returns AOM_CODEC_ERROR. * The caller should ensure that AOM_CODEC_OK is returned before attempting * to dereference the Accounting pointer. + * + * \attention When compiled without --enable-accounting, this returns + * AOM_CODEC_INCAPABLE. */ AV1_GET_ACCOUNTING, - /** control function to get last decoded frame quantizer. Returned value uses - * internal quantizer scale defined by the codec. + /*!\brief Codec control function to get last decoded frame quantizer, + * int* parameter + * + * Returned value uses internal quantizer scale defined by the codec. */ AOMD_GET_LAST_QUANTIZER, - /** control function to set the range of tile decoding. A value that is - * greater and equal to zero indicates only the specific row/column is - * decoded. A value that is -1 indicates the whole row/column is decoded. - * A special case is both values are -1 that means the whole frame is - * decoded. + /*!\brief Codec control function to set the range of tile decoding, int + * parameter + * + * A value that is greater and equal to zero indicates only the specific + * row/column is decoded. A value that is -1 indicates the whole row/column + * is decoded. A special case is both values are -1 that means the whole + * frame is decoded. */ AV1_SET_DECODE_TILE_ROW, AV1_SET_DECODE_TILE_COL, - /** control function to set the tile coding mode. A value that is equal to - * zero indicates the tiles are coded in normal tile mode. A value that is - * 1 indicates the tiles are coded in large-scale tile mode. + + /*!\brief Codec control function to set the tile coding mode, int parameter + * + * - 0 = tiles are coded in normal tile mode + * - 1 = tiles are coded in large-scale tile mode */ AV1_SET_TILE_MODE, - /** control function to get the frame header information of an encoded frame - * in the bitstream. This provides a way to access a frame's header data. + + /*!\brief Codec control function to get the frame header information of an + * encoded frame, unsigned int* parameter */ AV1D_GET_FRAME_HEADER_INFO, - /** control function to get the start address and size of a tile in the coded - * bitstream. This provides a way to access a specific tile's bitstream data. + + /*!\brief Codec control function to get the start address and size of a + * tile in the coded bitstream, aom_tile_data* parameter. */ AV1D_GET_TILE_DATA, - /** control function to set the external references' pointers in the decoder. - * This is used while decoding the tile list OBU in large-scale tile coding - * mode. + + /*!\brief Codec control function to set the external references' pointers in + * the decoder, av1_ext_ref_frame_t* parameter. + * + * This is used while decoding the tile list OBU in large-scale tile coding + * mode. */ AV1D_SET_EXT_REF_PTR, - /** control function to enable the ext-tile software debug and testing code in - * the decoder. + + /*!\brief Codec control function to enable the ext-tile software debug and + * testing code in the decoder, unsigned int parameter */ AV1D_EXT_TILE_DEBUG, - /** control function to enable the row based multi-threading of decoding. A - * value that is equal to 1 indicates that row based multi-threading is - * enabled. + /*!\brief Codec control function to enable the row based multi-threading of + * decoding, unsigned int parameter + * + * - 0 = disabled + * - 1 = enabled (default) */ AV1D_SET_ROW_MT, - /** control function to indicate whether bitstream is in Annex-B format. */ + /*!\brief Codec control function to indicate whether bitstream is in + * Annex-B format, unsigned int parameter + */ AV1D_SET_IS_ANNEXB, - /** control function to indicate which operating point to use. A scalable - * stream may define multiple operating points, each of which defines a - * set of temporal and spatial layers to be processed. The operating point - * index may take a value between 0 and operating_points_cnt_minus_1 (which - * is at most 31). + /*!\brief Codec control function to indicate which operating point to use, + * int parameter + * + * A scalable stream may define multiple operating points, each of which + * defines a set of temporal and spatial layers to be processed. The + * operating point index may take a value between 0 and + * operating_points_cnt_minus_1 (which is at most 31). */ AV1D_SET_OPERATING_POINT, - /** control function to indicate whether to output one frame per temporal - * unit (the default), or one frame per spatial layer. - * In a scalable stream, each temporal unit corresponds to a single "frame" - * of video, and within a temporal unit there may be multiple spatial layers - * with different versions of that frame. - * For video playback, only the highest-quality version (within the - * selected operating point) is needed, but for some use cases it is useful - * to have access to multiple versions of a frame when they are available. + /*!\brief Codec control function to indicate whether to output one frame per + * temporal unit (the default), or one frame per spatial layer. int parameter + * + * In a scalable stream, each temporal unit corresponds to a single "frame" + * of video, and within a temporal unit there may be multiple spatial layers + * with different versions of that frame. + * For video playback, only the highest-quality version (within the + * selected operating point) is needed, but for some use cases it is useful + * to have access to multiple versions of a frame when they are available. */ AV1D_SET_OUTPUT_ALL_LAYERS, - /** control function to set an aom_inspect_cb callback that is invoked each - * time a frame is decoded. When compiled without --enable-inspection, this + /*!\brief Codec control function to set an aom_inspect_cb callback that is + * invoked each time a frame is decoded, aom_inspect_init* parameter + * + * \attention When compiled without --enable-inspection, this * returns AOM_CODEC_INCAPABLE. */ AV1_SET_INSPECTION_CALLBACK, - /** control function to set the skip film grain flag. Valid values are - * integers. The decoder will skip the film grain when its value is set to - * nonzero. The default value is 0. + /*!\brief Codec control function to set the skip film grain flag, int + * parameter + * + * Valid values are integers. The decoder will skip the film grain when its + * value is set to nonzero. The default value is 0. */ AV1D_SET_SKIP_FILM_GRAIN, @@ -239,57 +304,87 @@ enum aom_dec_control_id { /*!\cond */ /*!\brief AOM decoder control function parameter type * - * Defines the data types that AOMD control functions take. Note that - * additional common controls are defined in aom.h + * Defines the data types that AOMD control functions take. * + * \note Additional common controls are defined in aom.h. + * + * \note For each control ID "X", a macro-define of + * AOM_CTRL_X is provided. It is used at compile time to determine + * if the control ID is supported by the libaom library available, + * when the libaom version cannot be controlled. */ - AOM_CTRL_USE_TYPE(AOMD_GET_LAST_REF_UPDATES, int *) #define AOM_CTRL_AOMD_GET_LAST_REF_UPDATES + AOM_CTRL_USE_TYPE(AOMD_GET_FRAME_CORRUPTED, int *) #define AOM_CTRL_AOMD_GET_FRAME_CORRUPTED + AOM_CTRL_USE_TYPE(AOMD_GET_LAST_REF_USED, int *) #define AOM_CTRL_AOMD_GET_LAST_REF_USED + AOM_CTRL_USE_TYPE(AOMD_GET_LAST_QUANTIZER, int *) #define AOM_CTRL_AOMD_GET_LAST_QUANTIZER + AOM_CTRL_USE_TYPE(AV1D_GET_DISPLAY_SIZE, int *) #define AOM_CTRL_AV1D_GET_DISPLAY_SIZE + AOM_CTRL_USE_TYPE(AV1D_GET_BIT_DEPTH, unsigned int *) #define AOM_CTRL_AV1D_GET_BIT_DEPTH + AOM_CTRL_USE_TYPE(AV1D_GET_IMG_FORMAT, aom_img_fmt_t *) #define AOM_CTRL_AV1D_GET_IMG_FORMAT + AOM_CTRL_USE_TYPE(AV1D_GET_TILE_SIZE, unsigned int *) #define AOM_CTRL_AV1D_GET_TILE_SIZE + +AOM_CTRL_USE_TYPE(AV1D_GET_TILE_COUNT, unsigned int *) +#define AOM_CTRL_AV1D_GET_TILE_COUNT + AOM_CTRL_USE_TYPE(AV1D_GET_FRAME_SIZE, int *) #define AOM_CTRL_AV1D_GET_FRAME_SIZE + AOM_CTRL_USE_TYPE(AV1_INVERT_TILE_DECODE_ORDER, int) #define AOM_CTRL_AV1_INVERT_TILE_DECODE_ORDER + AOM_CTRL_USE_TYPE(AV1_GET_ACCOUNTING, Accounting **) #define AOM_CTRL_AV1_GET_ACCOUNTING + AOM_CTRL_USE_TYPE(AV1_SET_DECODE_TILE_ROW, int) #define AOM_CTRL_AV1_SET_DECODE_TILE_ROW + AOM_CTRL_USE_TYPE(AV1_SET_DECODE_TILE_COL, int) #define AOM_CTRL_AV1_SET_DECODE_TILE_COL + AOM_CTRL_USE_TYPE(AV1_SET_TILE_MODE, unsigned int) #define AOM_CTRL_AV1_SET_TILE_MODE + AOM_CTRL_USE_TYPE(AV1D_GET_FRAME_HEADER_INFO, aom_tile_data *) #define AOM_CTRL_AV1D_GET_FRAME_HEADER_INFO + AOM_CTRL_USE_TYPE(AV1D_GET_TILE_DATA, aom_tile_data *) #define AOM_CTRL_AV1D_GET_TILE_DATA + AOM_CTRL_USE_TYPE(AV1D_SET_EXT_REF_PTR, av1_ext_ref_frame_t *) #define AOM_CTRL_AV1D_SET_EXT_REF_PTR + AOM_CTRL_USE_TYPE(AV1D_EXT_TILE_DEBUG, unsigned int) #define AOM_CTRL_AV1D_EXT_TILE_DEBUG + AOM_CTRL_USE_TYPE(AV1D_SET_ROW_MT, unsigned int) #define AOM_CTRL_AV1D_SET_ROW_MT + AOM_CTRL_USE_TYPE(AV1D_SET_SKIP_FILM_GRAIN, int) #define AOM_CTRL_AV1D_SET_SKIP_FILM_GRAIN + AOM_CTRL_USE_TYPE(AV1D_SET_IS_ANNEXB, unsigned int) #define AOM_CTRL_AV1D_SET_IS_ANNEXB + AOM_CTRL_USE_TYPE(AV1D_SET_OPERATING_POINT, int) #define AOM_CTRL_AV1D_SET_OPERATING_POINT + AOM_CTRL_USE_TYPE(AV1D_SET_OUTPUT_ALL_LAYERS, int) #define AOM_CTRL_AV1D_SET_OUTPUT_ALL_LAYERS + AOM_CTRL_USE_TYPE(AV1_SET_INSPECTION_CALLBACK, aom_inspect_init *) #define AOM_CTRL_AV1_SET_INSPECTION_CALLBACK /*!\endcond */ |