It differs from query_func() in accepting arrays of input/output format configurations to be filled as callback parameters. This allows to mark the filter context as const, ensuring it is not modified by this function, as it is not supposed to have any side effects beyond returning the supported formats.
Showing the changes to libavfilter/tests (1 of 6 files). Show all
Unified · Split
| @@ -143,7 +143,24 @@ int main(int argc, char **argv) · 142 unmodified lines | |||
| 143 | 143 | ||
| 144 | if (filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC) | 144 | if (filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC) |
| 145 | ret = filter->formats.query_func(filter_ctx); | 145 | ret = filter->formats.query_func(filter_ctx); |
| 146 | else | 146 | else if (filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC2) { |
| 147 | AVFilterFormatsConfig **cfg_in = NULL, **cfg_out = NULL; | ||
| 148 | |||
| 149 | if (filter_ctx->nb_inputs) { | ||
| 150 | cfg_in = av_malloc_array(filter_ctx->nb_inputs, sizeof(*cfg_in)); | ||
| 151 | for (unsigned i = 0; i < filter_ctx->nb_inputs; i++) | ||
| 152 | cfg_in[i] = &filter_ctx->inputs[i]->outcfg; | ||
| 153 | } | ||
| 154 | if (filter_ctx->nb_outputs) { | ||
| 155 | cfg_out = av_malloc_array(filter_ctx->nb_outputs, sizeof(*cfg_out)); | ||
| 156 | for (unsigned i = 0; i < filter_ctx->nb_outputs; i++) | ||
| 157 | cfg_out[i] = &filter_ctx->outputs[i]->incfg; | ||
| 158 | } | ||
| 159 | |||
| 160 | ret = filter->formats.query_func2(filter_ctx, cfg_in, cfg_out); | ||
| 161 | av_freep(&cfg_in); | ||
| 162 | av_freep(&cfg_out); | ||
| 163 | } else | ||
| 147 | ret = ff_default_query_formats(filter_ctx); | 164 | ret = ff_default_query_formats(filter_ctx); |
| 148 | 165 | ||
| 149 | print_formats(filter_ctx); | 166 | print_formats(filter_ctx); |