@@ -20,6 +20,7 @@ struct dynamic_delay_info {
20
20
obs_hotkey_id backward_slow_hotkey ;
21
21
obs_hotkey_id backward_fast_hotkey ;
22
22
obs_hotkey_id pause_hotkey ;
23
+ bool hotkeys_loaded ;
23
24
double max_duration ;
24
25
double speed ;
25
26
double start_speed ;
@@ -90,7 +91,11 @@ static void dynamic_delay_destroy(void *data)
90
91
static void dynamic_delay_update (void * data , obs_data_t * settings )
91
92
{
92
93
struct dynamic_delay_info * d = data ;
93
- d -> max_duration = obs_data_get_double (settings , S_DURATION );
94
+ double duration = obs_data_get_double (settings , S_DURATION );
95
+ if (duration < d -> max_duration ) {
96
+ free_textures (d );
97
+ }
98
+ d -> max_duration = duration ;
94
99
d -> easing = obs_data_get_int (settings , S_EASING );
95
100
d -> easing_max_duration =
96
101
(float )obs_data_get_double (settings , S_EASING_DURATION );
@@ -105,7 +110,7 @@ static void dynamic_delay_update(void *data, obs_data_t *settings)
105
110
}
106
111
107
112
void dynamic_delay_skip_begin_hotkey (void * data , obs_hotkey_id id ,
108
- obs_hotkey_t * hotkey , bool pressed )
113
+ obs_hotkey_t * hotkey , bool pressed )
109
114
{
110
115
if (!pressed )
111
116
return ;
@@ -119,7 +124,7 @@ void dynamic_delay_skip_begin_hotkey(void *data, obs_hotkey_id id,
119
124
}
120
125
121
126
void dynamic_delay_skip_end_hotkey (void * data , obs_hotkey_id id ,
122
- obs_hotkey_t * hotkey , bool pressed )
127
+ obs_hotkey_t * hotkey , bool pressed )
123
128
{
124
129
if (!pressed )
125
130
return ;
@@ -166,7 +171,7 @@ void dynamic_delay_fast_forward_hotkey(void *data, obs_hotkey_id id,
166
171
}
167
172
168
173
void dynamic_delay_slow_backward_hotkey (void * data , obs_hotkey_id id ,
169
- obs_hotkey_t * hotkey , bool pressed )
174
+ obs_hotkey_t * hotkey , bool pressed )
170
175
{
171
176
if (!pressed )
172
177
return ;
@@ -177,18 +182,18 @@ void dynamic_delay_slow_backward_hotkey(void *data, obs_hotkey_id id,
177
182
}
178
183
179
184
void dynamic_delay_backward_hotkey (void * data , obs_hotkey_id id ,
180
- obs_hotkey_t * hotkey , bool pressed )
185
+ obs_hotkey_t * hotkey , bool pressed )
181
186
{
182
187
if (!pressed )
183
188
return ;
184
189
struct dynamic_delay_info * d = data ;
185
190
d -> start_speed = d -> speed ;
186
- d -> target_speed = 1.0 ;
191
+ d -> target_speed = - 1.0 ;
187
192
d -> easing_started = 0 ;
188
193
}
189
194
190
195
void dynamic_delay_fast_backward_hotkey (void * data , obs_hotkey_id id ,
191
- obs_hotkey_t * hotkey , bool pressed )
196
+ obs_hotkey_t * hotkey , bool pressed )
192
197
{
193
198
if (!pressed )
194
199
return ;
@@ -199,7 +204,7 @@ void dynamic_delay_fast_backward_hotkey(void *data, obs_hotkey_id id,
199
204
}
200
205
201
206
void dynamic_delay_pause_hotkey (void * data , obs_hotkey_id id ,
202
- obs_hotkey_t * hotkey , bool pressed )
207
+ obs_hotkey_t * hotkey , bool pressed )
203
208
{
204
209
if (!pressed )
205
210
return ;
@@ -209,7 +214,7 @@ void dynamic_delay_pause_hotkey(void *data, obs_hotkey_id id,
209
214
d -> easing_started = 0 ;
210
215
}
211
216
212
- static void dynamic_delay_load (void * data , obs_data_t * settings )
217
+ static void dynamic_delay_load_hotkeys (void * data )
213
218
{
214
219
struct dynamic_delay_info * d = data ;
215
220
obs_source_t * parent = obs_filter_get_parent (d -> source );
@@ -233,16 +238,23 @@ static void dynamic_delay_load(void *data, obs_data_t *settings)
233
238
parent , "backward" , obs_module_text ("Backward" ),
234
239
dynamic_delay_backward_hotkey , data );
235
240
d -> backward_slow_hotkey = obs_hotkey_register_source (
236
- parent , "slow_backward" , obs_module_text ("SlowBackward" ),
241
+ parent , "slow_backward" ,
242
+ obs_module_text ("SlowBackward" ),
237
243
dynamic_delay_slow_backward_hotkey , data );
238
244
d -> backward_fast_hotkey = obs_hotkey_register_source (
239
- parent , "fast_backward" , obs_module_text ("FastBackward" ),
245
+ parent , "fast_backward" ,
246
+ obs_module_text ("FastBackward" ),
240
247
dynamic_delay_fast_backward_hotkey , data );
241
248
d -> pause_hotkey = obs_hotkey_register_source (
242
- parent , "pause" ,
243
- obs_module_text ("Pause" ),
249
+ parent , "pause" , obs_module_text ("Pause" ),
244
250
dynamic_delay_pause_hotkey , data );
251
+ d -> hotkeys_loaded = true;
245
252
}
253
+ }
254
+
255
+ static void dynamic_delay_load (void * data , obs_data_t * settings )
256
+ {
257
+ dynamic_delay_load_hotkeys (data );
246
258
dynamic_delay_update (data , settings );
247
259
}
248
260
@@ -350,7 +362,7 @@ static obs_properties_t *dynamic_delay_properties(void *data)
350
362
{
351
363
obs_properties_t * ppts = obs_properties_create ();
352
364
obs_property_t * p = obs_properties_add_float (
353
- ppts , S_DURATION , obs_module_text ("Duration" ), 0.0 , 1000 , 1.0 );
365
+ ppts , S_DURATION , obs_module_text ("Duration" ), 0.0 , 100.0 , 1.0 );
354
366
obs_property_float_set_suffix (p , "s" );
355
367
356
368
p = obs_properties_add_list (ppts , S_EASING , obs_module_text ("Easing" ),
@@ -383,7 +395,7 @@ static obs_properties_t *dynamic_delay_properties(void *data)
383
395
384
396
p = obs_properties_add_float (ppts , S_EASING_DURATION ,
385
397
obs_module_text ("EasingDuration" ), 0.0 ,
386
- 100 , 1.0 );
398
+ 10.0 , 1.0 );
387
399
obs_property_float_set_suffix (p , "s" );
388
400
389
401
p = obs_properties_add_float_slider (ppts , S_SLOW_FORWARD ,
@@ -445,6 +457,8 @@ static inline void check_size(struct dynamic_delay_info *d)
445
457
static void dynamic_delay_tick (void * data , float t )
446
458
{
447
459
struct dynamic_delay_info * d = data ;
460
+ if (!d -> hotkeys_loaded )
461
+ dynamic_delay_load_hotkeys (data );
448
462
d -> processed_frame = false;
449
463
if (d -> speed != d -> target_speed ) {
450
464
const uint64_t ts = obs_get_video_frame_time ();
0 commit comments