Blender V4.3
modifier.cc File Reference
#include <cstddef>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
#include "BLI_listbase.h"
#include "BLI_math_geom.h"
#include "BLI_math_vector.hh"
#include "BLI_string.h"
#include "BLI_string_utils.hh"
#include "BLI_task.hh"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "DNA_mask_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "BKE_colortools.hh"
#include "IMB_colormanagement.hh"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "SEQ_modifier.hh"
#include "SEQ_render.hh"
#include "SEQ_sound.hh"
#include "SEQ_time.hh"
#include "SEQ_utils.hh"
#include "BLO_read_write.hh"
#include "render.hh"

Go to the source code of this file.

Classes

struct  ModifierInitData
struct  ModifierThread
struct  WhiteBalanceThreadData
struct  BrightContrastThreadData
struct  AvgLogLum
struct  AreaLuminance

Macros

#define INIT_TYPE(typeName)

Functions

Public Modifier Functions
static void sequence_modifier_type_info_init ()
const SequenceModifierTypeInfoSEQ_modifier_type_info_get (int type)
SequenceModifierDataSEQ_modifier_new (Sequence *seq, const char *name, int type)
bool SEQ_modifier_remove (Sequence *seq, SequenceModifierData *smd)
void SEQ_modifier_clear (Sequence *seq)
void SEQ_modifier_free (SequenceModifierData *smd)
void SEQ_modifier_unique_name (Sequence *seq, SequenceModifierData *smd)
SequenceModifierDataSEQ_modifier_find_by_name (Sequence *seq, const char *name)
static bool skip_modifier (Scene *scene, const SequenceModifierData *smd, int timeline_frame)
void SEQ_modifier_apply_stack (const SeqRenderData *context, const Sequence *seq, ImBuf *ibuf, int timeline_frame)
void SEQ_modifier_list_copy (Sequence *seqn, Sequence *seq)
int SEQ_sequence_supports_modifiers (Sequence *seq)
.blend File I/O
void SEQ_modifier_blend_write (BlendWriter *writer, ListBase *modbase)
void SEQ_modifier_blend_read_data (BlendDataReader *reader, ListBase *lb)

Variables

static SequenceModifierTypeInfomodifiersTypes [NUM_SEQUENCE_MODIFIER_TYPES]
static bool modifierTypesInit = false

Modifier Multi-Threading Utilities

using modifier_apply_threaded_cb
static ImBufmodifier_render_mask_input (const SeqRenderData *context, int mask_input_type, Sequence *mask_sequence, Mask *mask_id, int timeline_frame, int fra_offset, bool make_float)
static ImBufmodifier_mask_get (SequenceModifierData *smd, const SeqRenderData *context, int timeline_frame, int fra_offset, bool make_float)
static void modifier_init_handle (void *handle_v, int start_line, int tot_line, void *init_data_v)
static void * modifier_do_thread (void *thread_data_v)
static void modifier_apply_threaded (ImBuf *ibuf, ImBuf *mask, modifier_apply_threaded_cb apply_callback, void *user_data)

Color Balance Modifier

