ext_tile: add AV1D_EXT_TILE_DEBUG API
Added AV1D_EXT_TILE_DEBUG API in the decoder. With ext_tile_debug = 1,
it enables the ext-tile software debug and testing code in the decoder,
which provides reference results for ext-tile hardware decoder.
Change-Id: Id7a41266d3161f53773ba4db09a269965629f487
diff --git a/aom/aomdx.h b/aom/aomdx.h
index bada98d..8e0284b 100644
--- a/aom/aomdx.h
+++ b/aom/aomdx.h
@@ -160,6 +160,10 @@
* bitstream. This provides a way to access a specific tile's bitstream data.
*/
AV1D_GET_TILE_DATA,
+ /** control function to enable the ext-tile software debug and testing code in
+ * the decoder.
+ */
+ AV1D_EXT_TILE_DEBUG,
/** control function to indicate whether bitstream is in Annex-B format. */
AV1D_SET_IS_ANNEXB,
@@ -215,6 +219,8 @@
#define AOM_CTRL_AV1_SET_TILE_MODE
AOM_CTRL_USE_TYPE(AV1D_GET_TILE_DATA, aom_tile_data *)
#define AOM_CTRL_AV1D_GET_TILE_DATA
+AOM_CTRL_USE_TYPE(AV1D_EXT_TILE_DEBUG, unsigned int)
+#define AOM_CTRL_AV1D_EXT_TILE_DEBUG
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)
diff --git a/av1/av1_dx_iface.c b/av1/av1_dx_iface.c
index e52da46..5cbc60b 100644
--- a/av1/av1_dx_iface.c
+++ b/av1/av1_dx_iface.c
@@ -61,6 +61,7 @@
unsigned int tile_mode;
unsigned int is_annexb;
int operating_point;
+ unsigned int ext_tile_debug;
AVxWorker *frame_workers;
int num_frame_workers;
@@ -418,6 +419,8 @@
frame_worker_data->pbi->dec_tile_row = ctx->decode_tile_row;
frame_worker_data->pbi->dec_tile_col = ctx->decode_tile_col;
frame_worker_data->pbi->operating_point = ctx->operating_point;
+ frame_worker_data->pbi->ext_tile_debug = ctx->ext_tile_debug;
+
worker->hook = (AVxWorkerHook)frame_worker_hook;
if (!winterface->reset(worker)) {
set_error_detail(ctx, "Frame Worker thread creation failed");
@@ -476,7 +479,7 @@
frame_worker_data->pbi->common.large_scale_tile = ctx->tile_mode;
frame_worker_data->pbi->dec_tile_row = ctx->decode_tile_row;
frame_worker_data->pbi->dec_tile_col = ctx->decode_tile_col;
-
+ frame_worker_data->pbi->ext_tile_debug = ctx->ext_tile_debug;
frame_worker_data->pbi->common.is_annexb = ctx->is_annexb;
worker->had_error = 0;
@@ -1037,6 +1040,12 @@
#endif
}
+static aom_codec_err_t ctrl_ext_tile_debug(aom_codec_alg_priv_t *ctx,
+ va_list args) {
+ ctx->ext_tile_debug = va_arg(args, int);
+ return AOM_CODEC_OK;
+}
+
static aom_codec_ctrl_fn_map_t decoder_ctrl_maps[] = {
{ AV1_COPY_REFERENCE, ctrl_copy_reference },
@@ -1056,6 +1065,7 @@
{ AV1D_SET_IS_ANNEXB, ctrl_set_is_annexb },
{ AV1D_SET_OPERATING_POINT, ctrl_set_operating_point },
{ AV1_SET_INSPECTION_CALLBACK, ctrl_set_inspection_callback },
+ { AV1D_EXT_TILE_DEBUG, ctrl_ext_tile_debug },
// Getters
{ AOMD_GET_FRAME_CORRUPTED, ctrl_get_frame_corrupted },
diff --git a/av1/decoder/decoder.h b/av1/decoder/decoder.h
index e6e61f7..4bd200c 100644
--- a/av1/decoder/decoder.h
+++ b/av1/decoder/decoder.h
@@ -108,6 +108,7 @@
// State if the camera frame header is already decoded while
// large_scale_tile = 1.
int camera_frame_header_ready;
+ int ext_tile_debug; // for ext-tile software debug & testing
} AV1Decoder;
int av1_receive_compressed_data(struct AV1Decoder *pbi, size_t size,