| @@ -66,13 +66,15 @@ typedef struct ThreadData { · 65 unmodified lines |
| 66 | { "c3_mode", "set component #3 blend mode", OFFSET(params[3].mode), AV_OPT_TYPE_INT, {.i64=0}, 0, BLEND_NB-1, FLAGS, "mode"},\ | 66 | { "c3_mode", "set component #3 blend mode", OFFSET(params[3].mode), AV_OPT_TYPE_INT, {.i64=0}, 0, BLEND_NB-1, FLAGS, "mode"},\ |
| 67 | { "all_mode", "set blend mode for all components", OFFSET(all_mode), AV_OPT_TYPE_INT, {.i64=-1},-1, BLEND_NB-1, FLAGS, "mode"},\ | 67 | { "all_mode", "set blend mode for all components", OFFSET(all_mode), AV_OPT_TYPE_INT, {.i64=-1},-1, BLEND_NB-1, FLAGS, "mode"},\ |
| 68 | { "addition", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_ADDITION}, 0, 0, FLAGS, "mode" },\ | 68 | { "addition", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_ADDITION}, 0, 0, FLAGS, "mode" },\ |
| 69 | { "addition128", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_ADDITION128}, 0, 0, FLAGS, "mode" },\ | 69 | { "addition128","", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_GRAINMERGE}, 0, 0, FLAGS, "mode" },\ |
| | 70 | { "grainmerge", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_GRAINMERGE}, 0, 0, FLAGS, "mode" },\ |
| 70 | { "and", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_AND}, 0, 0, FLAGS, "mode" },\ | 71 | { "and", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_AND}, 0, 0, FLAGS, "mode" },\ |
| 71 | { "average", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_AVERAGE}, 0, 0, FLAGS, "mode" },\ | 72 | { "average", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_AVERAGE}, 0, 0, FLAGS, "mode" },\ |
| 72 | { "burn", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_BURN}, 0, 0, FLAGS, "mode" },\ | 73 | { "burn", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_BURN}, 0, 0, FLAGS, "mode" },\ |
| 73 | { "darken", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DARKEN}, 0, 0, FLAGS, "mode" },\ | 74 | { "darken", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DARKEN}, 0, 0, FLAGS, "mode" },\ |
| 74 | { "difference", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DIFFERENCE}, 0, 0, FLAGS, "mode" },\ | 75 | { "difference", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DIFFERENCE}, 0, 0, FLAGS, "mode" },\ |
| 75 | { "difference128", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DIFFERENCE128}, 0, 0, FLAGS, "mode" },\ | 76 | { "difference128", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_GRAINEXTRACT}, 0, 0, FLAGS, "mode" },\ |
| | 77 | { "grainextract", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_GRAINEXTRACT}, 0, 0, FLAGS, "mode" },\ |
| 76 | { "divide", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DIVIDE}, 0, 0, FLAGS, "mode" },\ | 78 | { "divide", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DIVIDE}, 0, 0, FLAGS, "mode" },\ |
| 77 | { "dodge", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DODGE}, 0, 0, FLAGS, "mode" },\ | 79 | { "dodge", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_DODGE}, 0, 0, FLAGS, "mode" },\ |
| 78 | { "exclusion", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_EXCLUSION}, 0, 0, FLAGS, "mode" },\ | 80 | { "exclusion", "", 0, AV_OPT_TYPE_CONST, {.i64=BLEND_EXCLUSION}, 0, 0, FLAGS, "mode" },\ |
| @@ -236,7 +238,7 @@ static void blend_## name##_16bit(const uint8_t *_top, ptrdiff_t top_linesize, · 157 unmodified lines |
| 236 | #define DODGE(a, b) (((a) == 255) ? (a) : FFMIN(255, (((b) << 8) / (255 - (a))))) | 238 | #define DODGE(a, b) (((a) == 255) ? (a) : FFMIN(255, (((b) << 8) / (255 - (a))))) |
| 237 | | 239 | |
| 238 | DEFINE_BLEND8(addition, FFMIN(255, A + B)) | 240 | DEFINE_BLEND8(addition, FFMIN(255, A + B)) |
| 239 | DEFINE_BLEND8(addition128, av_clip_uint8(A + B - 128)) | 241 | DEFINE_BLEND8(grainmerge, av_clip_uint8(A + B - 128)) |
| 240 | DEFINE_BLEND8(average, (A + B) / 2) | 242 | DEFINE_BLEND8(average, (A + B) / 2) |
| 241 | DEFINE_BLEND8(subtract, FFMAX(0, A - B)) | 243 | DEFINE_BLEND8(subtract, FFMAX(0, A - B)) |
| 242 | DEFINE_BLEND8(multiply, MULTIPLY(1, A, B)) | 244 | DEFINE_BLEND8(multiply, MULTIPLY(1, A, B)) |
| @@ -244,7 +246,7 @@ DEFINE_BLEND8(multiply128,av_clip_uint8((A - 128) * B / 32. + 128)) · 1 unmodified line |
| 244 | DEFINE_BLEND8(negation, 255 - FFABS(255 - A - B)) | 246 | DEFINE_BLEND8(negation, 255 - FFABS(255 - A - B)) |
| 245 | DEFINE_BLEND8(extremity, FFABS(255 - A - B)) | 247 | DEFINE_BLEND8(extremity, FFABS(255 - A - B)) |
| 246 | DEFINE_BLEND8(difference, FFABS(A - B)) | 248 | DEFINE_BLEND8(difference, FFABS(A - B)) |
| 247 | DEFINE_BLEND8(difference128, av_clip_uint8(128 + A - B)) | 249 | DEFINE_BLEND8(grainextract, av_clip_uint8(128 + A - B)) |
| 248 | DEFINE_BLEND8(screen, SCREEN(1, A, B)) | 250 | DEFINE_BLEND8(screen, SCREEN(1, A, B)) |
| 249 | DEFINE_BLEND8(overlay, (A < 128) ? MULTIPLY(2, A, B) : SCREEN(2, A, B)) | 251 | DEFINE_BLEND8(overlay, (A < 128) ? MULTIPLY(2, A, B) : SCREEN(2, A, B)) |
| 250 | DEFINE_BLEND8(hardlight, (B < 128) ? MULTIPLY(2, B, A) : SCREEN(2, B, A)) | 252 | DEFINE_BLEND8(hardlight, (B < 128) ? MULTIPLY(2, B, A) : SCREEN(2, B, A)) |
| @@ -279,7 +281,7 @@ DEFINE_BLEND8(linearlight,av_clip_uint8((B < 128) ? B + 2 * A - 255 : B + 2 * (A · 28 unmodified lines |
| 279 | #define DODGE(a, b) (((a) == 65535) ? (a) : FFMIN(65535, (((b) << 16) / (65535 - (a))))) | 281 | #define DODGE(a, b) (((a) == 65535) ? (a) : FFMIN(65535, (((b) << 16) / (65535 - (a))))) |
| 280 | | 282 | |
| 281 | DEFINE_BLEND16(addition, FFMIN(65535, A + B)) | 283 | DEFINE_BLEND16(addition, FFMIN(65535, A + B)) |
| 282 | DEFINE_BLEND16(addition128, av_clip_uint16(A + B - 32768)) | 284 | DEFINE_BLEND16(grainmerge, av_clip_uint16(A + B - 32768)) |
| 283 | DEFINE_BLEND16(average, (A + B) / 2) | 285 | DEFINE_BLEND16(average, (A + B) / 2) |
| 284 | DEFINE_BLEND16(subtract, FFMAX(0, A - B)) | 286 | DEFINE_BLEND16(subtract, FFMAX(0, A - B)) |
| 285 | DEFINE_BLEND16(multiply, MULTIPLY(1, A, B)) | 287 | DEFINE_BLEND16(multiply, MULTIPLY(1, A, B)) |
| @@ -287,7 +289,7 @@ DEFINE_BLEND16(multiply128, av_clip_uint16((A - 32768) * B / 8192. + 32768)) · 1 unmodified line |
| 287 | DEFINE_BLEND16(negation, 65535 - FFABS(65535 - A - B)) | 289 | DEFINE_BLEND16(negation, 65535 - FFABS(65535 - A - B)) |
| 288 | DEFINE_BLEND16(extremity, FFABS(65535 - A - B)) | 290 | DEFINE_BLEND16(extremity, FFABS(65535 - A - B)) |
| 289 | DEFINE_BLEND16(difference, FFABS(A - B)) | 291 | DEFINE_BLEND16(difference, FFABS(A - B)) |
| 290 | DEFINE_BLEND16(difference128, av_clip_uint16(32768 + A - B)) | 292 | DEFINE_BLEND16(grainextract, av_clip_uint16(32768 + A - B)) |
| 291 | DEFINE_BLEND16(screen, SCREEN(1, A, B)) | 293 | DEFINE_BLEND16(screen, SCREEN(1, A, B)) |
| 292 | DEFINE_BLEND16(overlay, (A < 32768) ? MULTIPLY(2, A, B) : SCREEN(2, A, B)) | 294 | DEFINE_BLEND16(overlay, (A < 32768) ? MULTIPLY(2, A, B) : SCREEN(2, A, B)) |
| 293 | DEFINE_BLEND16(hardlight, (B < 32768) ? MULTIPLY(2, B, A) : SCREEN(2, B, A)) | 295 | DEFINE_BLEND16(hardlight, (B < 32768) ? MULTIPLY(2, B, A) : SCREEN(2, B, A)) |
| @@ -450,13 +452,13 @@ void ff_blend_init(FilterParams *param, int is_16bit) · 156 unmodified lines |
| 450 | { | 452 | { |
| 451 | switch (param->mode) { | 453 | switch (param->mode) { |
| 452 | case BLEND_ADDITION: param->blend = is_16bit ? blend_addition_16bit : blend_addition_8bit; break; | 454 | case BLEND_ADDITION: param->blend = is_16bit ? blend_addition_16bit : blend_addition_8bit; break; |
| 453 | case BLEND_ADDITION128: param->blend = is_16bit ? blend_addition128_16bit : blend_addition128_8bit; break; | 455 | case BLEND_GRAINMERGE: param->blend = is_16bit ? blend_grainmerge_16bit : blend_grainmerge_8bit; break; |
| 454 | case BLEND_AND: param->blend = is_16bit ? blend_and_16bit : blend_and_8bit; break; | 456 | case BLEND_AND: param->blend = is_16bit ? blend_and_16bit : blend_and_8bit; break; |
| 455 | case BLEND_AVERAGE: param->blend = is_16bit ? blend_average_16bit : blend_average_8bit; break; | 457 | case BLEND_AVERAGE: param->blend = is_16bit ? blend_average_16bit : blend_average_8bit; break; |
| 456 | case BLEND_BURN: param->blend = is_16bit ? blend_burn_16bit : blend_burn_8bit; break; | 458 | case BLEND_BURN: param->blend = is_16bit ? blend_burn_16bit : blend_burn_8bit; break; |
| 457 | case BLEND_DARKEN: param->blend = is_16bit ? blend_darken_16bit : blend_darken_8bit; break; | 459 | case BLEND_DARKEN: param->blend = is_16bit ? blend_darken_16bit : blend_darken_8bit; break; |
| 458 | case BLEND_DIFFERENCE: param->blend = is_16bit ? blend_difference_16bit : blend_difference_8bit; break; | 460 | case BLEND_DIFFERENCE: param->blend = is_16bit ? blend_difference_16bit : blend_difference_8bit; break; |
| 459 | case BLEND_DIFFERENCE128: param->blend = is_16bit ? blend_difference128_16bit: blend_difference128_8bit; break; | 461 | case BLEND_GRAINEXTRACT: param->blend = is_16bit ? blend_grainextract_16bit: blend_grainextract_8bit; break; |
| 460 | case BLEND_DIVIDE: param->blend = is_16bit ? blend_divide_16bit : blend_divide_8bit; break; | 462 | case BLEND_DIVIDE: param->blend = is_16bit ? blend_divide_16bit : blend_divide_8bit; break; |
| 461 | case BLEND_DODGE: param->blend = is_16bit ? blend_dodge_16bit : blend_dodge_8bit; break; | 463 | case BLEND_DODGE: param->blend = is_16bit ? blend_dodge_16bit : blend_dodge_8bit; break; |
| 462 | case BLEND_EXCLUSION: param->blend = is_16bit ? blend_exclusion_16bit : blend_exclusion_8bit; break; | 464 | case BLEND_EXCLUSION: param->blend = is_16bit ? blend_exclusion_16bit : blend_exclusion_8bit; break; |