static constexpr int CB_TABLE_SIZE = 1024
static SequenceModifierTypeInfo seqModifier_ColorBalance
static StripColorBalance calc_cb_lgg (const StripColorBalance *cb_)
static StripColorBalance calc_cb_sop (const StripColorBalance *cb_)
static StripColorBalance calc_cb (const StripColorBalance *cb_)
static float color_balance_lgg (float in, const float lift, const float gain, const float gamma, const float mul)
static float color_balance_sop (float in, const float slope, const float offset, const float power, float mul)
static void make_cb_table_lgg (float lift, float gain, float gamma, float mul, float r_table[CB_TABLE_SIZE])
static void make_cb_table_sop (float slope, float offset, float power, float mul, float r_table[CB_TABLE_SIZE])
static void color_balance_byte (const float cb_tab[3][CB_TABLE_SIZE], uchar *rect, const uchar *mask_rect, int width, int height)
static void color_balance_float (const StripColorBalance *cb, float *rect_float, const float *mask_rect_float, int width, int height, float mul)
static void colorBalance_init_data (SequenceModifierData *smd)
static void colorBalance_apply (const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

White Balance Modifier

static SequenceModifierTypeInfo seqModifier_WhiteBalance
static void whiteBalance_init_data (SequenceModifierData *smd)
static void whiteBalance_apply_threaded (int width, int height, uchar *rect, float *rect_float, uchar *mask_rect, const float *mask_rect_float, void *data_v)
static void whiteBalance_apply (const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Curves Modifier

static SequenceModifierTypeInfo seqModifier_Curves
static void curves_init_data (SequenceModifierData *smd)
static void curves_free_data (SequenceModifierData *smd)
static void curves_copy_data (SequenceModifierData *target, SequenceModifierData *smd)
static void curves_apply_threaded (int width, int height, uchar *rect, float *rect_float, uchar *mask_rect, const float *mask_rect_float, void *data_v)
static void curves_apply (const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Hue Correct Modifier

static SequenceModifierTypeInfo seqModifier_HueCorrect
static void hue_correct_init_data (SequenceModifierData *smd)
static void hue_correct_free_data (SequenceModifierData *smd)
static void hue_correct_copy_data (SequenceModifierData *target, SequenceModifierData *smd)
static void hue_correct_apply_threaded (int width, int height, uchar *rect, float *rect_float, uchar *mask_rect, const float *mask_rect_float, void *data_v)
static void hue_correct_apply (const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Brightness/Contrast Modifier

static SequenceModifierTypeInfo seqModifier_BrightContrast
static void brightcontrast_apply_threaded (int width, int height, uchar *rect, float *rect_float, uchar *mask_rect, const float *mask_rect_float, void *data_v)
static void brightcontrast_apply (const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Mask Modifier

static SequenceModifierTypeInfo seqModifier_Mask
static void maskmodifier_apply_threaded (int width, int height, uchar *rect, float *rect_float, uchar *mask_rect, const float *mask_rect_float, void *)
static void maskmodifier_apply (const StripScreenQuad &, SequenceModifierData *, ImBuf *ibuf, ImBuf *mask)

Tonemap Modifier

static SequenceModifierTypeInfo seqModifier_Tonemap
static SequenceModifierTypeInfo seqModifier_SoundEqualizer
static void tonemapmodifier_init_data (SequenceModifierData *smd)
static void pixels_to_scene_linear_float (ColorSpace *colorspace, float4 *pixels, int64_t count)
static void pixels_to_scene_linear_byte (ColorSpace *colorspace, const uchar *pixels, float4 *dst, int64_t count)
static void scene_linear_to_image_chunk_float (ImBuf *ibuf, IndexRange range)
static void scene_linear_to_image_chunk_byte (float4 *src, ImBuf *ibuf, IndexRange range)
static void tonemap_simple (float4 *scene_linear, ImBuf *mask, IndexRange range, const AvgLogLum &avg)
static void tonemap_rd_photoreceptor (float4 *scene_linear, ImBuf *mask, IndexRange range, const AvgLogLum &avg)
static bool is_point_inside_quad (const StripScreenQuad &quad, int x, int y)
static void tonemap_calc_chunk_luminance (const StripScreenQuad &quad, const bool all_pixels_inside_quad, const int width, const IndexRange y_range, const float4 *scene_linear, AreaLuminance &r_lum)
static AreaLuminance tonemap_calc_input_luminance (const StripScreenQuad &quad, const ImBuf *ibuf)
static void tonemapmodifier_apply (const StripScreenQuad &quad, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Macro Definition Documentation

◆ INIT_TYPE

#define INIT_TYPE ( typeName)
Value:
(modifiersTypes[seqModifierType_##typeName] = &seqModifier_##typeName)
static SequenceModifierTypeInfo * modifiersTypes[NUM_SEQUENCE_MODIFIER_TYPES]

Referenced by sequence_modifier_type_info_init().

Typedef Documentation

◆ modifier_apply_threaded_cb

Initial value:
void (*)(int width,
int height,
uchar *rect,
float *rect_float,
uchar *mask_rect,
const float *mask_rect_float,
void *data_v)
unsigned char uchar

Definition at line 54 of file sequencer/intern/modifier.cc.

Function Documentation

◆ brightcontrast_apply()

◆ brightcontrast_apply_threaded()

void brightcontrast_apply_threaded ( int width,
int height,
uchar * rect,
float * rect_float,
uchar * mask_rect,
const float * mask_rect_float,
void * data_v )
static

Definition at line 900 of file sequencer/intern/modifier.cc.

References b, data, float, max_ff(), unit_float_to_uchar_clamp, v, x, and y.

Referenced by brightcontrast_apply().

◆ calc_cb()

◆ calc_cb_lgg()

◆ calc_cb_sop()

◆ color_balance_byte()

void color_balance_byte ( const float cb_tab[3][CB_TABLE_SIZE],
uchar * rect,
const uchar * mask_rect,
int width,
int height )
static

◆ color_balance_float()

◆ color_balance_lgg()

float color_balance_lgg ( float in,
const float lift,
const float gain,
const float gamma,
const float mul )
static

Definition at line 302 of file sequencer/intern/modifier.cc.

References CLAMP, FLT_MAX, mul(), powf, and x.

Referenced by color_balance_float(), and make_cb_table_lgg().

◆ color_balance_sop()

float color_balance_sop ( float in,
const float slope,
const float offset,
const float power,
float mul )
static

Definition at line 318 of file sequencer/intern/modifier.cc.

References CLAMP, FLT_MAX, mul(), power(), powf, and x.

Referenced by color_balance_float(), and make_cb_table_sop().

◆ colorBalance_apply()

◆ colorBalance_init_data()

◆ curves_apply()

◆ curves_apply_threaded()

void curves_apply_threaded ( int width,
int height,
uchar * rect,
float * rect_float,
uchar * mask_rect,
const float * mask_rect_float,
void * data_v )
static

◆ curves_copy_data()

void curves_copy_data ( SequenceModifierData * target,
SequenceModifierData * smd )
static

◆ curves_free_data()

void curves_free_data ( SequenceModifierData * smd)
static

◆ curves_init_data()

void curves_init_data ( SequenceModifierData * smd)
static

◆ hue_correct_apply()

◆ hue_correct_apply_threaded()

void hue_correct_apply_threaded ( int width,
int height,
uchar * rect,
float * rect_float,
uchar * mask_rect,
const float * mask_rect_float,
void * data_v )
static

◆ hue_correct_copy_data()

void hue_correct_copy_data ( SequenceModifierData * target,
SequenceModifierData * smd )
static

◆ hue_correct_free_data()

void hue_correct_free_data ( SequenceModifierData * smd)
static

◆ hue_correct_init_data()

◆ is_point_inside_quad()

bool is_point_inside_quad ( const StripScreenQuad & quad,
int x,
int y )
static

◆ make_cb_table_lgg()

void make_cb_table_lgg ( float lift,
float gain,
float gamma,
float mul,
float r_table[CB_TABLE_SIZE] )
static

Definition at line 340 of file sequencer/intern/modifier.cc.

References CB_TABLE_SIZE, color_balance_lgg(), float, mul(), and x.

Referenced by colorBalance_apply().

◆ make_cb_table_sop()

void make_cb_table_sop ( float slope,
float offset,
float power,
float mul,
float r_table[CB_TABLE_SIZE] )
static

Definition at line 349 of file sequencer/intern/modifier.cc.

References CB_TABLE_SIZE, color_balance_sop(), float, mul(), power(), and x.

Referenced by colorBalance_apply().

◆ maskmodifier_apply()

void maskmodifier_apply ( const StripScreenQuad & ,
SequenceModifierData * ,
ImBuf * ibuf,
ImBuf * mask )
static

◆ maskmodifier_apply_threaded()

void maskmodifier_apply_threaded ( int width,
int height,
uchar * rect,
float * rect_float,
uchar * mask_rect,
const float * mask_rect_float,
void *  )
static

Definition at line 1005 of file sequencer/intern/modifier.cc.

References float, mask(), min_fff(), min_iii(), x, and y.

Referenced by maskmodifier_apply().

◆ modifier_apply_threaded()

void modifier_apply_threaded ( ImBuf * ibuf,
ImBuf * mask,
modifier_apply_threaded_cb apply_callback,
void * user_data )
static

◆ modifier_do_thread()

◆ modifier_init_handle()

◆ modifier_mask_get()

ImBuf * modifier_mask_get ( SequenceModifierData * smd,
const SeqRenderData * context,
int timeline_frame,
int fra_offset,
bool make_float )
static

◆ modifier_render_mask_input()

ImBuf * modifier_render_mask_input ( const SeqRenderData * context,
int mask_input_type,
Sequence * mask_sequence,
Mask * mask_id,
int timeline_frame,
int fra_offset,
bool make_float )
static

◆ pixels_to_scene_linear_byte()

void pixels_to_scene_linear_byte ( ColorSpace * colorspace,
const uchar * pixels,
float4 * dst,
int64_t count )
static

◆ pixels_to_scene_linear_float()

void pixels_to_scene_linear_float ( ColorSpace * colorspace,
float4 * pixels,
int64_t count )
static

◆ scene_linear_to_image_chunk_byte()

◆ scene_linear_to_image_chunk_float()

◆ SEQ_modifier_apply_stack()

◆ SEQ_modifier_blend_read_data()

◆ SEQ_modifier_blend_write()

◆ SEQ_modifier_clear()

void SEQ_modifier_clear ( Sequence * seq)

◆ SEQ_modifier_find_by_name()

SequenceModifierData * SEQ_modifier_find_by_name ( Sequence * seq,
const char * name )

◆ SEQ_modifier_free()

◆ SEQ_modifier_list_copy()

◆ SEQ_modifier_new()

◆ SEQ_modifier_remove()

bool SEQ_modifier_remove ( Sequence * seq,
SequenceModifierData * smd )

◆ SEQ_modifier_type_info_get()

◆ SEQ_modifier_unique_name()

◆ SEQ_sequence_supports_modifiers()

int SEQ_sequence_supports_modifiers ( Sequence * seq)

Definition at line 1612 of file sequencer/intern/modifier.cc.

References SEQ_TYPE_SOUND_RAM.

◆ sequence_modifier_type_info_init()

void sequence_modifier_type_info_init ( )
static

Definition at line 1417 of file sequencer/intern/modifier.cc.

References BrightContrast, and INIT_TYPE.

Referenced by SEQ_modifier_type_info_get().

◆ skip_modifier()

◆ tonemap_calc_chunk_luminance()

void tonemap_calc_chunk_luminance ( const StripScreenQuad & quad,
const bool all_pixels_inside_quad,
const int width,
const IndexRange y_range,
const float4 * scene_linear,
AreaLuminance & r_lum )
static

◆ tonemap_calc_input_luminance()

AreaLuminance tonemap_calc_input_luminance ( const StripScreenQuad & quad,
const ImBuf * ibuf )
static

◆ tonemap_rd_photoreceptor()

◆ tonemap_simple()

◆ tonemapmodifier_apply()

◆ tonemapmodifier_init_data()

◆ whiteBalance_apply()

void whiteBalance_apply ( const StripScreenQuad & ,
SequenceModifierData * smd,
ImBuf * ibuf,
ImBuf * mask )
static

◆ whiteBalance_apply_threaded()

void whiteBalance_apply_threaded ( int width,
int height,
uchar * rect,
float * rect_float,
uchar * mask_rect,
const float * mask_rect_float,
void * data_v )
static

◆ whiteBalance_init_data()

void whiteBalance_init_data ( SequenceModifierData * smd)
static

Variable Documentation

◆ CB_TABLE_SIZE

int CB_TABLE_SIZE = 1024
staticconstexpr

Use a larger lookup table than 256 possible byte values: due to alpha pre-multiplication, dark values with low alphas might need more precision.

Definition at line 338 of file sequencer/intern/modifier.cc.

Referenced by color_balance_byte(), colorBalance_apply(), make_cb_table_lgg(), and make_cb_table_sop().

◆ modifiersTypes

Definition at line 47 of file sequencer/intern/modifier.cc.

Referenced by SEQ_modifier_type_info_get().

◆ modifierTypesInit

bool modifierTypesInit = false
static

Definition at line 48 of file sequencer/intern/modifier.cc.

Referenced by SEQ_modifier_type_info_get().

◆ seqModifier_BrightContrast

SequenceModifierTypeInfo seqModifier_BrightContrast
static
Initial value:
= {
CTX_N_(BLT_I18NCONTEXT_ID_SEQUENCE, "Brightness/Contrast"),
"BrightContrastModifierData",
nullptr,
nullptr,
nullptr,
}
#define CTX_N_(context, msgid)
#define BLT_I18NCONTEXT_ID_SEQUENCE
static void brightcontrast_apply(const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Definition at line 989 of file sequencer/intern/modifier.cc.

◆ seqModifier_ColorBalance

SequenceModifierTypeInfo seqModifier_ColorBalance
static
Initial value:
= {
"ColorBalanceModifierData",
nullptr,
nullptr,
}
static void colorBalance_apply(const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
static void colorBalance_init_data(SequenceModifierData *smd)

Definition at line 532 of file sequencer/intern/modifier.cc.

◆ seqModifier_Curves

SequenceModifierTypeInfo seqModifier_Curves
static
Initial value:
= {
"CurvesModifierData",
}
static void curves_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
static void curves_init_data(ID *id)
static void curves_free_data(ID *id)
static void curves_apply(const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Definition at line 752 of file sequencer/intern/modifier.cc.

◆ seqModifier_HueCorrect

SequenceModifierTypeInfo seqModifier_HueCorrect
static
Initial value:
= {
"HueCorrectModifierData",
}
static void hue_correct_apply(const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
static void hue_correct_free_data(SequenceModifierData *smd)
static void hue_correct_init_data(SequenceModifierData *smd)
static void hue_correct_copy_data(SequenceModifierData *target, SequenceModifierData *smd)

Definition at line 879 of file sequencer/intern/modifier.cc.

◆ seqModifier_Mask

SequenceModifierTypeInfo seqModifier_Mask
static
Initial value:
= {
"SequencerMaskModifierData",
nullptr,
nullptr,
nullptr,
}
static void maskmodifier_apply(const StripScreenQuad &, SequenceModifierData *, ImBuf *ibuf, ImBuf *mask)

Definition at line 1065 of file sequencer/intern/modifier.cc.

◆ seqModifier_SoundEqualizer

SequenceModifierTypeInfo seqModifier_SoundEqualizer
static
Initial value:
= {
"SoundEqualizerModifierData",
nullptr,
}
void SEQ_sound_equalizermodifier_free(SequenceModifierData *smd)
void SEQ_sound_equalizermodifier_init_data(SequenceModifierData *smd)
void SEQ_sound_equalizermodifier_copy_data(SequenceModifierData *target, SequenceModifierData *smd)

Definition at line 1402 of file sequencer/intern/modifier.cc.

◆ seqModifier_Tonemap

SequenceModifierTypeInfo seqModifier_Tonemap
static
Initial value:
= {
"SequencerTonemapModifierData",
nullptr,
nullptr,
}
static void tonemapmodifier_init_data(SequenceModifierData *smd)
static void tonemapmodifier_apply(const StripScreenQuad &quad, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Definition at line 1392 of file sequencer/intern/modifier.cc.

◆ seqModifier_WhiteBalance

SequenceModifierTypeInfo seqModifier_WhiteBalance
static
Initial value:
= {
"WhiteBalanceModifierData",
nullptr,
nullptr,
}
static void whiteBalance_apply(const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
static void whiteBalance_init_data(SequenceModifierData *smd)

Definition at line 631 of file sequencer/intern/modifier.cc.