lavu/opt: factor out printing option default from opt_list()

release/7.0
Anton Khirnov 1 year ago
parent 8904f35133
commit 333cc9bff8
  1. 144
      libavutil/opt.c

@ -1276,81 +1276,19 @@ static void log_type(void *av_log_obj, const AVOption *o,
av_log(av_log_obj, AV_LOG_INFO, "%-12s ", "");
}
static void opt_list(void *obj, void *av_log_obj, const char *unit,
int req_flags, int rej_flags, enum AVOptionType parent_type)
static void log_default(void *obj, void *av_log_obj, const AVOption *opt)
{
const AVOption *opt = NULL;
AVOptionRanges *r;
int i;
while ((opt = av_opt_next(obj, opt))) {
if (!(opt->flags & req_flags) || (opt->flags & rej_flags))
continue;
/* Don't print CONST's on level one.
* Don't print anything but CONST's on level two.
* Only print items from the requested unit.
*/
if (!unit && opt->type == AV_OPT_TYPE_CONST)
continue;
else if (unit && opt->type != AV_OPT_TYPE_CONST)
continue;
else if (unit && opt->type == AV_OPT_TYPE_CONST && strcmp(unit, opt->unit))
continue;
else if (unit && opt->type == AV_OPT_TYPE_CONST)
av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name);
else
av_log(av_log_obj, AV_LOG_INFO, " %s%-17s ",
(opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? " " : "-",
opt->name);
log_type(av_log_obj, opt, parent_type);
av_log(av_log_obj, AV_LOG_INFO, "%c%c%c%c%c%c%c%c%c%c%c",
(opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.',
(opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.',
(opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? 'F' : '.',
(opt->flags & AV_OPT_FLAG_VIDEO_PARAM) ? 'V' : '.',
(opt->flags & AV_OPT_FLAG_AUDIO_PARAM) ? 'A' : '.',
(opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.',
(opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.',
(opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.',
(opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.',
(opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.',
(opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.');
if (opt->help)
av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
if (av_opt_query_ranges(&r, obj, opt->name, AV_OPT_SEARCH_FAKE_OBJ) >= 0) {
switch (opt->type) {
case AV_OPT_TYPE_INT:
case AV_OPT_TYPE_INT64:
case AV_OPT_TYPE_UINT64:
case AV_OPT_TYPE_DOUBLE:
case AV_OPT_TYPE_FLOAT:
case AV_OPT_TYPE_RATIONAL:
for (i = 0; i < r->nb_ranges; i++) {
av_log(av_log_obj, AV_LOG_INFO, " (from ");
log_value(av_log_obj, AV_LOG_INFO, r->range[i]->value_min);
av_log(av_log_obj, AV_LOG_INFO, " to ");
log_value(av_log_obj, AV_LOG_INFO, r->range[i]->value_max);
av_log(av_log_obj, AV_LOG_INFO, ")");
}
break;
}
av_opt_freep_ranges(&r);
}
if (opt->type != AV_OPT_TYPE_CONST &&
opt->type != AV_OPT_TYPE_BINARY &&
!((opt->type == AV_OPT_TYPE_COLOR ||
if (opt->type == AV_OPT_TYPE_CONST || opt->type == AV_OPT_TYPE_BINARY)
return;
if ((opt->type == AV_OPT_TYPE_COLOR ||
opt->type == AV_OPT_TYPE_IMAGE_SIZE ||
opt->type == AV_OPT_TYPE_STRING ||
opt->type == AV_OPT_TYPE_DICT ||
opt->type == AV_OPT_TYPE_CHLAYOUT ||
opt->type == AV_OPT_TYPE_VIDEO_RATE) &&
!opt->default_val.str)) {
!opt->default_val.str)
return;
av_log(av_log_obj, AV_LOG_INFO, " (default ");
switch (opt->type) {
case AV_OPT_TYPE_BOOL:
@ -1413,8 +1351,76 @@ FF_ENABLE_DEPRECATION_WARNINGS
#endif
}
av_log(av_log_obj, AV_LOG_INFO, ")");
}
static void opt_list(void *obj, void *av_log_obj, const char *unit,
int req_flags, int rej_flags, enum AVOptionType parent_type)
{
const AVOption *opt = NULL;
AVOptionRanges *r;
int i;
while ((opt = av_opt_next(obj, opt))) {
if (!(opt->flags & req_flags) || (opt->flags & rej_flags))
continue;
/* Don't print CONST's on level one.
* Don't print anything but CONST's on level two.
* Only print items from the requested unit.
*/
if (!unit && opt->type == AV_OPT_TYPE_CONST)
continue;
else if (unit && opt->type != AV_OPT_TYPE_CONST)
continue;
else if (unit && opt->type == AV_OPT_TYPE_CONST && strcmp(unit, opt->unit))
continue;
else if (unit && opt->type == AV_OPT_TYPE_CONST)
av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name);
else
av_log(av_log_obj, AV_LOG_INFO, " %s%-17s ",
(opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? " " : "-",
opt->name);
log_type(av_log_obj, opt, parent_type);
av_log(av_log_obj, AV_LOG_INFO, "%c%c%c%c%c%c%c%c%c%c%c",
(opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.',
(opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.',
(opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? 'F' : '.',
(opt->flags & AV_OPT_FLAG_VIDEO_PARAM) ? 'V' : '.',
(opt->flags & AV_OPT_FLAG_AUDIO_PARAM) ? 'A' : '.',
(opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.',
(opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.',
(opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.',
(opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.',
(opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.',
(opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.');
if (opt->help)
av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);
if (av_opt_query_ranges(&r, obj, opt->name, AV_OPT_SEARCH_FAKE_OBJ) >= 0) {
switch (opt->type) {
case AV_OPT_TYPE_INT:
case AV_OPT_TYPE_INT64:
case AV_OPT_TYPE_UINT64:
case AV_OPT_TYPE_DOUBLE:
case AV_OPT_TYPE_FLOAT:
case AV_OPT_TYPE_RATIONAL:
for (i = 0; i < r->nb_ranges; i++) {
av_log(av_log_obj, AV_LOG_INFO, " (from ");
log_value(av_log_obj, AV_LOG_INFO, r->range[i]->value_min);
av_log(av_log_obj, AV_LOG_INFO, " to ");
log_value(av_log_obj, AV_LOG_INFO, r->range[i]->value_max);
av_log(av_log_obj, AV_LOG_INFO, ")");
}
break;
}
av_opt_freep_ranges(&r);
}
log_default(obj, av_log_obj, opt);
av_log(av_log_obj, AV_LOG_INFO, "\n");
if (opt->unit && opt->type != AV_OPT_TYPE_CONST)
opt_list(obj, av_log_obj, opt->unit, req_flags, rej_flags, opt->type);

Loading…
Cancel
Save