This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 2171f9836cc2edf8951bea396a285ba922f6bec5
Author:     Niklas Haas <[email protected]>
AuthorDate: Mon Oct 19 15:44:34 2026 +0200
Commit:     Niklas Haas <[email protected]>
CommitDate: Tue Oct 20 21:33:01 2026 +0000

    swscale/ops: add ff_sws_op_prev/next() helpers
    
    Signed-off-by: Niklas Haas <[email protected]>
---
 libswscale/ops.c          | 25 +++++++++++++++++++++++++
 libswscale/ops.h          |  6 ++++++
 libswscale/ops_dispatch.c |  5 +++--
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/libswscale/ops.c b/libswscale/ops.c
index a66832f3e9..caf933bd58 100644
--- a/libswscale/ops.c
+++ b/libswscale/ops.c
@@ -143,6 +143,31 @@ int ff_sws_rw_op_planes(const SwsOp *op)
     return 0;
 }
 
+static inline int op_index(const SwsOp *op)
+{
+    SwsOpList *ops = op->ops;
+    av_assert1(op >= ops->ops && op < ops->ops + ops->num_ops);
+    return op - ops->ops;
+}
+
+const SwsOp *ff_sws_op_prev(const SwsOp *op)
+{
+    if (!op)
+        return NULL;
+    SwsOpList *ops = op->ops;
+    const int idx = op_index(op);
+    return idx > 0 ? &ops->ops[idx - 1] : NULL;
+}
+
+const SwsOp *ff_sws_op_next(const SwsOp *op)
+{
+    if (!op)
+        return NULL;
+    SwsOpList *ops = op->ops;
+    const int idx = op_index(op);
+    return idx < ops->num_ops - 1 ? &ops->ops[idx + 1] : NULL;
+}
+
 /* biased towards `a` */
 static AVRational64 av_min_q64(AVRational64 a, AVRational64 b)
 {
diff --git a/libswscale/ops.h b/libswscale/ops.h
index aad48660b3..bfb5085ae5 100644
--- a/libswscale/ops.h
+++ b/libswscale/ops.h
@@ -306,6 +306,12 @@ void ff_sws_op_uninit(SwsOp *op);
  */
 void ff_sws_apply_op_q(const SwsOp *op, AVRational64 x[4]);
 
+/**
+ * Return the previous/next operation in the list, or NULL if there is none.
+ */
+const SwsOp *ff_sws_op_prev(const SwsOp *op);
+const SwsOp *ff_sws_op_next(const SwsOp *op);
+
 /**
  * Helper struct for representing a list of operations.
  */
diff --git a/libswscale/ops_dispatch.c b/libswscale/ops_dispatch.c
index d2669d6cbd..2268100154 100644
--- a/libswscale/ops_dispatch.c
+++ b/libswscale/ops_dispatch.c
@@ -479,7 +479,7 @@ static void op_list_get_plane_copy(const SwsOpList *ops, 
SwsPass *pass)
         read->rw.frac != write->rw.frac)
         return; /* only regular planes can be directly ref'd */
 
-    const SwsOp *prev = &ops->ops[ops->num_ops - 2];
+    const SwsOp *prev = ff_sws_op_prev(write);
     int *plane_copy = pass->output->plane_copy;
     for (int i = 0; i < write->rw.elems; i++) {
         SwsCompFlags flags = prev->outputs[i].flags;
@@ -729,7 +729,8 @@ static int compile_subpass(const CompileArgs *args, 
SwsOpList **pops,
         /* Split off copied and constant planes into a separate subpass,
          * since these are likely to be handled by the memcpy backend */
         av_assert0(ops->num_ops >= 2);
-        const SwsOp *prev = &ops->ops[ops->num_ops - 2];
+        const SwsOp *write = ff_sws_op_list_output(ops);
+        const SwsOp *prev = ff_sws_op_prev(write);
         SwsCompMask planes = plane_mask_flags(prev, SWS_COMP_COPY | 
SWS_COMP_CONST);
         RET(ff_sws_op_list_split_planes(ops, &rest, planes));
         if (rest) {

-- 
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]

Reply via email to