|
|
|
@ -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); |
|
|
|
|