Blender  V3.3
Classes | Macros | Variables
sequencer/intern/modifier.c File Reference
#include <stddef.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_string.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "DNA_mask_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "BKE_colortools.h"
#include "IMB_colormanagement.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "SEQ_modifier.h"
#include "SEQ_render.h"
#include "BLO_read_write.h"
#include "render.h"

Go to the source code of this file.

Classes

struct  ModifierInitData
 
struct  ModifierThread
 
struct  ColorBalanceInitData
 
struct  ColorBalanceThread
 
struct  WhiteBalanceThreadData
 
struct  BrightContrastThreadData
 
struct  AvgLogLum
 

Macros

#define INIT_TYPE(typeName)   (modifiersTypes[seqModifierType_##typeName] = &seqModifier_##typeName)
 

Functions

Public Modifier Functions
static void sequence_modifier_type_info_init (void)
 
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)
 
ImBufSEQ_modifier_apply_stack (const SeqRenderData *context, 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)
 
void SEQ_modifier_blend_read_lib (BlendLibReader *reader, Scene *scene, ListBase *lb)
 

Variables

static SequenceModifierTypeInfomodifiersTypes [NUM_SEQUENCE_MODIFIER_TYPES]
 
static bool modifierTypesInit = false
 

Modifier Multi-Threading Utilities

