aomdec: add --row-mt option
allows AV1D_SET_ROW_MT to be set
Change-Id: I5a8b420d547c73c3592a2341524c7a9ab1390fb2
diff --git a/apps/aomdec.c b/apps/aomdec.c
index c681633..60805aa 100644
--- a/apps/aomdec.c
+++ b/apps/aomdec.c
@@ -82,6 +82,8 @@
ARG_DEF("o", "output", 1, "Output file name pattern (see below)");
static const arg_def_t threadsarg =
ARG_DEF("t", "threads", 1, "Max threads to use");
+static const arg_def_t rowmtarg =
+ ARG_DEF(NULL, "row-mt", 1, "Enable row based multi-threading, default: 0");
static const arg_def_t verbosearg =
ARG_DEF("v", "verbose", 0, "Show version string");
static const arg_def_t scalearg =
@@ -106,11 +108,13 @@
ARG_DEF(NULL, "skip-film-grain", 0, "Skip film grain application");
static const arg_def_t *all_args[] = {
- &help, &codecarg, &use_yv12, &use_i420, &flipuvarg,
- &rawvideo, &noblitarg, &progressarg, &limitarg, &skiparg,
- &summaryarg, &outputfile, &threadsarg, &verbosearg, &scalearg,
- &fb_arg, &md5arg, &framestatsarg, &continuearg, &outbitdeptharg,
- &isannexb, &oppointarg, &outallarg, &skipfilmgrain, NULL
+ &help, &codecarg, &use_yv12, &use_i420,
+ &flipuvarg, &rawvideo, &noblitarg, &progressarg,
+ &limitarg, &skiparg, &summaryarg, &outputfile,
+ &threadsarg, &rowmtarg, &verbosearg, &scalearg,
+ &fb_arg, &md5arg, &framestatsarg, &continuearg,
+ &outbitdeptharg, &isannexb, &oppointarg, &outallarg,
+ &skipfilmgrain, NULL
};
#if CONFIG_LIBYUV
@@ -453,6 +457,7 @@
int operating_point = 0;
int output_all_layers = 0;
int skip_film_grain = 0;
+ int enable_row_mt = 0;
aom_image_t *scaled_img = NULL;
aom_image_t *img_shifted = NULL;
int frame_avail, got_data, flush_decoder = 0;
@@ -549,6 +554,8 @@
cfg.threads);
}
#endif
+ } else if (arg_match(&arg, &rowmtarg, argi)) {
+ enable_row_mt = arg_parse_uint(&arg);
} else if (arg_match(&arg, &verbosearg, argi)) {
quiet = 0;
} else if (arg_match(&arg, &scalearg, argi)) {
@@ -706,6 +713,12 @@
goto fail;
}
+ if (AOM_CODEC_CONTROL_TYPECHECKED(&decoder, AV1D_SET_ROW_MT, enable_row_mt)) {
+ fprintf(stderr, "Failed to set row multithreading mode: %s\n",
+ aom_codec_error(&decoder));
+ goto fail;
+ }
+
if (arg_skip) fprintf(stderr, "Skipping first %d frames.\n", arg_skip);
while (arg_skip) {
if (read_frame(&input, &buf, &bytes_in_buffer, &buffer_size)) break;
diff --git a/test/aomdec.sh b/test/aomdec.sh
index d94b673..eda18bb 100755
--- a/test/aomdec.sh
+++ b/test/aomdec.sh
@@ -83,18 +83,28 @@
fi
}
-aomdec_av1_ivf_multithread() {
+ivf_multithread() {
+ local row_mt="$1"
if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
local file="${AV1_IVF_FILE}"
if [ ! -e "${file}" ]; then
encode_yuv_raw_input_av1 "${file}" --ivf || return 1
fi
for threads in 2 3 4 5 6 7 8; do
- aomdec "${file}" --summary --noblit --threads=$threads || return 1
+ aomdec "${file}" --summary --noblit --threads=$threads --row-mt=$row_mt \
+ || return 1
done
fi
}
+aomdec_av1_ivf_multithread() {
+ ivf_multithread 0 # --row-mt=0
+}
+
+aomdec_av1_ivf_multithread_row_mt() {
+ ivf_multithread 1 # --row-mt=1
+}
+
aomdec_aom_ivf_pipe_input() {
if [ "$(aomdec_can_decode_av1)" = "yes" ]; then
local file="${AV1_IVF_FILE}"
@@ -139,6 +149,7 @@
aomdec_tests="aomdec_av1_ivf
aomdec_av1_ivf_error_resilient
aomdec_av1_ivf_multithread
+ aomdec_av1_ivf_multithread_row_mt
aomdec_aom_ivf_pipe_input
aomdec_av1_obu_annexb
aomdec_av1_obu_section5