Commit f026ab42b9 for ffmpeg
commit f026ab42b9f58c505af3ac5e65d667e4250e2ea6
Author: Niklas Haas <git@haasn.dev>
Date: Mon Oct 19 15:12:54 2026 +0200
swscale/ops: bikeshed ops list print layout
This bundles all of the following changes to the op list print format into one
up-front commit, to prove that the remaining refactors don't affect the
output themselves.
The general goal of the new print format is to print all metadata for a single
output pad as a single line, describing just that output pad's metadata,
while skipping over any invalid/unused pads.
Signed-off-by: Niklas Haas <git@haasn.dev>
diff --git a/libswscale/ops.c b/libswscale/ops.c
index 59e874bec8..800a41befa 100644
--- a/libswscale/ops.c
+++ b/libswscale/ops.c
@@ -806,33 +806,31 @@ uint32_t ff_sws_linear_mask(const SwsLinearOp *c)
return mask;
}
-static char describe_comp_flags(SwsCompFlags flags)
+static const char *describe_comp_flags(SwsCompFlags flags)
{
if (flags & SWS_COMP_GARBAGE)
- return 'X';
+ return "garbage";
else if (flags & SWS_COMP_ZERO)
- return '0';
+ return "zero";
else if (flags & SWS_COMP_SWAPPED)
- return 'z';
+ return "swapped";
else if (flags & SWS_COMP_CONST)
- return '$';
+ return "const";
else if (flags & SWS_COMP_COPY)
- return '=';
+ return "copy";
else if (flags & SWS_COMP_EXACT)
- return '+';
+ return "exact";
else
- return '.';
+ return "normal";
}
-static void print_deps(AVBPrint *bp, const SwsCompMask *deps)
+static void print_deps(AVBPrint *bp, SwsCompMask dep)
{
- av_bprintf(bp, "{");
- for (int i = 0; i < 4; i++) {
- if (i)
- av_bprintf(bp, " ");
- av_bprintf(bp, "%s", deps[i] ? ff_sws_comp_mask_str(deps[i]) : "_");
- }
- av_bprintf(bp, "}");
+ av_bprintf(bp, " {%c%c%c%c}",
+ SWS_COMP_TEST(dep, 0) ? 'x' : ' ',
+ SWS_COMP_TEST(dep, 1) ? 'y' : ' ',
+ SWS_COMP_TEST(dep, 2) ? 'z' : ' ',
+ SWS_COMP_TEST(dep, 3) ? 'w' : ' ');
}
static void print_q(AVBPrint *bp, const AVRational64 q)
@@ -881,9 +879,9 @@ void ff_sws_op_desc(AVBPrint *bp, const SwsOp *op)
break;
case SWS_OP_READ:
case SWS_OP_WRITE:
- av_bprintf(bp, "%-20s: %d elem(s) %s >> %d", name,
- op->rw.elems, rw_mode_names[op->rw.mode],
- op->rw.frac);
+ av_bprintf(bp, "%-20s: %dx %s %s >> %d", name,
+ op->rw.elems, ff_sws_pixel_type_name(op->type),
+ rw_mode_names[op->rw.mode], op->rw.frac);
if (!op->rw.filter.op)
break;
const SwsFilterWeights *kernel = op->rw.filter.kernel;
@@ -978,66 +976,77 @@ static void desc_plane_order(AVBPrint *bp, int nb_planes, const uint8_t *order)
av_bprintf(bp, "}");
}
+static SwsPixelType op_result_type(const SwsOp *op)
+{
+ switch (op->op) {
+ case SWS_OP_CONVERT:
+ return op->convert.to;
+ case SWS_OP_READ:
+ return op->rw.filter.op ? op->rw.filter.type : op->type;
+ case SWS_OP_FILTER_H:
+ case SWS_OP_FILTER_V:
+ return op->filter.type;
+ default:
+ return op->type;
+ }
+}
+
void ff_sws_op_list_print(void *log, int lev, int lev_extra,
const SwsOpList *ops)
{
- AVBPrint bp;
+ AVBPrint bpc, *bp = &bpc;
if (!ops->num_ops) {
av_log(log, lev, " (empty)\n");
return;
}
- av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC);
+ av_bprint_init(bp, 0, AV_BPRINT_SIZE_AUTOMATIC);
- for (int i = 0; i < ops->num_ops; i++) {
- const SwsOp *op = &ops->ops[i];
+ for (int n = 0; n < ops->num_ops; n++) {
+ const SwsOp *op = &ops->ops[n];
const SwsCompMask mask = ff_sws_comp_mask_needed(op);
- av_bprint_clear(&bp);
- av_bprintf(&bp, " [%3s %c%c%c%c] ",
- ff_sws_pixel_type_name(op->type),
- describe_comp_flags(op->comps.flags[0]),
- describe_comp_flags(op->comps.flags[1]),
- describe_comp_flags(op->comps.flags[2]),
- describe_comp_flags(op->comps.flags[3]));
-
- ff_sws_op_desc(&bp, op);
-
+ av_bprint_clear(bp);
+ av_bprintf(bp, " ");
+ ff_sws_op_desc(bp, op);
if (op->op == SWS_OP_READ || op->op == SWS_OP_WRITE) {
const int planes = ff_sws_rw_op_planes(op);
- desc_plane_order(&bp, planes,
+ desc_plane_order(bp, planes,
op->op == SWS_OP_READ ? ops->plane_src : ops->plane_dst);
}
- av_assert0(av_bprint_is_complete(&bp));
- av_log(log, lev, "%s\n", bp.str);
-
- /* Only print value ranges if any are relevant */
- SwsCompMask range_mask = ff_sws_comp_mask_q4(op->comps.min) |
- ff_sws_comp_mask_q4(op->comps.max);
- if (range_mask & mask) {
- av_bprint_clear(&bp);
- av_bprintf(&bp, " min: ");
- print_q4(&bp, op->comps.min, mask);
- av_bprintf(&bp, ", max: ");
- print_q4(&bp, op->comps.max, mask);
- av_assert0(av_bprint_is_complete(&bp));
- av_log(log, lev_extra, "%s\n", bp.str);
- }
+ av_assert0(av_bprint_is_complete(bp));
+ av_log(log, lev, "%s\n", bp->str);
- bool has_deps = false;
- for (int i = 0; i < 4; i++)
- has_deps |= op->comps.dep_in[i] || op->comps.dep_out[i];
- if (has_deps) {
- av_bprint_clear(&bp);
- av_bprintf(&bp, " inputs: ");
- print_deps(&bp, op->comps.dep_in);
- av_bprintf(&bp, ", outputs: ");
- print_deps(&bp, op->comps.dep_out);
- av_assert0(av_bprint_is_complete(&bp));
- av_log(log, lev_extra, "%s\n", bp.str);
- }
+ for (int i = 0; i < 4; i++) {
+ if (!SWS_COMP_TEST(mask, i))
+ continue;
+ av_bprint_clear(bp);
+ av_bprintf(bp, " %c: %3s,", "XYZW"[i], ff_sws_pixel_type_name(op_result_type(op)));
+ print_deps(bp, op->comps.dep_in[i]);
+ av_bprintf(bp, " ->");
+ print_deps(bp, op->comps.dep_out[i]);
+ av_bprintf(bp, " %7s", describe_comp_flags(op->comps.flags[i]));
+
+ const AVRational64 min = op->comps.min[i];
+ const AVRational64 max = op->comps.max[i];
+ if (min.den || max.den) {
+ if (op->comps.flags[i] & SWS_COMP_ZERO) {
+ /* don't print any value */
+ } else if (op->comps.flags[i] & SWS_COMP_CONST) {
+ av_bprintf(bp, " = ");
+ av_assert1(ff_cmp_q64(min, max) == 0);
+ print_q(bp, min);
+ } else {
+ av_bprintf(bp, " in [");
+ print_q(bp, min);
+ av_bprintf(bp, ", ");
+ print_q(bp, max);
+ av_bprintf(bp, "]");
+ }
+ }
+ av_assert0(av_bprint_is_complete(bp));
+ av_log(log, lev_extra, "%s\n", bp->str);
+ }
}
-
- av_log(log, lev, " ('X' unused, 'z' byteswapped, '=' copied, '$' const, '+' integer, '0' zero)\n");
}
diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list
index 94a583b190..f5519b5e19 100644
--- a/tests/ref/fate/sws-ops-list
+++ b/tests/ref/fate/sws-ops-list
@@ -1 +1 @@
-c49b616409175c41ccc5d786c5097f96
+5e7e06cdc6f4c715b0a7ce5ed278e084