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

View File

@ -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);

View File

@ -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));

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);

View File

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

View File

@ -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);