Commit f2274f8316 for ffmpeg
commit f2274f83169b512257cb0815defe40c2053d12b2
Author: Ramiro Polla <ramiro.polla@gmail.com>
Date: Tue Oct 27 18:00:34 2026 +0100
swscale/ops_memcpy: load per-plane pointers and strides into local variables
This makes the code easier to read and will let us do a few more
simplifications.
diff --git a/libswscale/ops_memcpy.c b/libswscale/ops_memcpy.c
index 9c8345569f..922ebb83c7 100644
--- a/libswscale/ops_memcpy.c
+++ b/libswscale/ops_memcpy.c
@@ -46,30 +46,32 @@ static void process_memcpy(const SwsOpExec *exec, const void *priv,
av_assert1(x_start == 0 && x_end == exec->width);
for (int i = 0; i < p->num_planes; i++) {
- uint8_t *out = exec->out[i];
- const int idx = p->index[i];
+ uint8_t *out = exec->out[i];
+ const ptrdiff_t out_stride = exec->out_stride[i];
+ const int idx = p->index[i];
+ const uint8_t *in = (idx >= 0) ? exec->in[idx] : NULL;
+ const ptrdiff_t in_stride = (idx >= 0) ? exec->in_stride[idx] : 0;
const int bytes = x_end * exec->block_size_out[i];
- const int use_loop = exec->out_stride[i] < 0 ||
- exec->out_stride[i] > bytes + SWS_MAX_PADDING;
- const size_t span = (size_t) (lines - 1) * exec->out_stride[i] + bytes;
- if (idx < 0 && !use_loop) {
+ const int use_loop = out_stride < 0 ||
+ out_stride > bytes + SWS_MAX_PADDING;
+ const size_t span = (size_t) (lines - 1) * out_stride + bytes;
+ if (!in && !use_loop) {
memset(out, p->clear_value[i], span);
- } else if (idx < 0) {
+ } else if (!in) {
for (int y = y_start; y < y_end; y++) {
memset(out, p->clear_value[i], bytes);
- out += exec->out_stride[i];
+ out += out_stride;
}
- } else if (out == exec->in[idx]) {
- av_assert1(exec->out_stride[i] == exec->in_stride[idx]);
+ } else if (out == in) {
+ av_assert1(out_stride == in_stride);
continue; /* plane was already ref'd */
- } else if (exec->out_stride[i] == exec->in_stride[idx] && !use_loop) {
- memcpy(out, exec->in[idx], span);
+ } else if (out_stride == in_stride && !use_loop) {
+ memcpy(out, in, span);
} else {
- const uint8_t *in = exec->in[idx];
for (int y = y_start; y < y_end; y++) {
memcpy(out, in, bytes);
- out += exec->out_stride[i];
- in += exec->in_stride[idx];
+ out += out_stride;
+ in += in_stride;
}
}
}