diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 1718b0de11..6bb9db1613 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -243,8 +243,12 @@ ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_min_8_f32_0010_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_min_8_f32_0100_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x4 }) +ENTRY(ff_sws_min_8_f32_0101_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5 }) ENTRY(ff_sws_min_8_f32_0111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_min_8_f32_1000_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) ENTRY(ff_sws_min_8_f32_1001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) ENTRY(ff_sws_min_8_f32_1110_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) ENTRY(ff_sws_min_8_f32_1111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) diff --git a/libswscale/ops_optimizer.c b/libswscale/ops_optimizer.c index fd3b70deed..9cc5db9717 100644 --- a/libswscale/ops_optimizer.c +++ b/libswscale/ops_optimizer.c @@ -581,7 +581,9 @@ retry: for (int i = 0; i < 4; i++) { if (!SWS_OP_NEEDED(op, i) || !op->clamp.limit[i].den) continue; - if (av_cmp_q64(op->clamp.limit[i], prev->comps.max[i]) < 0) + if (av_cmp_q64(op->clamp.limit[i], prev->comps.max[i]) >= 0) + op->clamp.limit[i] = (AVRational64) {0}; /* no-op */ + else noop = false; } @@ -595,7 +597,9 @@ retry: for (int i = 0; i < 4; i++) { if (!SWS_OP_NEEDED(op, i) || !op->clamp.limit[i].den) continue; - if (av_cmp_q64(prev->comps.min[i], op->clamp.limit[i]) < 0) + if (av_cmp_q64(prev->comps.min[i], op->clamp.limit[i]) >= 0) + op->clamp.limit[i] = (AVRational64) {0}; + else noop = false; } diff --git a/libswscale/uops_macros.h b/libswscale/uops_macros.h index 84fbd3b073..d2f9793692 100644 --- a/libswscale/uops_macros.h +++ b/libswscale/uops_macros.h @@ -987,15 +987,23 @@ MACRO(__VA_ARGS__, f32_add_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0xf) #define SWS_FOR_F32_MIN(MACRO, ...) \ MACRO(__VA_ARGS__, f32_min_x , SWS_PIXEL_F32, SWS_UOP_MIN , 0x1) \ + MACRO(__VA_ARGS__, f32_min_y , SWS_PIXEL_F32, SWS_UOP_MIN , 0x2) \ MACRO(__VA_ARGS__, f32_min_xy , SWS_PIXEL_F32, SWS_UOP_MIN , 0x3) \ + MACRO(__VA_ARGS__, f32_min_z , SWS_PIXEL_F32, SWS_UOP_MIN , 0x4) \ + MACRO(__VA_ARGS__, f32_min_xz , SWS_PIXEL_F32, SWS_UOP_MIN , 0x5) \ MACRO(__VA_ARGS__, f32_min_xyz , SWS_PIXEL_F32, SWS_UOP_MIN , 0x7) \ + MACRO(__VA_ARGS__, f32_min_w , SWS_PIXEL_F32, SWS_UOP_MIN , 0x8) \ MACRO(__VA_ARGS__, f32_min_xw , SWS_PIXEL_F32, SWS_UOP_MIN , 0x9) \ MACRO(__VA_ARGS__, f32_min_yzw , SWS_PIXEL_F32, SWS_UOP_MIN , 0xe) \ MACRO(__VA_ARGS__, f32_min_xyzw , SWS_PIXEL_F32, SWS_UOP_MIN , 0xf) #define SWS_FOR_STRUCT_F32_MIN(MACRO, ...) \ MACRO(__VA_ARGS__, f32_min_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x1) \ + MACRO(__VA_ARGS__, f32_min_y , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x2) \ MACRO(__VA_ARGS__, f32_min_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x3) \ + MACRO(__VA_ARGS__, f32_min_z , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x4) \ + MACRO(__VA_ARGS__, f32_min_xz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x5) \ MACRO(__VA_ARGS__, f32_min_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x7) \ + MACRO(__VA_ARGS__, f32_min_w , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x8) \ MACRO(__VA_ARGS__, f32_min_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x9) \ MACRO(__VA_ARGS__, f32_min_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0xe) \ MACRO(__VA_ARGS__, f32_min_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0xf) @@ -1003,12 +1011,14 @@ MACRO(__VA_ARGS__, f32_max_x , SWS_PIXEL_F32, SWS_UOP_MAX , 0x1) \ MACRO(__VA_ARGS__, f32_max_xy , SWS_PIXEL_F32, SWS_UOP_MAX , 0x3) \ MACRO(__VA_ARGS__, f32_max_xyz , SWS_PIXEL_F32, SWS_UOP_MAX , 0x7) \ + MACRO(__VA_ARGS__, f32_max_w , SWS_PIXEL_F32, SWS_UOP_MAX , 0x8) \ MACRO(__VA_ARGS__, f32_max_xw , SWS_PIXEL_F32, SWS_UOP_MAX , 0x9) \ MACRO(__VA_ARGS__, f32_max_xyzw , SWS_PIXEL_F32, SWS_UOP_MAX , 0xf) #define SWS_FOR_STRUCT_F32_MAX(MACRO, ...) \ MACRO(__VA_ARGS__, f32_max_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x1) \ MACRO(__VA_ARGS__, f32_max_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x3) \ MACRO(__VA_ARGS__, f32_max_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x7) \ + MACRO(__VA_ARGS__, f32_max_w , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x8) \ MACRO(__VA_ARGS__, f32_max_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x9) \ MACRO(__VA_ARGS__, f32_max_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0xf) #define SWS_FOR_F32_UNPACK(MACRO, ...) diff --git a/tests/ref/fate/sws-ops-list b/tests/ref/fate/sws-ops-list index 08a6931637..aa7baa23f8 100644 --- a/tests/ref/fate/sws-ops-list +++ b/tests/ref/fate/sws-ops-list @@ -1 +1 @@ -b1ad61c3b7751b8d88c8036076bac1e4 +3dec8ca0edbf6a301f53b7782932c98f