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)   (modifiersTypes[seqModifierType_##typeName] = &seqModifier_##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)    (modifiersTypes[seqModifierType_##typeName] = &seqModifier_##typeName)

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()

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

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

References b, 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()

static 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()

static 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()

static 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()

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

◆ curves_copy_data()

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

◆ curves_free_data()

static void curves_free_data ( SequenceModifierData * smd)
static

◆ curves_init_data()

static void curves_init_data ( SequenceModifierData * smd)
static

◆ hue_correct_apply()

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

◆ hue_correct_apply_threaded()

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

◆ hue_correct_copy_data()

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

◆ hue_correct_free_data()

static void hue_correct_free_data ( SequenceModifierData * smd)
static

◆ hue_correct_init_data()

◆ is_point_inside_quad()

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

◆ make_cb_table_lgg()

static 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, and mul().

Referenced by colorBalance_apply().

◆ make_cb_table_sop()

static 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(), and power().

Referenced by colorBalance_apply().

◆ maskmodifier_apply()

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

◆ maskmodifier_apply_threaded()

static 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()

◆ modifier_do_thread()

◆ modifier_init_handle()

static void modifier_init_handle ( void * handle_v,
int start_line,
int tot_line,
void * init_data_v )
static

◆ modifier_mask_get()

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

◆ modifier_render_mask_input()

static 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()

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

◆ pixels_to_scene_linear_float()

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

◆ scene_linear_to_image_chunk_byte()

static void scene_linear_to_image_chunk_byte ( float4 * src,
ImBuf * ibuf,
IndexRange range )
static

◆ scene_linear_to_image_chunk_float()

static void scene_linear_to_image_chunk_float ( ImBuf * ibuf,
IndexRange range )
static

◆ SEQ_modifier_apply_stack()

◆ SEQ_modifier_blend_read_data()

◆ SEQ_modifier_blend_write()

◆ SEQ_modifier_clear()

◆ 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, and Sequence::type.

◆ sequence_modifier_type_info_init()

static void sequence_modifier_type_info_init ( )
static

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

References INIT_TYPE.

Referenced by SEQ_modifier_type_info_get().

◆ skip_modifier()

◆ tonemap_calc_chunk_luminance()

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

◆ tonemap_calc_input_luminance()

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

◆ tonemap_rd_photoreceptor()

◆ tonemap_simple()

◆ tonemapmodifier_apply()

◆ tonemapmodifier_init_data()

◆ whiteBalance_apply()

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

◆ whiteBalance_apply_threaded()

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

◆ whiteBalance_init_data()

static 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
struct BrightContrastModifierData BrightContrastModifierData
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,
}
struct ColorBalanceModifierData ColorBalanceModifierData
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",
}
struct CurvesModifierData CurvesModifierData
static void curves_copy_data(SequenceModifierData *target, SequenceModifierData *smd)
static void curves_free_data(SequenceModifierData *smd)
static void curves_apply(const StripScreenQuad &, SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
static void curves_init_data(SequenceModifierData *smd)

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

◆ seqModifier_HueCorrect

SequenceModifierTypeInfo seqModifier_HueCorrect
static
Initial value:
= {
"HueCorrectModifierData",
}
struct HueCorrectModifierData 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,
}
struct SequencerMaskModifierData SequencerMaskModifierData
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,
}
struct SoundEqualizerModifierData SoundEqualizerModifierData
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,
}
struct SequencerTonemapModifierData SequencerTonemapModifierData
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,
}
struct WhiteBalanceModifierData WhiteBalanceModifierData
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.