typedef void(* modifier_apply_threaded_cb) (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
typedef struct ModifierInitData ModifierInitData
 
typedef struct ModifierThread ModifierThread
 
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 voidmodifier_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

typedef struct ColorBalanceInitData ColorBalanceInitData
 
typedef struct ColorBalanceThread ColorBalanceThread
 
static SequenceModifierTypeInfo seqModifier_ColorBalance
 
static StripColorBalance calc_cb_lgg (StripColorBalance *cb_)
 
static StripColorBalance calc_cb_sop (StripColorBalance *cb_)
 
static StripColorBalance calc_cb (StripColorBalance *cb_)
 
MINLINE float color_balance_fl_lgg (float in, const float lift, const float gain, const float gamma, const float mul)
 
MINLINE float color_balance_fl_sop (float in, const float slope, const float offset, const float power, const float pivot, float mul)
 
static void make_cb_table_float_lgg (float lift, float gain, float gamma, float *table, float mul)
 
static void make_cb_table_float_sop (float slope, float offset, float power, float pivot, float *table, float mul)
 
static void color_balance_byte_byte (StripColorBalance *cb_, unsigned char *rect, unsigned char *mask_rect, int width, int height, float mul)
 
static void color_balance_byte_float (StripColorBalance *cb_, unsigned char *rect, float *rect_float, unsigned char *mask_rect, int width, int height, float mul)
 
static void color_balance_float_float (StripColorBalance *cb_, float *rect_float, const float *mask_rect_float, int width, int height, float mul)
 
static void color_balance_init_handle (void *handle_v, int start_line, int tot_line, void *init_data_v)
 
static voidcolor_balance_do_thread (void *thread_data_v)
 
static void colorBalance_init_data (SequenceModifierData *smd)
 
static void modifier_color_balance_apply (StripColorBalance *cb, ImBuf *ibuf, float mul, bool make_float, ImBuf *mask_input)
 
static void colorBalance_apply (SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 

White Balance Modifier

typedef struct WhiteBalanceThreadData WhiteBalanceThreadData
 
static SequenceModifierTypeInfo seqModifier_WhiteBalance
 
static void whiteBalance_init_data (SequenceModifierData *smd)
 
static void whiteBalance_apply_threaded (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
static void whiteBalance_apply (SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 

Bright/Contrast Modifier

typedef struct BrightContrastThreadData BrightContrastThreadData
 
static SequenceModifierTypeInfo seqModifier_BrightContrast
 
static void brightcontrast_apply_threaded (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
static void brightcontrast_apply (struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 

Tonemap Modifier

typedef struct AvgLogLum AvgLogLum
 
static SequenceModifierTypeInfo seqModifier_Tonemap
 
static void tonemapmodifier_init_data (SequenceModifierData *smd)
 
static void tonemapmodifier_apply_threaded_simple (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
static void tonemapmodifier_apply_threaded_photoreceptor (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
static void tonemapmodifier_apply (struct 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, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
static void curves_apply (struct 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, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)
 
static void hue_correct_apply (struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
 

Mask Modifier

static SequenceModifierTypeInfo seqModifier_Mask
 
static void maskmodifier_apply_threaded (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *UNUSED(data_v))
 
static void maskmodifier_apply (struct SequenceModifierData *UNUSED(smd), ImBuf *ibuf, ImBuf *mask)
 

Macro Definition Documentation

◆ INIT_TYPE

#define INIT_TYPE (   typeName)    (modifiersTypes[seqModifierType_##typeName] = &seqModifier_##typeName)

Typedef Documentation

◆ AvgLogLum

typedef struct AvgLogLum AvgLogLum

◆ BrightContrastThreadData

◆ ColorBalanceInitData

◆ ColorBalanceThread

◆ modifier_apply_threaded_cb

typedef void(* modifier_apply_threaded_cb) (int width, int height, unsigned char *rect, float *rect_float, unsigned char *mask_rect, const float *mask_rect_float, void *data_v)

Definition at line 45 of file sequencer/intern/modifier.c.

◆ ModifierInitData

◆ ModifierThread

◆ WhiteBalanceThreadData

Function Documentation

◆ brightcontrast_apply()

static void brightcontrast_apply ( struct SequenceModifierData smd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ brightcontrast_apply_threaded()

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

◆ calc_cb()

static StripColorBalance calc_cb ( StripColorBalance cb_)
static

◆ calc_cb_lgg()

static StripColorBalance calc_cb_lgg ( StripColorBalance cb_)
static

◆ calc_cb_sop()

static StripColorBalance calc_cb_sop ( StripColorBalance cb_)
static

◆ color_balance_byte_byte()

static void color_balance_byte_byte ( StripColorBalance cb_,
unsigned char *  rect,
unsigned char *  mask_rect,
int  width,
int  height,
float  mul 
)
static

◆ color_balance_byte_float()

static void color_balance_byte_float ( StripColorBalance cb_,
unsigned char *  rect,
float rect_float,
unsigned char *  mask_rect,
int  width,
int  height,
float  mul 
)
static

◆ color_balance_do_thread()

static void* color_balance_do_thread ( void thread_data_v)
static

◆ color_balance_fl_lgg()

MINLINE float color_balance_fl_lgg ( float  in,
const float  lift,
const float  gain,
const float  gamma,
const float  mul 
)

◆ color_balance_fl_sop()

MINLINE float color_balance_fl_sop ( float  in,
const float  slope,
const float  offset,
const float  power,
const float  pivot,
float  mul 
)

◆ color_balance_float_float()

static void color_balance_float_float ( StripColorBalance cb_,
float rect_float,
const float mask_rect_float,
int  width,
int  height,
float  mul 
)
static

◆ color_balance_init_handle()

static void color_balance_init_handle ( void handle_v,
int  start_line,
int  tot_line,
void init_data_v 
)
static

◆ colorBalance_apply()

static void colorBalance_apply ( SequenceModifierData smd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ colorBalance_init_data()

static void colorBalance_init_data ( SequenceModifierData smd)
static

◆ curves_apply()

static void curves_apply ( struct SequenceModifierData smd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ curves_apply_threaded()

static void curves_apply_threaded ( int  width,
int  height,
unsigned char *  rect,
float rect_float,
unsigned char *  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 ( struct SequenceModifierData smd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ hue_correct_apply_threaded()

static void hue_correct_apply_threaded ( int  width,
int  height,
unsigned char *  rect,
float rect_float,
unsigned char *  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()

static void hue_correct_init_data ( SequenceModifierData smd)
static

◆ make_cb_table_float_lgg()

static void make_cb_table_float_lgg ( float  lift,
float  gain,
float  gamma,
float table,
float  mul 
)
static

Definition at line 329 of file sequencer/intern/modifier.c.

References color_balance_fl_lgg(), mul(), v, and y.

Referenced by color_balance_byte_float().

◆ make_cb_table_float_sop()

static void make_cb_table_float_sop ( float  slope,
float  offset,
float  power,
float  pivot,
float table,
float  mul 
)
static

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

References color_balance_fl_sop(), mul(), offset, v, and y.

Referenced by color_balance_byte_float().

◆ maskmodifier_apply()

static void maskmodifier_apply ( struct SequenceModifierData UNUSEDsmd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ maskmodifier_apply_threaded()

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

Definition at line 1093 of file sequencer/intern/modifier.c.

References Freestyle::c, float(), height, mask(), min_fff(), min_iii(), width, x, and y.

Referenced by maskmodifier_apply().

◆ modifier_apply_threaded()

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

◆ modifier_color_balance_apply()

static void modifier_color_balance_apply ( StripColorBalance cb,
ImBuf ibuf,
float  mul,
bool  make_float,
ImBuf mask_input 
)
static

◆ modifier_do_thread()

static void* modifier_do_thread ( void thread_data_v)
static

◆ 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

◆ SEQ_modifier_apply_stack()

ImBuf* SEQ_modifier_apply_stack ( const SeqRenderData context,
Sequence seq,
ImBuf ibuf,
int  timeline_frame 
)

◆ SEQ_modifier_blend_read_data()

void SEQ_modifier_blend_read_data ( BlendDataReader reader,
ListBase lb 
)

◆ SEQ_modifier_blend_read_lib()

void SEQ_modifier_blend_read_lib ( BlendLibReader reader,
Scene scene,
ListBase lb 
)

Definition at line 1622 of file sequencer/intern/modifier.c.

References BLO_read_id_address, Scene::id, ID::lib, LISTBASE_FOREACH, and scene.

Referenced by seq_read_lib_cb().

◆ SEQ_modifier_blend_write()

void SEQ_modifier_blend_write ( BlendWriter writer,
ListBase modbase 
)

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

void SEQ_modifier_free ( SequenceModifierData smd)

◆ SEQ_modifier_list_copy()

void SEQ_modifier_list_copy ( Sequence seqn,
Sequence seq 
)

◆ SEQ_modifier_new()

SequenceModifierData* SEQ_modifier_new ( Sequence seq,
const char *  name,
int  type 
)

◆ SEQ_modifier_remove()

bool SEQ_modifier_remove ( Sequence seq,
SequenceModifierData smd 
)

◆ SEQ_modifier_type_info_get()

const SequenceModifierTypeInfo* SEQ_modifier_type_info_get ( int  type)

◆ SEQ_modifier_unique_name()

void SEQ_modifier_unique_name ( Sequence seq,
SequenceModifierData smd 
)

◆ SEQ_sequence_supports_modifiers()

int SEQ_sequence_supports_modifiers ( Sequence seq)

◆ sequence_modifier_type_info_init()

static void sequence_modifier_type_info_init ( void  )
static

Definition at line 1383 of file sequencer/intern/modifier.c.

References BrightContrast, and INIT_TYPE.

Referenced by SEQ_modifier_type_info_get().

◆ tonemapmodifier_apply()

static void tonemapmodifier_apply ( struct SequenceModifierData smd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ tonemapmodifier_apply_threaded_photoreceptor()

static void tonemapmodifier_apply_threaded_photoreceptor ( int  width,
int  height,
unsigned char *  rect,
float rect_float,
unsigned char *  mask_rect,
const float mask_rect_float,
void data_v 
)
static

◆ tonemapmodifier_apply_threaded_simple()

static void tonemapmodifier_apply_threaded_simple ( int  width,
int  height,
unsigned char *  rect,
float rect_float,
unsigned char *  mask_rect,
const float mask_rect_float,
void data_v 
)
static

◆ tonemapmodifier_init_data()

static void tonemapmodifier_init_data ( SequenceModifierData smd)
static

◆ whiteBalance_apply()

static void whiteBalance_apply ( SequenceModifierData smd,
ImBuf ibuf,
ImBuf mask 
)
static

◆ whiteBalance_apply_threaded()

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

◆ whiteBalance_init_data()

static void whiteBalance_init_data ( SequenceModifierData smd)
static

Variable Documentation

◆ modifiersTypes

Definition at line 38 of file sequencer/intern/modifier.c.

Referenced by SEQ_modifier_type_info_get().

◆ modifierTypesInit

bool modifierTypesInit = false
static

Definition at line 39 of file sequencer/intern/modifier.c.

Referenced by SEQ_modifier_type_info_get().

◆ seqModifier_BrightContrast

SequenceModifierTypeInfo seqModifier_BrightContrast
static
Initial value:
= {
CTX_N_(BLT_I18NCONTEXT_ID_SEQUENCE, "Bright/Contrast"),
"BrightContrastModifierData",
NULL,
NULL,
NULL,
}
#define CTX_N_(context, msgid)
#define BLT_I18NCONTEXT_ID_SEQUENCE
struct BrightContrastModifierData BrightContrastModifierData
static void brightcontrast_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Definition at line 1077 of file sequencer/intern/modifier.c.

◆ seqModifier_ColorBalance

SequenceModifierTypeInfo seqModifier_ColorBalance
static
Initial value:
= {
CTX_N_(BLT_I18NCONTEXT_ID_SEQUENCE, "Color Balance"),
"ColorBalanceModifierData",
NULL,
NULL,
}
struct ColorBalanceModifierData ColorBalanceModifierData
static void colorBalance_init_data(SequenceModifierData *smd)
static void colorBalance_apply(SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Definition at line 632 of file sequencer/intern/modifier.c.

◆ seqModifier_Curves

SequenceModifierTypeInfo seqModifier_Curves
static
Initial value:
= {
"CurvesModifierData",
}
struct CurvesModifierData CurvesModifierData
static void curves_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
static void curves_copy_data(SequenceModifierData *target, SequenceModifierData *smd)
static void curves_free_data(SequenceModifierData *smd)
static void curves_init_data(SequenceModifierData *smd)

Definition at line 846 of file sequencer/intern/modifier.c.

◆ seqModifier_HueCorrect

SequenceModifierTypeInfo seqModifier_HueCorrect
static
Initial value:
= {
"HueCorrectModifierData",
}
struct HueCorrectModifierData HueCorrectModifierData
static void hue_correct_apply(struct 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 970 of file sequencer/intern/modifier.c.

◆ seqModifier_Mask

SequenceModifierTypeInfo seqModifier_Mask
static
Initial value:
= {
"SequencerMaskModifierData",
NULL,
NULL,
NULL,
}
struct SequencerMaskModifierData SequencerMaskModifierData
static void maskmodifier_apply(struct SequenceModifierData *UNUSED(smd), ImBuf *ibuf, ImBuf *mask)

Definition at line 1151 of file sequencer/intern/modifier.c.

◆ seqModifier_Tonemap

SequenceModifierTypeInfo seqModifier_Tonemap
static
Initial value:
= {
"SequencerTonemapModifierData",
NULL,
NULL,
}
struct SequencerTonemapModifierData SequencerTonemapModifierData
static void tonemapmodifier_init_data(SequenceModifierData *smd)
static void tonemapmodifier_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)

Definition at line 1367 of file sequencer/intern/modifier.c.

◆ seqModifier_WhiteBalance

SequenceModifierTypeInfo seqModifier_WhiteBalance
static
Initial value:
= {
CTX_N_(BLT_I18NCONTEXT_ID_SEQUENCE, "White Balance"),
"WhiteBalanceModifierData",
NULL,
NULL,
}
struct WhiteBalanceModifierData WhiteBalanceModifierData
static void whiteBalance_apply(SequenceModifierData *smd, ImBuf *ibuf, ImBuf *mask)
static void whiteBalance_init_data(SequenceModifierData *smd)

Definition at line 728 of file sequencer/intern/modifier.c.