Fix white balance, was doing unnecessary linear conversions

This made byte & float images behave differently, where other modifiers remain the same.
Also remove scene from the modifier (should have been passed as arg but no longer needed).
This commit is contained in:
Campbell Barton 2016-02-16 00:05:44 +11:00
parent 473eff2df8
commit 3e6b7d0fd8
7 changed files with 5 additions and 14 deletions

@ -460,7 +460,7 @@ typedef struct SequenceModifierTypeInfo {
const struct SequenceModifierTypeInfo *BKE_sequence_modifier_type_info_get(int type);
struct SequenceModifierData *BKE_sequence_modifier_new(struct Sequence *seq, const char *name, int type, struct Scene *scene);
struct SequenceModifierData *BKE_sequence_modifier_new(struct Sequence *seq, const char *name, int type);
bool BKE_sequence_modifier_remove(struct Sequence *seq, struct SequenceModifierData *smd);
void BKE_sequence_modifier_clear(struct Sequence *seq);
void BKE_sequence_modifier_free(struct SequenceModifierData *smd);

@ -184,7 +184,6 @@ static void whiteBalance_init_data(SequenceModifierData *smd)
}
typedef struct WhiteBalanceThreadData {
struct ColorSpace *colorspace;
float white[3];
} WhiteBalanceThreadData;
@ -210,7 +209,6 @@ static void whiteBalance_apply_threaded(int width, int height, unsigned char *re
}
else {
straight_uchar_to_premul_float(result, rect + pixel_index);
IMB_colormanagement_colorspace_to_scene_linear_v3(result, data->colorspace);
}
mul_v3_v3(result, multiplier);
@ -230,7 +228,6 @@ static void whiteBalance_apply_threaded(int width, int height, unsigned char *re
copy_v3_v3(rect_float + pixel_index, result);
}
else {
IMB_colormanagement_scene_linear_to_colorspace_v3(result, data->colorspace);
premul_float_to_straight_uchar(rect + pixel_index, result);
}
}
@ -243,9 +240,6 @@ static void whiteBalance_apply(SequenceModifierData *smd, ImBuf *ibuf, ImBuf *ma
WhiteBalanceModifierData *wbmd = (WhiteBalanceModifierData *) smd;
copy_v3_v3(data.white, wbmd->white_value);
IMB_colormanagement_display_to_scene_linear_v3(data.white,
IMB_colormanagement_display_get_named(wbmd->modifier.scene->display_settings.display_device));
data.colorspace = ibuf->rect_colorspace;
modifier_apply_threaded(ibuf, mask, whiteBalance_apply_threaded, &data);
}
@ -883,7 +877,7 @@ const SequenceModifierTypeInfo *BKE_sequence_modifier_type_info_get(int type)
return modifiersTypes[type];
}
SequenceModifierData *BKE_sequence_modifier_new(Sequence *seq, const char *name, int type, struct Scene *scene)
SequenceModifierData *BKE_sequence_modifier_new(Sequence *seq, const char *name, int type)
{
SequenceModifierData *smd;
const SequenceModifierTypeInfo *smti = BKE_sequence_modifier_type_info_get(type);
@ -892,7 +886,6 @@ SequenceModifierData *BKE_sequence_modifier_new(Sequence *seq, const char *name,
smd->type = type;
smd->flag |= SEQUENCE_MODIFIER_EXPANDED;
smd->scene = scene;
if (!name || !name[0])
BLI_strncpy(smd->name, smti->name, sizeof(smd->name));

@ -5503,7 +5503,6 @@ static void lib_link_sequence_modifiers(FileData *fd, Scene *scene, ListBase *lb
for (smd = lb->first; smd; smd = smd->next) {
if (smd->mask_id)
smd->mask_id = newlibadr_us(fd, scene->id.lib, smd->mask_id);
smd->scene = scene;
}
}

@ -1503,7 +1503,7 @@ void blo_do_versions_260(FileData *fd, Library *UNUSED(lib), Main *main)
SequenceModifierData *smd;
ColorBalanceModifierData *cbmd;
smd = BKE_sequence_modifier_new(seq, NULL, seqModifierType_ColorBalance, scene);
smd = BKE_sequence_modifier_new(seq, NULL, seqModifierType_ColorBalance);
cbmd = (ColorBalanceModifierData *) smd;
cbmd->color_balance = *strip->color_balance;

@ -71,7 +71,7 @@ static int strip_modifier_add_exec(bContext *C, wmOperator *op)
Sequence *seq = BKE_sequencer_active_get(scene);
int type = RNA_enum_get(op->ptr, "type");
BKE_sequence_modifier_new(seq, NULL, type, scene);
BKE_sequence_modifier_new(seq, NULL, type);
BKE_sequence_invalidate_cache(scene, seq);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);

@ -313,7 +313,6 @@ typedef struct SequenceModifierData {
struct Sequence *mask_sequence;
struct Mask *mask_id;
struct Scene *scene;
} SequenceModifierData;
typedef struct ColorBalanceModifierData {

@ -1044,7 +1044,7 @@ static SequenceModifierData *rna_Sequence_modifier_new(Sequence *seq, bContext *
Scene *scene = CTX_data_scene(C);
SequenceModifierData *smd;
smd = BKE_sequence_modifier_new(seq, name, type, scene);
smd = BKE_sequence_modifier_new(seq, name, type);
BKE_sequence_invalidate_cache_for_modifier(scene, seq);