diff --git a/cmdutils.c b/cmdutils.c index ee42fea37159ec1482524ef81da88271cd52845d..4634ae20ff2696b1b58c7d4121adf63945dce773 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -56,6 +56,10 @@ #include <sys/time.h> #include <sys/resource.h> #endif +#if CONFIG_OPENCL +#include "libavutil/opencl.h" +#endif + static int init_report(const char *env); @@ -955,6 +959,26 @@ int opt_timelimit(void *optctx, const char *opt, const char *arg) return 0; } +#if CONFIG_OPENCL +int opt_opencl(void *optctx, const char *opt, const char *arg) +{ + char *key, *value; + const char *opts = arg; + int ret = 0; + while (*opts) { + ret = av_opt_get_key_value(&opts, "=", ":", 0, &key, &value); + if (ret < 0) + return ret; + ret = av_opencl_set_option(key, value); + if (ret < 0) + return ret; + if (*opts) + opts++; + } + return ret; +} +#endif + void print_error(const char *filename, int err) { char errbuf[128]; diff --git a/cmdutils.h b/cmdutils.h index 63e10f30380b25c4e1aba7b652a4da8a5b8dcafb..bcb43bfc13e66cf725b12237f12771c55f055eff 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -90,6 +90,10 @@ int opt_cpuflags(void *optctx, const char *opt, const char *arg); int opt_codec_debug(void *optctx, const char *opt, const char *arg); +#if CONFIG_OPENCL +int opt_opencl(void *optctx, const char *opt, const char *arg); +#endif + /** * Limit the execution time. */ diff --git a/cmdutils_common_opts.h b/cmdutils_common_opts.h index ccef21ca30dbab047807b83676f58ae39dbf4a92..878c7488b60d02355c9c3aa8df225e895587fffe 100644 --- a/cmdutils_common_opts.h +++ b/cmdutils_common_opts.h @@ -19,3 +19,6 @@ { "report" , 0, {(void*)opt_report}, "generate a report" }, { "max_alloc" , HAS_ARG, {.func_arg = opt_max_alloc}, "set maximum size of a single allocated block", "bytes" }, { "cpuflags" , HAS_ARG | OPT_EXPERT, {.func_arg = opt_cpuflags}, "force specific cpu flags", "flags" }, + #if CONFIG_OPENCL + { "opencl_options", HAS_ARG, {.func_arg = opt_opencl}, "set OpenCL environment options" }, + #endif