This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 7c15cb8b343017aa4f3264af841ff080f6dd4ac0 Author: Niklas Haas <[email protected]> AuthorDate: Thu Oct 8 02:22:39 2026 +0200 Commit: Niklas Haas <[email protected]> CommitDate: Tue Oct 20 21:33:01 2026 +0000 swscale/ops: nuke SWS_COMP_GARBAGE Output pad neededness is redundant with `outputs[i].dep_out`. Output pad liveness is redundant with `outputs[i].type != SWS_PIXEL_NONE`. This covers both previous usages of this flag cleanly. As an aside, two checks gets more strict in a good way - the redundant clear-to-zero also checks that there isn't an implicit type change, and the write type assertion also verifies that the type matches. Signed-off-by: Niklas Haas <[email protected]> --- libswscale/ops.c | 23 +++++++---------------- libswscale/ops.h | 13 ++++++------- libswscale/ops_optimizer.c | 5 ++--- 3 files changed, 15 insertions(+), 26 deletions(-) diff --git a/libswscale/ops.c b/libswscale/ops.c index 4442ae7c81..a06fcc2f25 100644 --- a/libswscale/ops.c +++ b/libswscale/ops.c @@ -322,7 +322,7 @@ enum { /* merge_comp_flags() forms a monoid with SWS_COMP_IDENTITY as the null element */ static SwsCompFlags merge_comp_flags(SwsCompFlags a, SwsCompFlags b) { - const SwsCompFlags flags_or = SWS_COMP_GARBAGE | SWS_COMP_SWAPPED; + const SwsCompFlags flags_or = SWS_COMP_SWAPPED; const SwsCompFlags flags_and = SWS_COMP_IDENTITY; return ((a & b) & flags_and) | ((a | b) & flags_or); } @@ -349,12 +349,7 @@ static void apply_filter_weights(SwsOpPad outputs[4], const SwsOpPad inputs[4], /* Infer + propagate known information about components */ void ff_sws_op_list_update_comps(SwsOpList *ops) { - SwsOpPad prev[4] = { - { .flags = SWS_COMP_GARBAGE }, - { .flags = SWS_COMP_GARBAGE }, - { .flags = SWS_COMP_GARBAGE }, - { .flags = SWS_COMP_GARBAGE }, - }; + SwsOpPad prev[4] = {0}; /* Forwards pass, propagates knowledge about the incoming pixel values */ for (int n = 0; n < ops->num_ops; n++) { @@ -406,7 +401,7 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) #define RESET(I) do { \ SwsOpPad *dst = &op->outputs[I]; \ dst->type = SWS_PIXEL_NONE; \ - dst->flags = SWS_COMP_GARBAGE; \ + dst->flags = 0; \ dst->min = dst->max = (AVRational64) {0}; \ dst->dep_in = SWS_COMP_NONE; \ } while (0) @@ -425,7 +420,6 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) const SwsOpPad *src = &ops->inputs[idx]; SwsOpPad *dst = &op->outputs[i]; - av_assert0(!(src->flags & SWS_COMP_GARBAGE)); dst->type = op->rw.type; dst->flags = src->flags & SWS_COMP_DIRTY; dst->min = src->min; @@ -459,7 +453,7 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) break; case SWS_OP_WRITE: for (int i = 0; i < op->rw.elems; i++) - av_assert1(!(prev[i].flags & SWS_COMP_GARBAGE)); + av_assert1(prev[i].type == op->rw.type); for (int i = 0; i < 4; i++) FORWARD(i, i, flags); break; @@ -595,10 +589,9 @@ void ff_sws_op_list_update_comps(SwsOpList *ops) } case SWS_OP_LUT_3D: for (int i = 0; i < 3; i++) { - /* 3x3 dependency matrix; strip all information except - * SWS_COMP_GARBAGE (for correctness validation) */ + /* 3x3 dependency matrix; strip all information */ for (int j = 0; j < 3; j++) - FORWARD(i, j, flags & SWS_COMP_GARBAGE); + FORWARD(i, j, flags & 0); /* LUT output domain is always scaled to full 16-bit range */ op->outputs[i].min = Q(0); op->outputs[i].max = Q(UINT16_MAX); @@ -879,9 +872,7 @@ uint32_t ff_sws_linear_mask(const SwsLinearOp *c) static const char *describe_comp_flags(SwsCompFlags flags) { - if (flags & SWS_COMP_GARBAGE) - return "garbage"; - else if (flags & SWS_COMP_ZERO) + if (flags & SWS_COMP_ZERO) return "zero"; else if (flags & SWS_COMP_SWAPPED) return "swapped"; diff --git a/libswscale/ops.h b/libswscale/ops.h index 613ff5e538..0aca2048f0 100644 --- a/libswscale/ops.h +++ b/libswscale/ops.h @@ -227,12 +227,11 @@ typedef struct SwsLut3dOp { } SwsLut3dOp; typedef enum SwsCompFlags { - SWS_COMP_GARBAGE = 1 << 0, /* contents are undefined / garbage data */ - SWS_COMP_EXACT = 1 << 1, /* value is an exact integer */ - SWS_COMP_ZERO = 1 << 2, /* known to be a constant zero */ - SWS_COMP_SWAPPED = 1 << 3, /* byte order is swapped */ - SWS_COMP_COPY = 1 << 4, /* value is unmodified from the source plane */ - SWS_COMP_CONST = 1 << 5, /* value is a fixed constant */ + SWS_COMP_EXACT = 1 << 0, /* value is an exact integer */ + SWS_COMP_ZERO = 1 << 1, /* known to be a constant zero */ + SWS_COMP_SWAPPED = 1 << 2, /* byte order is swapped */ + SWS_COMP_COPY = 1 << 3, /* value is unmodified from the source plane */ + SWS_COMP_CONST = 1 << 4, /* value is a fixed constant */ } SwsCompFlags; typedef struct SwsOpPad { @@ -280,7 +279,7 @@ struct SwsOp { SwsOpList *ops; }; -#define SWS_OP_NEEDED(op, idx) (!((op)->outputs[idx].flags & SWS_COMP_GARBAGE)) +#define SWS_OP_NEEDED(op, idx) ((op)->outputs[idx].dep_out != 0) /* Compute SwsCompMask from a mask of needed components */ SwsCompMask ff_sws_comp_mask_needed(const SwsOp *op); diff --git a/libswscale/ops_optimizer.c b/libswscale/ops_optimizer.c index 7d6b6de770..e910fb4e3d 100644 --- a/libswscale/ops_optimizer.c +++ b/libswscale/ops_optimizer.c @@ -250,8 +250,7 @@ static bool extract_scalar(const SwsLinearOp *c, for (int i = 0; i < 4; i++) { const AVRational64 s = c->m[i][i]; - if ((inputs[i].flags & SWS_COMP_ZERO) || - (outputs[i].flags & SWS_COMP_GARBAGE)) + if ((inputs[i].flags & SWS_COMP_ZERO) || !outputs[i].dep_out) continue; if (scale.factor.den && ff_cmp_q64(s, scale.factor)) return false; @@ -468,7 +467,7 @@ retry: continue; if ((prev->outputs[i].flags & SWS_COMP_ZERO) && - !(prev->outputs[i].flags & SWS_COMP_GARBAGE) && + prev->outputs[i].type == op->clear.type[i] && op->clear.value[i].num == 0) { /* Redundant clear-to-zero of zero component */ -- To stop receiving notification emails like this one, please contact [email protected]. _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
