[Bf-blender-cvs] [90e94068669] master: VSE: Add Update scene frame range operator

2023-01-29 Thread Richard Antalik
Commit: 90e940686692060dfa2de55d1391970c1b99003f
Author: Richard Antalik
Date:   Mon Jan 30 07:47:29 2023 +0100
Branches: master
https://developer.blender.org/rB90e940686692060dfa2de55d1391970c1b99003f

VSE: Add Update scene frame range operator

This operator updates scene strip internal length to reflect target
scene length. Previously scene strip had to be deleted and added from
scratch. Scene strip length in timeline will not be changed.

===

M   release/scripts/startup/bl_ui/space_sequencer.py
M   source/blender/editors/space_sequencer/sequencer_edit.c
M   source/blender/editors/space_sequencer/sequencer_intern.h
M   source/blender/editors/space_sequencer/sequencer_ops.c

===

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py 
b/release/scripts/startup/bl_ui/space_sequencer.py
index c605ed5f835..dfe73356bcd 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -946,6 +946,7 @@ class SEQUENCER_MT_strip(Menu):
 
 if strip and strip.type == 'SCENE':
 layout.operator("sequencer.delete", text="Delete Strip & 
Data").delete_data = True
+layout.operator("sequencer.scene_frame_range_update")
 
 if has_sequencer:
 if strip:
@@ -1068,6 +1069,7 @@ class SEQUENCER_MT_context_menu(Menu):
 strip = context.active_sequence_strip
 if strip and strip.type == 'SCENE':
 layout.operator("sequencer.delete", text="Delete Strip & 
Data").delete_data = True
+layout.operator("sequencer.scene_frame_range_update")
 
 layout.separator()
 
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c 
b/source/blender/editors/space_sequencer/sequencer_edit.c
index 3865aee8327..ac6fd73e99c 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -3565,3 +3565,51 @@ void SEQUENCER_OT_cursor_set(wmOperatorType *ot)
 }
 
 /** \} */
+
+/*  */
+/** \name Update scene strip frame range
+ * \{ */
+
+static int sequencer_scene_frame_range_update_exec(bContext *C, wmOperator *op)
+{
+  Scene *scene = CTX_data_scene(C);
+  Editing *ed = SEQ_editing_get(scene);
+  Sequence *seq = ed->act_seq;
+
+  const int old_start = SEQ_time_left_handle_frame_get(scene, seq);
+  const int old_end = SEQ_time_right_handle_frame_get(scene, seq);
+
+  Scene *target_scene = seq->scene;
+
+  seq->len = target_scene->r.efra - target_scene->r.sfra + 1;
+  SEQ_time_left_handle_frame_set(scene, seq, old_start);
+  SEQ_time_right_handle_frame_set(scene, seq, old_end);
+
+  SEQ_relations_invalidate_cache_raw(scene, seq);
+  DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO | ID_RECALC_SEQUENCER_STRIPS);
+  WM_event_add_notifier(C, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
+  return OPERATOR_FINISHED;
+}
+
+static bool sequencer_scene_frame_range_update_poll(bContext *C)
+{
+  Editing *ed = SEQ_editing_get(CTX_data_scene(C));
+  return (ed->act_seq != NULL && (ed->act_seq->type & SEQ_TYPE_SCENE) != 0);
+}
+
+void SEQUENCER_OT_scene_frame_range_update(wmOperatorType *ot)
+{
+  /* identifiers */
+  ot->name = "Update Scene Frame Range";
+  ot->description = "Update frame range of scene strip";
+  ot->idname = "SEQUENCER_OT_scene_frame_range_update";
+
+  /* api callbacks */
+  ot->exec = sequencer_scene_frame_range_update_exec;
+  ot->poll = sequencer_scene_frame_range_update_poll;
+
+  /* flags */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h 
b/source/blender/editors/space_sequencer/sequencer_intern.h
index 644e897f631..c6bc2bf7dec 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -216,6 +216,7 @@ void SEQUENCER_OT_strip_transform_fit(struct wmOperatorType 
*ot);
 
 void SEQUENCER_OT_strip_color_tag_set(struct wmOperatorType *ot);
 void SEQUENCER_OT_cursor_set(struct wmOperatorType *ot);
+void SEQUENCER_OT_scene_frame_range_update(struct wmOperatorType *ot);
 
 /* sequencer_select.c */
 
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c 
b/source/blender/editors/space_sequencer/sequencer_ops.c
index f7a9bcf41e6..e0e2cfa42cc 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -66,6 +66,7 @@ void sequencer_operatortypes(void)
 
   WM_operatortype_append(SEQUENCER_OT_strip_color_tag_set);
   WM_operatortype_append(SEQUENCER_OT_cursor_set);
+  WM_operatortype_append(SE

[Bf-blender-cvs] [ad146bd17a8] master: Fix T103852: Muting timeline channel does not update image

2023-01-29 Thread Richard Antalik
Commit: ad146bd17a813fd1c40f83876141571ca221642a
Author: Richard Antalik
Date:   Mon Jan 30 06:45:39 2023 +0100
Branches: master
https://developer.blender.org/rBad146bd17a813fd1c40f83876141571ca221642a

Fix T103852: Muting timeline channel does not update image

Add RNA update function to invalidate cache for all strips in channel.

===

M   source/blender/makesrna/intern/rna_sequencer.c

===

diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index 7dd13324f88..868fc98db40 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -1416,6 +1416,28 @@ static void 
rna_SequenceTimelineChannel_name_set(PointerRNA *ptr, const char *va
  sizeof(channel->name));
 }
 
+static void rna_SequenceTimelineChannel_mute_update(Main *bmain,
+Scene 
*UNUSED(active_scene),
+PointerRNA *ptr)
+{
+  Scene *scene = (Scene *)ptr->owner_id;
+  Editing *ed = SEQ_editing_get(scene);
+  SeqTimelineChannel *channel = (SeqTimelineChannel *)ptr;
+
+  Sequence *channel_owner = rna_SeqTimelineChannel_owner_get(ed, channel);
+  ListBase *seqbase;
+  if (channel_owner == NULL) {
+seqbase = &ed->seqbase;
+  }
+  else {
+seqbase = &channel_owner->seqbase;
+  }
+
+  LISTBASE_FOREACH (Sequence *, seq, seqbase) {
+SEQ_relations_invalidate_cache_composite(scene, seq);
+  }
+}
+
 static char *rna_SeqTimelineChannel_path(const PointerRNA *ptr)
 {
   Scene *scene = (Scene *)ptr->owner_id;
@@ -2165,7 +2187,8 @@ static void rna_def_channel(BlenderRNA *brna)
   prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_CHANNEL_MUTE);
   RNA_def_property_ui_text(prop, "Mute channel", "");
-  RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, 
"rna_Sequence_sound_update");
+  RNA_def_property_update(
+  prop, NC_SCENE | ND_SEQUENCER, 
"rna_SequenceTimelineChannel_mute_update");
 }
 
 static void rna_def_editor(BlenderRNA *brna)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4e9c6929c1d] master: VSE: Handle drivers when duplicating strips

2023-01-27 Thread Richard Antalik
Commit: 4e9c6929c1d08e41702ac4341d08bf15d7de31b3
Author: Richard Antalik
Date:   Sat Jan 28 03:24:44 2023 +0100
Branches: master
https://developer.blender.org/rB4e9c6929c1d08e41702ac4341d08bf15d7de31b3

VSE: Handle drivers when duplicating strips

Most operations where strips are duplicated use `SEQ_animation` API,
which handles keyframe animation. Now drivers are handled as well.

When group of strips is duplicated and driver references other strip,
it will still reference original strip. However, this is much better,
than previous behavior, when strip duplication results in "transfer" of
driver from original strip to duplicated one.

Fixes T104141

===

M   source/blender/editors/space_sequencer/sequencer_edit.c
M   source/blender/sequencer/SEQ_animation.h
M   source/blender/sequencer/SEQ_clipboard.h
M   source/blender/sequencer/intern/animation.c
M   source/blender/sequencer/intern/clipboard.c
M   source/blender/sequencer/intern/strip_edit.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c 
b/source/blender/editors/space_sequencer/sequencer_edit.c
index 96f8d2fe269..3865aee8327 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1606,8 +1606,8 @@ static int sequencer_add_duplicate_exec(bContext *C, 
wmOperator *UNUSED(op))
* This way, when pasted strips are renamed, curves are renamed with them. 
Finally, restore
* original curves from backup.
*/
-  ListBase fcurves_original_backup = {NULL, NULL};
-  SEQ_animation_backup_original(scene, &fcurves_original_backup);
+  SeqAnimationBackup animation_backup = {0};
+  SEQ_animation_backup_original(scene, &animation_backup);
 
   Sequence *seq = duplicated_strips.first;
 
@@ -1623,12 +1623,15 @@ static int sequencer_add_duplicate_exec(bContext *C, 
wmOperator *UNUSED(op))
 }
 seq->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL + SEQ_LOCK);
 seq->flag |= SEQ_IGNORE_CHANNEL_LOCK;
-SEQ_animation_duplicate(scene, seq, &fcurves_original_backup);
+
+SEQ_animation_duplicate_backup_to_scene(scene, seq, &animation_backup);
 SEQ_ensure_unique_name(seq, scene);
   }
 
-  SEQ_animation_restore_original(scene, &fcurves_original_backup);
+  SEQ_animation_restore_original(scene, &animation_backup);
 
+  DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
+  DEG_relations_tag_update(CTX_data_main(C));
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
   return OPERATOR_FINISHED;
 }
@@ -2393,33 +2396,41 @@ static void seq_copy_del_sound(Scene *scene, Sequence 
*seq)
   }
 }
 
-static void sequencer_copy_animation(Scene *scene, Sequence *seq)
+static void sequencer_copy_animation_listbase(Scene *scene,
+  Sequence *seq,
+  ListBase *clipboard,
+  ListBase *fcurve_base)
 {
-  if (scene->adt == NULL || scene->adt->action == NULL ||
-  BLI_listbase_is_empty(&scene->adt->action->curves)) {
-return;
-  }
-
   /* Add curves for strips inside meta strip. */
   if (seq->type == SEQ_TYPE_META) {
 LISTBASE_FOREACH (Sequence *, meta_child, &seq->seqbase) {
-  sequencer_copy_animation(scene, meta_child);
+  sequencer_copy_animation_listbase(scene, meta_child, clipboard, 
fcurve_base);
 }
   }
 
-  GSet *fcurves = SEQ_fcurves_by_strip_get(seq, &scene->adt->action->curves);
+  GSet *fcurves = SEQ_fcurves_by_strip_get(seq, fcurve_base);
   if (fcurves == NULL) {
 return;
   }
 
   GSET_FOREACH_BEGIN (FCurve *, fcu, fcurves) {
-BLI_addtail(&fcurves_clipboard, BKE_fcurve_copy(fcu));
+BLI_addtail(clipboard, BKE_fcurve_copy(fcu));
   }
   GSET_FOREACH_END();
 
   BLI_gset_free(fcurves, NULL);
 }
 
+static void sequencer_copy_animation(Scene *scene, Sequence *seq)
+{
+  if (SEQ_animation_curves_exist(scene)) {
+sequencer_copy_animation_listbase(scene, seq, &fcurves_clipboard, 
&scene->adt->action->curves);
+  }
+  if (SEQ_animation_drivers_exist(scene)) {
+sequencer_copy_animation_listbase(scene, seq, &drivers_clipboard, 
&scene->adt->drivers);
+  }
+}
+
 static int sequencer_copy_exec(bContext *C, wmOperator *op)
 {
   Main *bmain = CTX_data_main(C);
@@ -2496,7 +2507,7 @@ void ED_sequencer_deselect_all(Scene *scene)
 
 static void sequencer_paste_animation(bContext *C)
 {
-  if (BLI_listbase_is_empty(&fcurves_clipboard)) {
+  if (BLI_listbase_is_empty(&fcurves_clipboard) && 
BLI_listbase_is_empty(&drivers_clipboard)) {
 return;
   }
 
@@ -2515,6 +2526,9 @@ static void sequencer_paste_animation(bContext *C)
   LISTBASE_FOREACH (FCurve *, fcu, &fcurves_clipboard) {

[Bf-blender-cvs] [3a9e5891420] master: Fix (Unreported): VSE side panel flickering when tweaking offset value

2023-01-27 Thread Richard Antalik
Commit: 3a9e5891420d57cb3b40be09c4ad0c711d1ed9e2
Author: Richard Antalik
Date:   Sat Jan 28 00:25:56 2023 +0100
Branches: master
https://developer.blender.org/rB3a9e5891420d57cb3b40be09c4ad0c711d1ed9e2

Fix (Unreported): VSE side panel flickering when tweaking offset value

Panel was split by factor calculated from property value string length.
Since these properties have float type now, calculated length was
incorrect.

===

M   release/scripts/startup/bl_ui/space_sequencer.py

===

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py 
b/release/scripts/startup/bl_ui/space_sequencer.py
index dd6f827e92d..c605ed5f835 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1845,17 +1845,17 @@ class SEQUENCER_PT_time(SequencerButtonsPanel, Panel):
 frame_offset_end = strip.frame_offset_end
 
 length_list = (
-str(frame_start),
-str(frame_final_end),
-str(frame_final_duration),
-str(frame_offset_start),
-str(frame_offset_end),
+str(round(frame_start, 0)),
+str(round(frame_final_end, 0)),
+str(round(frame_final_duration, 0)),
+str(round(frame_offset_start, 0)),
+str(round(frame_offset_end, 0)),
 )
 
 if not is_effect:
 length_list = length_list + (
-str(strip.animation_offset_start),
-str(strip.animation_offset_end),
+str(round(strip.animation_offset_start, 0)),
+str(round(strip.animation_offset_end, 0)),
 )
 
 max_length = max(len(x) for x in length_list)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d7e914270f7] master: Fix (unreported): Pasted strip is not active

2023-01-27 Thread Richard Antalik
Commit: d7e914270f75b2be68f065aa6f27bb9d60e48511
Author: Richard Antalik
Date:   Sat Jan 28 00:02:51 2023 +0100
Branches: master
https://developer.blender.org/rBd7e914270f75b2be68f065aa6f27bb9d60e48511

Fix (unreported): Pasted strip is not active

Broken by renaming strip before comparing name to reference.

===

M   source/blender/editors/space_sequencer/sequencer_edit.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c 
b/source/blender/editors/space_sequencer/sequencer_edit.c
index a9e31de2096..96f8d2fe269 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -2570,17 +2570,16 @@ static int sequencer_paste_exec(bContext *C, wmOperator 
*op)
* in the new list. */
   BLI_movelisttolist(ed->seqbasep, &nseqbase);
 
-  /* Make sure, that pasted strips have unique names. This has to be done 
immediately after adding
-   * strips to seqbase, for lookup cache to work correctly. */
-  for (iseq = iseq_first; iseq; iseq = iseq->next) {
-SEQ_ensure_unique_name(iseq, scene);
-  }
-
   for (iseq = iseq_first; iseq; iseq = iseq->next) {
 if (SEQ_clipboard_pasted_seq_was_active(iseq)) {
   SEQ_select_active_set(scene, iseq);
 }
+/* Make sure, that pasted strips have unique names. This has to be done 
after
+ * adding strips to seqbase, for lookup cache to work correctly. */
+SEQ_ensure_unique_name(iseq, scene);
+  }
 
+  for (iseq = iseq_first; iseq; iseq = iseq->next) {
 /* Translate after name has been changed, otherwise this will affect 
animdata of original
  * strip. */
 SEQ_transform_translate_sequence(scene, iseq, ofs);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8336de03a68] master: Cleanup: VSE: use `context->for_render` instead of `G.is_rendering`

2023-01-27 Thread Richard Antalik
Commit: 8336de03a685a177489b38f9e83055b87f1d13ec
Author: Richard Antalik
Date:   Fri Jan 27 22:42:41 2023 +0100
Branches: master
https://developer.blender.org/rB8336de03a685a177489b38f9e83055b87f1d13ec

Cleanup: VSE: use `context->for_render` instead of `G.is_rendering`

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index 7f73a32a9c3..65ba8bf48fe 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -529,7 +529,7 @@ static void sequencer_preprocess_transform_crop(
   break;
 case SEQ_TRANSFORM_FILTER_NEAREST_3x3:
   filter = IMB_FILTER_NEAREST;
-  num_subsamples = G.is_rendering ? 3 : 1;
+  num_subsamples = context->for_render ? 3 : 1;
   break;
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c5d9938adcf] master: Fix T104073: Unable to add more than two strips in one channel

2023-01-24 Thread Richard Antalik
Commit: c5d9938adcffe9f552d84fc10cdcf7c0c305144e
Author: Richard Antalik
Date:   Tue Jan 24 23:17:32 2023 +0100
Branches: master
https://developer.blender.org/rBc5d9938adcffe9f552d84fc10cdcf7c0c305144e

Fix T104073: Unable to add more than two strips in one channel

Originally, function `sequencer_generic_invoke_xy_guess_channel`
looked in what channel the last strip of the same type is and the
channel used for new strip placement. This was changed as a workaround
when sound strips were added below movie strips
(58bea005c58956674c7f4a9a7a85ff943c140f03).
Now these workarounds aren't necessary, but the function was left
unchanged.

Current logic is for adding movie strip to channel 1 is:
- Sound is added to channel 1
- Video is added to channel 2
- If there is only video, it is added to channel 1

Since movie may, or may not contain sound, it is not possible to align
added strips in a way that was done before, unless timeline is analyzed
more in detail, but this would be quite inefficient.
Also, note, that the code did not work, if strip is added next to
previous one, so it mostly did not work as intended.

This commit changes:
- Fix alignment not working when strip is added right next to previous
  strip
- Assume that movie strips have sound strip underneath it, so channel
  below last movie strip is picked
- For other strip types, pick channel of the last strip of same type

Ultimately, the code is still rather weak, and better system, like using
channel where strip was manually moved, or concept of "typed channels"
would improve this feature.

===

M   source/blender/editors/space_sequencer/sequencer_add.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_add.c 
b/source/blender/editors/space_sequencer/sequencer_add.c
index 2613df11c42..872a9afd89f 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -201,7 +201,7 @@ static int 
sequencer_generic_invoke_xy_guess_channel(bContext *C, int type)
 
   for (seq = ed->seqbasep->first; seq; seq = seq->next) {
 const int strip_end = SEQ_time_right_handle_frame_get(scene, seq);
-if (ELEM(type, -1, seq->type) && (strip_end < timeline_frame) &&
+if (ELEM(type, -1, seq->type) && (strip_end <= timeline_frame) &&
 (timeline_frame - strip_end < proximity)) {
   tgt = seq;
   proximity = timeline_frame - strip_end;
@@ -209,7 +209,7 @@ static int 
sequencer_generic_invoke_xy_guess_channel(bContext *C, int type)
   }
 
   if (tgt) {
-return tgt->machine + 1;
+return (type == SEQ_TYPE_MOVIE) ? tgt->machine - 1 : tgt->machine;
   }
   return 1;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a5c3f5b0bc3] master: Fix T103818: Freeze frames in movie strips when timecodes are used

2023-01-13 Thread Richard Antalik
Commit: a5c3f5b0bc3339d94b53ed216f6e915b3968658a
Author: Richard Antalik
Date:   Fri Jan 13 21:25:41 2023 +0100
Branches: master
https://developer.blender.org/rBa5c3f5b0bc3339d94b53ed216f6e915b3968658a

Fix T103818: Freeze frames in movie strips when timecodes are used

Timecodes were generated from read packets, but applied to decoded
frames. This works as long as delay between packet read and decoded
frame is less than GOP size or if packet does not produce multiple
frames. In this case it did not work.

Use `pkt_pos`, `pkt_dts` and `pts` from `AVFrame` instead of `AVPacket`.
This way delay can be eliminated and timecode files are more reliable.

===

M   source/blender/imbuf/intern/indexer.c

===

diff --git a/source/blender/imbuf/intern/indexer.c 
b/source/blender/imbuf/intern/indexer.c
index d824b87f493..6d849f54d4c 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -1040,16 +1040,6 @@ static int 
index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
 }
 
 if (next_packet->stream_index == context->videoStream) {
-  if (next_packet->flags & AV_PKT_FLAG_KEY) {
-context->last_seek_pos = context->seek_pos;
-context->last_seek_pos_pts = context->seek_pos_pts;
-context->last_seek_pos_dts = context->seek_pos_dts;
-
-context->seek_pos = next_packet->pos;
-context->seek_pos_pts = next_packet->pts;
-context->seek_pos_dts = next_packet->dts;
-  }
-
   int ret = avcodec_send_packet(context->iCodecCtx, next_packet);
   while (ret >= 0) {
 ret = avcodec_receive_frame(context->iCodecCtx, in_frame);
@@ -1062,6 +1052,17 @@ static int 
index_rebuild_ffmpeg(FFmpegIndexBuilderContext *context,
   fprintf(stderr, "Error decoding proxy frame: %s\n", av_err2str(ret));
   break;
 }
+
+if (next_packet->flags & AV_PKT_FLAG_KEY) {
+  context->last_seek_pos = context->seek_pos;
+  context->last_seek_pos_pts = context->seek_pos_pts;
+  context->last_seek_pos_dts = context->seek_pos_dts;
+
+  context->seek_pos = in_frame->pkt_pos;
+  context->seek_pos_pts = in_frame->pts;
+  context->seek_pos_dts = in_frame->pkt_dts;
+}
+
 index_rebuild_ffmpeg_proc_decoded_frame(context, next_packet, 
in_frame);
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [47868c8a4ff] blender-v3.3-release: Fix T101981: Incorrect playback of AVI files

2023-01-13 Thread Richard Antalik
Commit: 47868c8a4ffea0a9a8fe58f5ae69915654db57d3
Author: Richard Antalik
Date:   Mon Oct 24 19:40:39 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB47868c8a4ffea0a9a8fe58f5ae69915654db57d3

Fix T101981: Incorrect playback of AVI files

Commit bcc56253e26e introduced 3 frame negative offset for seeking. This
can result in negative seek values.

Ensure, that seek value is always positive.

===

M   source/blender/imbuf/intern/anim_movie.c

===

diff --git a/source/blender/imbuf/intern/anim_movie.c 
b/source/blender/imbuf/intern/anim_movie.c
index f59a96cd564..5c0d31b052a 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -1101,7 +1101,12 @@ static int64_t ffmpeg_get_seek_pts(struct anim *anim, 
int64_t pts_to_search)
* experimentally. Note: Too big offset can impact performance. Current 3 
frame offset has no
* measurable impact.
*/
-  return pts_to_search - (ffmpeg_steps_per_frame_get(anim) * 3);
+  int64_t seek_pts = pts_to_search - (ffmpeg_steps_per_frame_get(anim) * 3);
+
+  if (seek_pts < 0) {
+seek_pts = 0;
+  }
+  return seek_pts;
 }
 
 /* This gives us an estimate of which pts our requested frame will have.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8529458cc74] blender-v3.3-release: Fix T95683: FFmpeg seeking is broken

2023-01-12 Thread Richard Antalik
Commit: 8529458cc74578e5944f52371f3d86edebcc7c78
Author: Richard Antalik
Date:   Wed Oct 12 20:00:20 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB8529458cc74578e5944f52371f3d86edebcc7c78

Fix T95683: FFmpeg seeking is broken

According to information I gathered, ffmpeg seeks internally using DTS
values instead of PTS. In some files DTS and PTS values are offset and
ffmpeg fails to seek correctly to keyframe located before requested PTS.

This issue become evident after hardcoded preseek of 25 frames was
removed and effort went into more precise seeking to improve
performance. It was thought, that this is bug in ffmpeg code, but
after reading some discussions, I don't think it is considered as such
by their developers, see below:
http://ffmpeg.org/pipermail/ffmpeg-devel/2018-March/226354.html
https://trac.ffmpeg.org/ticket/1189

Best solution seems to be to add small preseek value possibly at
detriment of performance, so 3 frames of preseek are applied. Number 3
was chosen experimentally.

Performance impact seems to be insignificant with this change.

Reviewed By: zeddb

Differential Revision: https://developer.blender.org/D15847

===

M   source/blender/imbuf/intern/anim_movie.c

===

diff --git a/source/blender/imbuf/intern/anim_movie.c 
b/source/blender/imbuf/intern/anim_movie.c
index 52ed68a1ff3..f59a96cd564 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -1094,12 +1094,14 @@ static int ffmpeg_seek_by_byte(AVFormatContext 
*pFormatCtx)
 
 static int64_t ffmpeg_get_seek_pts(struct anim *anim, int64_t pts_to_search)
 {
-  /* Step back half a frame position to make sure that we get the requested
-   * frame and not the one after it. This is a workaround as ffmpeg will
-   * sometimes not seek to a frame after the requested pts even if
-   * AVSEEK_FLAG_BACKWARD is specified.
+  /* FFmpeg seeks internally using DTS values instead of PTS. In some files 
DTS and PTS values are
+   * offset and sometimes ffmpeg fails to take this into account when seeking.
+   * Therefore we need to seek backwards a certain offset to make sure the 
frame we want is in
+   * front of us. It is not possible to determine the exact needed offset, 
this value is determined
+   * experimentally. Note: Too big offset can impact performance. Current 3 
frame offset has no
+   * measurable impact.
*/
-  return pts_to_search - (ffmpeg_steps_per_frame_get(anim) / 2);
+  return pts_to_search - (ffmpeg_steps_per_frame_get(anim) * 3);
 }
 
 /* This gives us an estimate of which pts our requested frame will have.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7a4b3d2287b] blender-v3.3-release: Fix T102663: Meta strips from older versions are broken

2023-01-12 Thread Richard Antalik
Commit: 7a4b3d2287b6a5019c83721130286e632c96ad95
Author: Richard Antalik
Date:   Sun Nov 27 21:29:17 2022 +0100
Branches: blender-v3.3-release
https://developer.blender.org/rB7a4b3d2287b6a5019c83721130286e632c96ad95

Fix T102663: Meta strips from older versions are broken

Meta strip range was adjusted in versioning because of previous issues
by function `version_fix_seq_meta_range`. After `speed_factor` property
was added, this changed how function works and result was incorrect
function due to uninitialized property value.

Running `version_fix_seq_meta_range` after `seq_speed_factor_set` fixes
this issue.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D16606

===

M   source/blender/blenloader/intern/versioning_300.c

===

diff --git a/source/blender/blenloader/intern/versioning_300.c 
b/source/blender/blenloader/intern/versioning_300.c
index 5b609483616..3f60fb87ccd 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -609,6 +609,15 @@ static void seq_speed_factor_fix_rna_path(Sequence *seq, 
ListBase *fcurves)
   MEM_freeN(path);
 }
 
+static bool version_fix_seq_meta_range(Sequence *seq, void *user_data)
+{
+  Scene *scene = (Scene *)user_data;
+  if (seq->type == SEQ_TYPE_META) {
+SEQ_time_update_meta_strip_range(scene, seq);
+  }
+  return true;
+}
+
 static bool seq_speed_factor_set(Sequence *seq, void *user_data)
 {
   const Scene *scene = user_data;
@@ -861,6 +870,7 @@ void do_versions_after_linking_300(Main *bmain, ReportList 
*UNUSED(reports))
 continue;
   }
   SEQ_for_each_callback(&ed->seqbase, seq_speed_factor_set, scene);
+  SEQ_for_each_callback(&ed->seqbase, version_fix_seq_meta_range, scene);
 }
   }
 
@@ -1290,15 +1300,6 @@ static void version_node_tree_socket_id_delim(bNodeTree 
*ntree)
   }
 }
 
-static bool version_fix_seq_meta_range(Sequence *seq, void *user_data)
-{
-  Scene *scene = (Scene *)user_data;
-  if (seq->type == SEQ_TYPE_META) {
-SEQ_time_update_meta_strip_range(scene, seq);
-  }
-  return true;
-}
-
 static bool version_merge_still_offsets(Sequence *seq, void *UNUSED(user_data))
 {
   seq->startofs -= seq->startstill;
@@ -2597,17 +2598,6 @@ void blo_do_versions_300(FileData *fd, Library 
*UNUSED(lib), Main *bmain)
 }
   }
 }
-
-LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
-  Editing *ed = SEQ_editing_get(scene);
-  /* Make sure range of meta strips is correct.
-   * It was possible to save .blend file with incorrect state of meta strip
-   * range. The root cause is expected to be fixed, but need to ensure 
files
-   * with invalid meta strip range are corrected. */
-  if (ed != NULL) {
-SEQ_for_each_callback(&ed->seqbase, version_fix_seq_meta_range, scene);
-  }
-}
   }
 
   /* Special case to handle older in-development 3.1 files, before change from 
3.0 branch gets

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2bbabbc7396] blender-v3.3-release: Fix T102801: Empty metasequence sliding away while moving

2023-01-12 Thread Richard Antalik
Commit: 2bbabbc7396669f926b2a476f91ccac96613cf47
Author: Richard Antalik
Date:   Mon Nov 28 18:23:29 2022 +0100
Branches: blender-v3.3-release
https://developer.blender.org/rB2bbabbc7396669f926b2a476f91ccac96613cf47

Fix T102801: Empty metasequence sliding away while moving

Meta strip position relies on strips within. When meta strip is empty,
update function, that would normally update it's position returns early
and this causes translaton to behave erratically.

When strip is empty, treat it as normal strip and move its start frame
as with other strip types.

===

M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index 447ab9c221d..5e2e9244c50 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -138,9 +138,10 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, 
Sequence *seq, int delt
 return;
   }
 
-  /* Meta strips requires special handling: their content is to be translated, 
and then frame range
-   * of the meta is to be updated for the updated content. */
-  if (seq->type == SEQ_TYPE_META) {
+  /* Meta strips requires their content is to be translated, and then frame 
range of the meta is
+   * updated based on nested strips. Thiw won't work for empty metas, so they 
can be treated as
+   * normal strip. */
+  if (seq->type == SEQ_TYPE_META && !BLI_listbase_is_empty(&seq->seqbase)) {
 Sequence *seq_child;
 for (seq_child = seq->seqbase.first; seq_child; seq_child = 
seq_child->next) {
   SEQ_transform_translate_sequence(evil_scene, seq_child, delta);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3a98dc68120] master: Fix crash when dragging video into VSE timeline

2023-01-10 Thread Richard Antalik
Commit: 3a98dc681206bd37917d76f35bcb9b846bad09e9
Author: Richard Antalik
Date:   Tue Jan 10 16:12:13 2023 +0100
Branches: master
https://developer.blender.org/rB3a98dc681206bd37917d76f35bcb9b846bad09e9

Fix crash when dragging video into VSE timeline

Caused by NULL dereference in strip overlap handling (expand to fit),
because `time_dependent_strips` strip collection is not created.

Check if strip collection is provided in `query_right_side_strips()`.

===

M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index 58f41d7e180..1edc4b85f96 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -309,7 +309,7 @@ static SeqCollection *query_right_side_strips(const Scene 
*scene,
 
   SeqCollection *collection = SEQ_collection_create(__func__);
   LISTBASE_FOREACH (Sequence *, seq, seqbase) {
-if (SEQ_collection_has_strip(seq, time_dependent_strips)) {
+if (time_dependent_strips != NULL && SEQ_collection_has_strip(seq, 
time_dependent_strips)) {
   continue;
 }
 if (SEQ_collection_has_strip(seq, transformed_strips)) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ec2046c38da] master: Fix T103531: Hold split not working correctly

2023-01-09 Thread Richard Antalik
Commit: ec2046c38da49528af26f9aedc5913b733105dd0
Author: Richard Antalik
Date:   Mon Jan 9 17:55:02 2023 +0100
Branches: master
https://developer.blender.org/rBec2046c38da49528af26f9aedc5913b733105dd0

Fix T103531: Hold split not working correctly

Incorrect offset was calculated when strip was implicitly retimed (movie
FPS does not match scene FPS). This is because strip playback rate was
not used for offset calculation at all.

Since hold offset is specifying numbers of frames to skip, but at frame
rate of the source, this could result in gap when splitting the strip.
If that occurs, gap is compensated by moving handle to frame where strip
is split.

===

M   source/blender/sequencer/intern/strip_edit.c
M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h

===

diff --git a/source/blender/sequencer/intern/strip_edit.c 
b/source/blender/sequencer/intern/strip_edit.c
index 69e43f3679c..5ac4bd03f43 100644
--- a/source/blender/sequencer/intern/strip_edit.c
+++ b/source/blender/sequencer/intern/strip_edit.c
@@ -258,7 +258,10 @@ bool SEQ_edit_move_strip_to_meta(Scene *scene,
   return true;
 }
 
-static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
+static void seq_split_set_right_hold_offset(Main *bmain,
+Scene *scene,
+Sequence *seq,
+int timeline_frame)
 {
   const float content_start = SEQ_time_start_frame_get(seq);
   const float content_end = SEQ_time_content_end_frame_get(scene, seq);
@@ -268,31 +271,35 @@ static void seq_split_set_right_hold_offset(Scene *scene, 
Sequence *seq, int tim
 const float offset = content_start + 1 - timeline_frame;
 seq->start -= offset;
 seq->startofs += offset;
-SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
   }
   /* Adjust within range of strip contents. */
   else if ((timeline_frame >= content_start) && (timeline_frame <= 
content_end)) {
 seq->endofs = 0;
-seq->anim_endofs += (content_end - timeline_frame) * seq->speed_factor;
-  }
-  /* Adjust within range of extended still-frames after strip. */
-  else if (timeline_frame > content_end) {
-SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
+float speed_factor = (seq->type == SEQ_TYPE_SOUND_RAM) ?
+ seq_time_media_playback_rate_factor_get(scene, 
seq) :
+ seq_time_playback_rate_factor_get(scene, seq);
+seq->anim_endofs += round_fl_to_int((content_end - timeline_frame) * 
speed_factor);
   }
+
+  /* Needed only to set `seq->len`. */
+  SEQ_add_reload_new_file(bmain, scene, seq, false);
+  SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
 }
 
-static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
+static void seq_split_set_left_hold_offset(Main *bmain,
+   Scene *scene,
+   Sequence *seq,
+   int timeline_frame)
 {
   const float content_start = SEQ_time_start_frame_get(seq);
   const float content_end = SEQ_time_content_end_frame_get(scene, seq);
 
-  /* Adjust within range of extended still-frames before strip. */
-  if (timeline_frame < content_start) {
-SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
-  }
   /* Adjust within range of strip contents. */
-  else if ((timeline_frame >= content_start) && (timeline_frame <= 
content_end)) {
-seq->anim_startofs += (timeline_frame - content_start) * seq->speed_factor;
+  if ((timeline_frame >= content_start) && (timeline_frame <= content_end)) {
+float speed_factor = (seq->type == SEQ_TYPE_SOUND_RAM) ?
+ seq_time_media_playback_rate_factor_get(scene, 
seq) :
+ seq_time_playback_rate_factor_get(scene, seq);
+seq->anim_startofs += round_fl_to_int((timeline_frame - content_start) * 
speed_factor);
 seq->start = timeline_frame;
 seq->startofs = 0;
   }
@@ -301,8 +308,11 @@ static void seq_split_set_left_hold_offset(Scene *scene, 
Sequence *seq, int time
 const float offset = timeline_frame - content_end + 1;
 seq->start += offset;
 seq->endofs += offset;
-SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
   }
+
+  /* Needed only to set `seq->len`. */
+  SEQ_add_reload_new_file(bmain, scene, seq, false);
+  SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
 }
 
 static bool seq_edit_split_effect_intersect_check(const Scene *scene,
@@ -326,8 +336,7 @@ static void seq_edit_split_handle_strip_offsets(Main *bmain,
   

[Bf-blender-cvs] [2e0cf17f94d] master: Fix T103601: Crash on making Contactsheet

2023-01-02 Thread Richard Antalik
Commit: 2e0cf17f94dcf6dc10f0d55d933c011534dc8421
Author: Richard Antalik
Date:   Tue Jan 3 06:19:02 2023 +0100
Branches: master
https://developer.blender.org/rB2e0cf17f94dcf6dc10f0d55d933c011534dc8421

Fix T103601: Crash on making Contactsheet

Python API for moving strips to and from meta strips did not invalidate
strip lookup cache. Because of that, `SEQ_get_seqbase_by_seq()` failed
to lookup origin of strip, which resulted in crash on NULL dereference.

Invalidateion was added to functions `SEQ_edit_move_strip_to_meta()` and
`SEQ_add_meta_strip()`.

===

M   source/blender/makesrna/intern/rna_sequencer_api.c
M   source/blender/sequencer/intern/strip_add.c

===

diff --git a/source/blender/makesrna/intern/rna_sequencer_api.c 
b/source/blender/makesrna/intern/rna_sequencer_api.c
index ae241c11522..e1ccffdd2c1 100644
--- a/source/blender/makesrna/intern/rna_sequencer_api.c
+++ b/source/blender/makesrna/intern/rna_sequencer_api.c
@@ -22,7 +22,7 @@
 
 #ifdef RNA_RUNTIME
 
-//#include "DNA_anim_types.h"
+// #include "DNA_anim_types.h"
 #  include "DNA_image_types.h"
 #  include "DNA_mask_types.h"
 #  include "DNA_sound_types.h"
@@ -83,6 +83,8 @@ static void rna_Sequences_move_strip_to_meta(
   DEG_relations_tag_update(bmain);
   DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
 
+  SEQ_sequence_lookup_tag(scene, SEQ_LOOKUP_TAG_INVALID);
+
   WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, scene);
 }
 
diff --git a/source/blender/sequencer/intern/strip_add.c 
b/source/blender/sequencer/intern/strip_add.c
index d98a00aa9a5..7744bc4ce1c 100644
--- a/source/blender/sequencer/intern/strip_add.c
+++ b/source/blender/sequencer/intern/strip_add.c
@@ -367,6 +367,8 @@ Sequence *SEQ_add_meta_strip(Scene *scene, ListBase 
*seqbase, SeqLoadData *load_
   seqm->start = load_data->start_frame;
   seqm->len = 1;
 
+  seq_add_generic_update(scene, seqm);
+
   return seqm;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [28e6a8414a7] blender-v3.4-release: Revert "Fix T102571: Can't stop audio playback when using multiple windows"

2022-12-14 Thread Richard Antalik
Commit: 28e6a8414a74c9723e8aaf154e05c2ec5c9f2746
Author: Richard Antalik
Date:   Wed Dec 14 18:24:50 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB28e6a8414a74c9723e8aaf154e05c2ec5c9f2746

Revert "Fix T102571: Can't stop audio playback when using multiple windows"

This reverts commit 42b51bf6a91acd055d34e31c06c9dff46b0aac1b.

Commit caused crash when playback is stopped, see T103008.

===

M   source/blender/editors/screen/screen_ops.c

===

diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index a4e98aa639a..9c0963d0fb1 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -4812,28 +4812,19 @@ bScreen *ED_screen_animation_no_scrub(const 
wmWindowManager *wm)
 int ED_screen_animation_play(bContext *C, int sync, int mode)
 {
   bScreen *screen = CTX_wm_screen(C);
+  Scene *scene = CTX_data_scene(C);
+  Scene *scene_eval = 
DEG_get_evaluated_scene(CTX_data_ensure_evaluated_depsgraph(C));
 
   if (ED_screen_animation_playing(CTX_wm_manager(C))) {
 /* stop playback now */
 ED_screen_animation_timer(C, 0, 0, 0);
-Main *bmain = CTX_data_main(C);
-LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
-  LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-Depsgraph *graph = BKE_scene_get_depsgraph(scene, view_layer);
-if (graph) {
-  Scene *scene_eval = DEG_get_evaluated_scene(graph);
-  /* The audio handles are preserved throughout the dependency graph 
evaluation.
-   * Checking for scene->playback_handle even for non-evaluated scene 
should be okay. */
-  BKE_sound_stop_scene(scene_eval);
-  WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
-}
-  }
-}
+BKE_sound_stop_scene(scene_eval);
+
+WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
   }
   else {
 /* these settings are currently only available from a menu in the TimeLine 
*/
 if (mode == 1) { /* XXX only play audio forwards!? */
-  Scene *scene_eval = 
DEG_get_evaluated_scene(CTX_data_ensure_evaluated_depsgraph(C));
   BKE_sound_play_scene(scene_eval);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d33758755b0] master: Revert "Fix T102571: Can't stop audio playback when using multiple windows"

2022-12-14 Thread Richard Antalik
Commit: d33758755b02f3a69631ed4fc671ba400f02b6a5
Author: Richard Antalik
Date:   Wed Dec 14 18:24:50 2022 +0100
Branches: master
https://developer.blender.org/rBd33758755b02f3a69631ed4fc671ba400f02b6a5

Revert "Fix T102571: Can't stop audio playback when using multiple windows"

This reverts commit 42b51bf6a91acd055d34e31c06c9dff46b0aac1b.

Commit caused crash when playback is stopped, see T103008.

===

M   source/blender/editors/screen/screen_ops.c

===

diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index a4e98aa639a..9c0963d0fb1 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -4812,28 +4812,19 @@ bScreen *ED_screen_animation_no_scrub(const 
wmWindowManager *wm)
 int ED_screen_animation_play(bContext *C, int sync, int mode)
 {
   bScreen *screen = CTX_wm_screen(C);
+  Scene *scene = CTX_data_scene(C);
+  Scene *scene_eval = 
DEG_get_evaluated_scene(CTX_data_ensure_evaluated_depsgraph(C));
 
   if (ED_screen_animation_playing(CTX_wm_manager(C))) {
 /* stop playback now */
 ED_screen_animation_timer(C, 0, 0, 0);
-Main *bmain = CTX_data_main(C);
-LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
-  LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-Depsgraph *graph = BKE_scene_get_depsgraph(scene, view_layer);
-if (graph) {
-  Scene *scene_eval = DEG_get_evaluated_scene(graph);
-  /* The audio handles are preserved throughout the dependency graph 
evaluation.
-   * Checking for scene->playback_handle even for non-evaluated scene 
should be okay. */
-  BKE_sound_stop_scene(scene_eval);
-  WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
-}
-  }
-}
+BKE_sound_stop_scene(scene_eval);
+
+WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
   }
   else {
 /* these settings are currently only available from a menu in the TimeLine 
*/
 if (mode == 1) { /* XXX only play audio forwards!? */
-  Scene *scene_eval = 
DEG_get_evaluated_scene(CTX_data_ensure_evaluated_depsgraph(C));
   BKE_sound_play_scene(scene_eval);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [42b51bf6a91] blender-v3.4-release: Fix T102571: Can't stop audio playback when using multiple windows

2022-12-04 Thread Richard Antalik
Commit: 42b51bf6a91acd055d34e31c06c9dff46b0aac1b
Author: Richard Antalik
Date:   Mon Dec 5 04:45:38 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB42b51bf6a91acd055d34e31c06c9dff46b0aac1b

Fix T102571: Can't stop audio playback when using multiple windows

Traverse all scene dependency graphs and stop audio playback for each
scene.

Also fixes T71233

Reviewed By: sergey, mont29

Differential Revision: https://developer.blender.org/D16646

===

M   source/blender/editors/screen/screen_ops.c

===

diff --git a/source/blender/editors/screen/screen_ops.c 
b/source/blender/editors/screen/screen_ops.c
index 9c0963d0fb1..a4e98aa639a 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -4812,19 +4812,28 @@ bScreen *ED_screen_animation_no_scrub(const 
wmWindowManager *wm)
 int ED_screen_animation_play(bContext *C, int sync, int mode)
 {
   bScreen *screen = CTX_wm_screen(C);
-  Scene *scene = CTX_data_scene(C);
-  Scene *scene_eval = 
DEG_get_evaluated_scene(CTX_data_ensure_evaluated_depsgraph(C));
 
   if (ED_screen_animation_playing(CTX_wm_manager(C))) {
 /* stop playback now */
 ED_screen_animation_timer(C, 0, 0, 0);
-BKE_sound_stop_scene(scene_eval);
-
-WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
+Main *bmain = CTX_data_main(C);
+LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
+  LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
+Depsgraph *graph = BKE_scene_get_depsgraph(scene, view_layer);
+if (graph) {
+  Scene *scene_eval = DEG_get_evaluated_scene(graph);
+  /* The audio handles are preserved throughout the dependency graph 
evaluation.
+   * Checking for scene->playback_handle even for non-evaluated scene 
should be okay. */
+  BKE_sound_stop_scene(scene_eval);
+  WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
+}
+  }
+}
   }
   else {
 /* these settings are currently only available from a menu in the TimeLine 
*/
 if (mode == 1) { /* XXX only play audio forwards!? */
+  Scene *scene_eval = 
DEG_get_evaluated_scene(CTX_data_ensure_evaluated_depsgraph(C));
   BKE_sound_play_scene(scene_eval);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [68a08460219] master: Fix T102657: Unable to add strip to new channel

2022-11-29 Thread Richard Antalik
Commit: 68a08460219ac63a956cccd070bbd4eccfcf89bc
Author: Richard Antalik
Date:   Tue Nov 29 19:49:40 2022 +0100
Branches: master
https://developer.blender.org/rB68a08460219ac63a956cccd070bbd4eccfcf89bc

Fix T102657: Unable to add strip to new channel

This is usability improvement, rather than bugfix. By default, height of
VSE timeline is clamped to 7 channels, unless more are added. But adding
new strip is not intuitive, since user can't scroll up due to clamping.

Clamp timeline height to n+1 used channels, so there is always 1 free
channel visible.

===

M   source/blender/editors/space_sequencer/space_sequencer.c

===

diff --git a/source/blender/editors/space_sequencer/space_sequencer.c 
b/source/blender/editors/space_sequencer/space_sequencer.c
index 1d20926d16c..2f8ee37be2a 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -565,7 +565,7 @@ static void sequencer_main_clamp_view(const bContext *C, 
ARegion *region)
 
   /* Initialize default view with 7 channels, that are visible even if empty. 
*/
   rctf strip_boundbox;
-  BLI_rctf_init(&strip_boundbox, 0.0f, 0.0f, 1.0f, 7.0f);
+  BLI_rctf_init(&strip_boundbox, 0.0f, 0.0f, 1.0f, 6.0f);
   SEQ_timeline_expand_boundbox(scene, ed->seqbasep, &strip_boundbox);
 
   /* Clamp Y max. Scrubbing area height must be added, so strips aren't 
occluded. */
@@ -574,8 +574,8 @@ static void sequencer_main_clamp_view(const bContext *C, 
ARegion *region)
   const float pixel_view_size_y = BLI_rctf_size_y(&v2d->cur) / 
BLI_rcti_size_y(&v2d->mask);
   const float scrub_bar_height = BLI_rcti_size_y(&scrub_rect) * 
pixel_view_size_y;
 
-  /* Channel n has range of . */
-  strip_boundbox.ymax += 1.0f + scrub_bar_height;
+  /* Channel n has range of , +1 for empty channel. */
+  strip_boundbox.ymax += 2.0f + scrub_bar_height;
 
   /* Clamp Y min. Scroller and marker area height must be added, so strips 
aren't occluded. */
   float scroll_bar_height = v2d->hor.ymax * pixel_view_size_y;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3f9febcabff] master: Merge branch 'blender-v3.4-release'

2022-11-29 Thread Richard Antalik
Commit: 3f9febcabffb10390c949c02ef1efa7914846542
Author: Richard Antalik
Date:   Tue Nov 29 19:09:42 2022 +0100
Branches: master
https://developer.blender.org/rB3f9febcabffb10390c949c02ef1efa7914846542

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [412fdc96988] blender-v3.4-release: Fix crash when dragging video into VSE preview area

2022-11-29 Thread Richard Antalik
Commit: 412fdc9698811014c0720640c4af5009d260
Author: Richard Antalik
Date:   Tue Nov 29 19:03:40 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB412fdc9698811014c0720640c4af5009d260

Fix crash when dragging video into VSE preview area

Caused by NULL dereference, because `Editing` data were not initialized.
Ensure data are initialized prior to using them.

===

M   source/blender/editors/space_sequencer/sequencer_drag_drop.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_drag_drop.c 
b/source/blender/editors/space_sequencer/sequencer_drag_drop.c
index c892e7d7e55..da91f94d509 100644
--- a/source/blender/editors/space_sequencer/sequencer_drag_drop.c
+++ b/source/blender/editors/space_sequencer/sequencer_drag_drop.c
@@ -285,7 +285,7 @@ static void sequencer_drop_copy(bContext *C, wmDrag *drag, 
wmDropBox *drop)
 /* We are dropped inside the preview region. Put the strip on top of the
  * current displayed frame. */
 Scene *scene = CTX_data_scene(C);
-Editing *ed = SEQ_editing_get(scene);
+Editing *ed = SEQ_editing_ensure(scene);
 ListBase *seqbase = SEQ_active_seqbase_get(ed);
 ListBase *channels = SEQ_channels_displayed_get(ed);
 SpaceSeq *sseq = CTX_wm_space_seq(C);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [71f9fbcf353] master: Merge branch 'blender-v3.4-release'

2022-11-29 Thread Richard Antalik
Commit: 71f9fbcf353c3071fa9142f0f3ad3c17cd818537
Author: Richard Antalik
Date:   Tue Nov 29 16:46:07 2022 +0100
Branches: master
https://developer.blender.org/rB71f9fbcf353c3071fa9142f0f3ad3c17cd818537

Merge branch 'blender-v3.4-release'

===



===

diff --cc source/blender/windowmanager/intern/wm_draw.c
index 88024f1dec1,1010a6333c4..cbbd0eb3a4f
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@@ -922,10 -939,12 +922,11 @@@ static void wm_draw_window_offscreen(bC
  }
}
else {
+ wm_draw_region_stereo_set(bmain, area, region, STEREO_LEFT_ID);
  wm_draw_region_buffer_create(region, false, use_viewport);
 -if (wm_draw_region_bind(C, region, 0)) {
 -  ED_region_do_draw(C, region);
 -  wm_draw_region_unbind(region);
 -}
 +wm_draw_region_bind(region, 0);
 +ED_region_do_draw(C, region);
 +wm_draw_region_unbind(region);
}
  
GPU_debug_group_end();

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [01f4b9b32df] blender-v3.4-release: Fix T102795: Stereoscopy checkbox turns the VSE preview black

2022-11-29 Thread Richard Antalik
Commit: 01f4b9b32dfdb62c91454f42579bd66b086d1f0e
Author: Richard Antalik
Date:   Tue Nov 29 16:28:14 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB01f4b9b32dfdb62c91454f42579bd66b086d1f0e

Fix T102795: Stereoscopy checkbox turns the VSE preview black

With stereoscopy enabled, sseq->multiview_eye is set to left and
right eye during drawing, but this value is not reset, even if
stereoscopy is disabled.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D16639

===

M   source/blender/windowmanager/intern/wm_draw.c

===

diff --git a/source/blender/windowmanager/intern/wm_draw.c 
b/source/blender/windowmanager/intern/wm_draw.c
index 663a41212ba..1010a6333c4 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -939,6 +939,7 @@ static void wm_draw_window_offscreen(bContext *C, wmWindow 
*win, bool stereo)
 }
   }
   else {
+wm_draw_region_stereo_set(bmain, area, region, STEREO_LEFT_ID);
 wm_draw_region_buffer_create(region, false, use_viewport);
 if (wm_draw_region_bind(C, region, 0)) {
   ED_region_do_draw(C, region);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b0bf10889be] master: Merge branch 'blender-v3.4-release'

2022-11-28 Thread Richard Antalik
Commit: b0bf10889be974cc44698e9fc7c80fe0f51e3b60
Author: Richard Antalik
Date:   Mon Nov 28 18:26:21 2022 +0100
Branches: master
https://developer.blender.org/rBb0bf10889be974cc44698e9fc7c80fe0f51e3b60

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [33ce83984df] blender-v3.4-release: Fix T102801: Empty metasequence sliding away while moving

2022-11-28 Thread Richard Antalik
Commit: 33ce83984df27d22101a981a39612e284e1972e1
Author: Richard Antalik
Date:   Mon Nov 28 18:23:29 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB33ce83984df27d22101a981a39612e284e1972e1

Fix T102801: Empty metasequence sliding away while moving

Meta strip position relies on strips within. When meta strip is empty,
update function, that would normally update it's position returns early
and this causes translaton to behave erratically.

When strip is empty, treat it as normal strip and move its start frame
as with other strip types.

===

M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index 14875df9445..7b1ae1dd454 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -117,9 +117,10 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, 
Sequence *seq, int delt
 return;
   }
 
-  /* Meta strips requires special handling: their content is to be translated, 
and then frame range
-   * of the meta is to be updated for the updated content. */
-  if (seq->type == SEQ_TYPE_META) {
+  /* Meta strips requires their content is to be translated, and then frame 
range of the meta is
+   * updated based on nested strips. Thiw won't work for empty metas, so they 
can be treated as
+   * normal strip. */
+  if (seq->type == SEQ_TYPE_META && !BLI_listbase_is_empty(&seq->seqbase)) {
 Sequence *seq_child;
 for (seq_child = seq->seqbase.first; seq_child; seq_child = 
seq_child->next) {
   SEQ_transform_translate_sequence(evil_scene, seq_child, delta);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5b4efaeeb36] master: Merge branch 'blender-v3.4-release'

2022-11-27 Thread Richard Antalik
Commit: 5b4efaeeb36307ff2f611472c5ff377ca92b4487
Author: Richard Antalik
Date:   Sun Nov 27 21:42:37 2022 +0100
Branches: master
https://developer.blender.org/rB5b4efaeeb36307ff2f611472c5ff377ca92b4487

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3a65d2f5911] blender-v3.4-release: Fix T101211: Image jitters when scaling by large values

2022-11-27 Thread Richard Antalik
Commit: 3a65d2f5911cef65590c208fb8bccd5e10a4b29a
Author: Richard Antalik
Date:   Sun Nov 27 21:33:05 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB3a65d2f5911cef65590c208fb8bccd5e10a4b29a

Fix T101211: Image jitters when scaling by large values

Issue was caused by imprecise math due to using float numbers.
Use double instead.

No negative performance impact was observed.

Reviewed By: jbakker

Differential Revision: https://developer.blender.org/D16517

===

M   source/blender/blenlib/BLI_math_vector.h
M   source/blender/blenlib/intern/math_vector_inline.c
M   source/blender/imbuf/intern/transform.cc

===

diff --git a/source/blender/blenlib/BLI_math_vector.h 
b/source/blender/blenlib/BLI_math_vector.h
index 17fe25ec67b..a796888902e 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -133,6 +133,7 @@ MINLINE void add_v4_v4v4(float r[4], const float a[4], 
const float b[4]);
 MINLINE void add_v3fl_v3fl_v3i(float r[3], const float a[3], const int b[3]);
 
 MINLINE void sub_v2_v2(float r[2], const float a[2]);
+MINLINE void sub_v2_v2_db(double r[2], const double a[2]);
 MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2]);
 MINLINE void sub_v2_v2v2_db(double r[2], const double a[2], const double b[2]);
 MINLINE void sub_v2_v2v2_int(int r[2], const int a[2], const int b[2]);
@@ -193,6 +194,7 @@ MINLINE void madd_v2_v2fl(float r[2], const float a[2], 
float f);
 MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f);
 MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3]);
 MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], 
float f);
+MINLINE void madd_v2_v2db_db(double r[2], const double a[2], const double 
b[2], double f);
 MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], 
float f);
 MINLINE void madd_v3_v3v3db_db(double r[3], const double a[3], const double 
b[3], double f);
 MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], 
const float c[3]);
diff --git a/source/blender/blenlib/intern/math_vector_inline.c 
b/source/blender/blenlib/intern/math_vector_inline.c
index 27c17a90f5f..822a9157316 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -463,6 +463,12 @@ MINLINE void sub_v2_v2(float r[2], const float a[2])
   r[1] -= a[1];
 }
 
+MINLINE void sub_v2_v2_db(double r[2], const double a[2])
+{
+  r[0] -= a[0];
+  r[1] -= a[1];
+}
+
 MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
 {
   r[0] = a[0] - b[0];
@@ -697,6 +703,12 @@ MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], 
const float b[2], floa
   r[1] = a[1] + b[1] * f;
 }
 
+MINLINE void madd_v2_v2db_db(double r[2], const double a[2], const double 
b[2], double f)
+{
+  r[0] = a[0] + b[0] * f;
+  r[1] = a[1] + b[1] * f;
+}
+
 MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], 
float f)
 {
   r[0] = a[0] + b[0] * f;
diff --git a/source/blender/imbuf/intern/transform.cc 
b/source/blender/imbuf/intern/transform.cc
index 6d3452c64db..420cad06959 100644
--- a/source/blender/imbuf/intern/transform.cc
+++ b/source/blender/imbuf/intern/transform.cc
@@ -22,19 +22,19 @@ struct TransformUserData {
   /** \brief Destination image buffer to write to. */
   ImBuf *dst;
   /** \brief UV coordinates at the origin (0,0) in source image space. */
-  float start_uv[2];
+  double start_uv[2];
 
   /**
* \brief delta UV coordinates along the source image buffer, when moving a 
single pixel in the X
* axis of the dst image buffer.
*/
-  float add_x[2];
+  double add_x[2];
 
   /**
* \brief delta UV coordinate along the source image buffer, when moving a 
single pixel in the Y
* axes of the dst image buffer.
*/
-  float add_y[2];
+  double add_y[2];
 
   /**
* \brief Cropping region in source image pixel space.
@@ -54,39 +54,45 @@ struct TransformUserData {
  private:
   void init_start_uv(const float transform_matrix[4][4])
   {
-float start_uv_v3[3];
-float orig[3];
-zero_v3(orig);
-mul_v3_m4v3(start_uv_v3, transform_matrix, orig);
-copy_v2_v2(start_uv, start_uv_v3);
+double start_uv_v3[3];
+double orig[3];
+double transform_matrix_double[4][4];
+copy_m4d_m4(transform_matrix_double, transform_matrix);
+zero_v3_db(orig);
+mul_v3_m4v3_db(start_uv_v3, transform_matrix_double, orig);
+copy_v2_v2_db(start_uv, start_uv_v3);
   }
 
   void init_add_x(const float transform_matrix[4][4])
   {
+double transform_matrix_double[4][4];
+copy_m4d_m4(transform_matrix_double, transform_matrix);
 const int width = src->x;
-float add_x_v3[3];
-float uv_max_x[3];
-zero_v3(uv_max_x);
+double add_x_v3[3];
+dou

[Bf-blender-cvs] [5a504a0d9dd] blender-v3.4-release: Fix T102663: Meta strips from older versions are broken

2022-11-27 Thread Richard Antalik
Commit: 5a504a0d9ec35853fd0e3c12060d03617298
Author: Richard Antalik
Date:   Sun Nov 27 21:29:17 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB5a504a0d9ec35853fd0e3c12060d03617298

Fix T102663: Meta strips from older versions are broken

Meta strip range was adjusted in versioning because of previous issues
by function `version_fix_seq_meta_range`. After `speed_factor` property
was added, this changed how function works and result was incorrect
function due to uninitialized property value.

Running `version_fix_seq_meta_range` after `seq_speed_factor_set` fixes
this issue.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D16606

===

M   source/blender/blenloader/intern/versioning_300.cc

===

diff --git a/source/blender/blenloader/intern/versioning_300.cc 
b/source/blender/blenloader/intern/versioning_300.cc
index 5e1fa17f1c6..49ac1ca7d09 100644
--- a/source/blender/blenloader/intern/versioning_300.cc
+++ b/source/blender/blenloader/intern/versioning_300.cc
@@ -650,6 +650,15 @@ static void seq_speed_factor_fix_rna_path(Sequence *seq, 
ListBase *fcurves)
   MEM_freeN(path);
 }
 
+static bool version_fix_seq_meta_range(Sequence *seq, void *user_data)
+{
+  Scene *scene = (Scene *)user_data;
+  if (seq->type == SEQ_TYPE_META) {
+SEQ_time_update_meta_strip_range(scene, seq);
+  }
+  return true;
+}
+
 static bool seq_speed_factor_set(Sequence *seq, void *user_data)
 {
   const Scene *scene = static_cast(user_data);
@@ -1043,6 +1052,7 @@ void do_versions_after_linking_300(Main *bmain, 
ReportList * /*reports*/)
 continue;
   }
   SEQ_for_each_callback(&ed->seqbase, seq_speed_factor_set, scene);
+  SEQ_for_each_callback(&ed->seqbase, version_fix_seq_meta_range, scene);
 }
   }
 
@@ -1483,15 +1493,6 @@ static void version_node_tree_socket_id_delim(bNodeTree 
*ntree)
   }
 }
 
-static bool version_fix_seq_meta_range(Sequence *seq, void *user_data)
-{
-  Scene *scene = (Scene *)user_data;
-  if (seq->type == SEQ_TYPE_META) {
-SEQ_time_update_meta_strip_range(scene, seq);
-  }
-  return true;
-}
-
 static bool version_merge_still_offsets(Sequence *seq, void * /*user_data*/)
 {
   seq->startofs -= seq->startstill;
@@ -2813,17 +2814,6 @@ void blo_do_versions_300(FileData *fd, Library * 
/*lib*/, Main *bmain)
 }
   }
 }
-
-LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
-  Editing *ed = SEQ_editing_get(scene);
-  /* Make sure range of meta strips is correct.
-   * It was possible to save .blend file with incorrect state of meta strip
-   * range. The root cause is expected to be fixed, but need to ensure 
files
-   * with invalid meta strip range are corrected. */
-  if (ed != nullptr) {
-SEQ_for_each_callback(&ed->seqbase, version_fix_seq_meta_range, scene);
-  }
-}
   }
 
   /* Special case to handle older in-development 3.1 files, before change from 
3.0 branch gets

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [1f5d81aaf83] temp-vse-retiming-tool: Always draw add button gizmo

2022-11-15 Thread Richard Antalik
Commit: 1f5d81aaf83ccb727b3e695a21028b5c8593c87b
Author: Richard Antalik
Date:   Tue Nov 15 13:54:59 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB1f5d81aaf83ccb727b3e695a21028b5c8593c87b

Always draw add button gizmo

===

M   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc

===

diff --git 
a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
index 4ea496cd786..2d5cc313ce3 100644
--- a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
@@ -52,7 +52,7 @@
 
 using blender::MutableSpan;
 
-#define REMOVE_GIZMO_HEIGHT 12.0f * U.dpi_fac/* Pixels from bottom of 
strip.  */
+#define REMOVE_GIZMO_HEIGHT 12.0f * U.dpi_fac /* Pixels from bottom of 
strip.  */
 #define RETIME_HANDLE_TRIANGLE_SIZE 10.0f * U.dpi_fac /* Also used for 
mouseover test. */
 #define RETIME_BUTTON_SIZE 0.6f   /* Factor based on icon 
size. */
 
@@ -68,8 +68,7 @@ static float handle_x_get(const Sequence *seq, const 
SeqRetimingHandle *handle)
   const SeqRetimingHandle *last_handle = SEQ_retiming_last_handle_get(seq);
   const bool is_last_handle = (handle == last_handle);
 
-  return SEQ_time_start_frame_get(seq) + handle->strip_frame_index +
- (is_last_handle ? 1 : 0);
+  return SEQ_time_start_frame_get(seq) + handle->strip_frame_index + 
(is_last_handle ? 1 : 0);
 }
 
 static float handle_y_get(const Sequence *seq, const SeqRetimingHandle *handle)
@@ -78,15 +77,16 @@ static float handle_y_get(const Sequence *seq, const 
SeqRetimingHandle *handle)
 }
 
 static const SeqRetimingHandle *mouse_over_handle_get(const Sequence *seq,
- const View2D *v2d,
- const int mval[2])
+  const View2D *v2d,
+  const int mval[2])
 {
   int best_distance = INT_MAX;
   const SeqRetimingHandle *best_handle = NULL;
 
   MutableSpan handles = SEQ_retiming_handles_get(seq);
-  for (const SeqRetimingHandle& handle : handles) {
-int distance = round_fl_to_int(fabsf(UI_view2d_view_to_region_x(v2d, 
handle_x_get(seq, &handle)) - mval[0]));
+  for (const SeqRetimingHandle &handle : handles) {
+int distance = round_fl_to_int(
+fabsf(UI_view2d_view_to_region_x(v2d, handle_x_get(seq, &handle)) - 
mval[0]));
 
 if (distance < RETIME_HANDLE_TRIANGLE_SIZE && distance < best_distance) {
   best_distance = distance;
@@ -177,7 +177,7 @@ static ButtonDimensions button_dimensions_get(const 
bContext *C, const RetimeBut
 {
   const Scene *scene = CTX_data_scene(C);
   const View2D *v2d = UI_view2d_fromcontext(C);
-  const Sequence *seq = gizmo->seq_under_mouse;
+  Sequence *seq = active_seq_from_context(C);
 
   const float icon_height = UI_icon_get_height(gizmo->icon_id) * U.dpi_fac;
   const float icon_width = UI_icon_get_width(gizmo->icon_id) * U.dpi_fac;
@@ -208,12 +208,14 @@ static rctf button_box_get(const bContext *C, const 
RetimeButtonGizmo *gizmo)
 static void gizmo_retime_handle_add_draw(const bContext *C, wmGizmo *gz)
 {
   RetimeButtonGizmo *gizmo = (RetimeButtonGizmo *)gz;
-  if (gizmo->seq_under_mouse == NULL) {
+
+  Sequence *seq = active_seq_from_context(C);
+  if (seq == NULL) {
 return;
   }
 
   const ButtonDimensions button = button_dimensions_get(C, gizmo);
-  const rctf strip_box = strip_box_get(C, gizmo->seq_under_mouse);
+  const rctf strip_box = strip_box_get(C, seq);
   if (!BLI_rctf_isect_pt(&strip_box, button.x, button.y)) {
 return;
   }
@@ -318,13 +320,14 @@ static void retime_handle_draw(const bContext *C,
 {
   const Scene *scene = CTX_data_scene(C);
   if (handle_x_get(seq, handle) == SEQ_time_left_handle_frame_get(scene, seq)) 
{
-return;  
+return;
   }
 
   const View2D *v2d = UI_view2d_fromcontext(C);
   const rctf strip_box = strip_box_get(C, seq);
-  if (!BLI_rctf_isect_x(&strip_box,
-UI_view2d_view_to_region_x(v2d, handle_x_get(seq, 
handle {  // xxx .is_visible
+  if (!BLI_rctf_isect_x(
+  &strip_box,
+  UI_view2d_view_to_region_x(v2d, handle_x_get(seq, handle {  // 
xxx .is_visible
 return; /* Handle out of strip bounds. */
   }
 
@@ -422,7 +425,7 @@ static void gizmo_retime_handle_draw(const bContext *C, 
wmGizmo *gz)
   SEQ_retiming_data_ensure(CTX_data_scene(C), seq);
   MutableSpan handles = SEQ_retiming_handles_get(seq);
 
-  for (const SeqRetimingHandle& handle : handles) {
+  for (const SeqRetimingHandle &handle : handles) {
 retim

[Bf-blender-cvs] [103fe4d1d19] master: Merge branch 'blender-v3.4-release'

2022-11-14 Thread Richard Antalik
Commit: 103fe4d1d191d0e0fa88139dd326b7c1420a4171
Author: Richard Antalik
Date:   Mon Nov 14 20:09:02 2022 +0100
Branches: master
https://developer.blender.org/rB103fe4d1d191d0e0fa88139dd326b7c1420a4171

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [970be7e65ae] blender-v3.4-release: Fix T100491: Mouse selection is inaccurate in NLA Editor

2022-11-14 Thread Richard Antalik
Commit: 970be7e65ae7fce9d58839c3c0bd65bd6dced74b
Author: Richard Antalik
Date:   Mon Nov 14 19:57:42 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB970be7e65ae7fce9d58839c3c0bd65bd6dced74b

Fix T100491: Mouse selection is inaccurate in NLA Editor

Selection range is +/-7 pixels to actual clicked position, but strip selection
was biased towards rightmost strip.

To make selection more intuitive, select closest strip to clicked position, and
stop iterating when strip intersects clicked pixel.

Reviewed By: sybren

Differential Revision: https://developer.blender.org/D15728

===

M   source/blender/blenkernel/BKE_nla.h
M   source/blender/blenkernel/intern/nla.c
M   source/blender/editors/space_nla/nla_select.c

===

diff --git a/source/blender/blenkernel/BKE_nla.h 
b/source/blender/blenkernel/BKE_nla.h
index 2913beee759..41980999a18 100644
--- a/source/blender/blenkernel/BKE_nla.h
+++ b/source/blender/blenkernel/BKE_nla.h
@@ -279,6 +279,11 @@ void BKE_nlastrip_set_active(struct AnimData *adt, struct 
NlaStrip *strip);
  * Does the given NLA-strip fall within the given bounds (times)?.
  */
 bool BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max);
+/**
+ * Return the distance from the given frame to the NLA strip, measured in 
frames.
+ * If the given frame intersects the NLA strip, the distance is zero.
+ */
+float BKE_nlastrip_distance_to_frame(const struct NlaStrip *strip, float 
timeline_frame);
 /**
  * Recalculate the start and end frames for the current strip, after changing
  * the extents of the action or the mapping (repeats or scale factor) info.
diff --git a/source/blender/blenkernel/intern/nla.c 
b/source/blender/blenkernel/intern/nla.c
index c0aff204069..ad8085be3d6 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -1360,6 +1360,17 @@ bool BKE_nlastrip_within_bounds(NlaStrip *strip, float 
min, float max)
   return true;
 }
 
+float BKE_nlastrip_distance_to_frame(const NlaStrip *strip, const float 
timeline_frame)
+{
+  if (timeline_frame < strip->start) {
+return strip->start - timeline_frame;
+  }
+  if (strip->end < timeline_frame) {
+return timeline_frame - strip->end;
+  }
+  return 0.0f;
+}
+
 /* Ensure that strip doesn't overlap those around it after resizing
  * by offsetting those which follow. */
 static void nlastrip_fix_resize_overlaps(NlaStrip *strip)
diff --git a/source/blender/editors/space_nla/nla_select.c 
b/source/blender/editors/space_nla/nla_select.c
index ce93e36474f..281782123d1 100644
--- a/source/blender/editors/space_nla/nla_select.c
+++ b/source/blender/editors/space_nla/nla_select.c
@@ -14,6 +14,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_blenlib.h"
+#include "BLI_math_base.h"
 
 #include "BKE_context.h"
 #include "BKE_nla.h"
@@ -286,20 +287,35 @@ static void nlaedit_strip_at_region_position(
   /* x-range to check is +/- 7 (in screen/region-space) on either side of 
mouse click
* (that is the size of keyframe icons, so user should be expecting similar 
tolerances)
*/
-  float xmin = UI_view2d_region_to_view_x(v2d, region_x - 7);
-  float xmax = UI_view2d_region_to_view_x(v2d, region_x + 7);
+  const float mouse_x = UI_view2d_region_to_view_x(v2d, region_x);
+  const float xmin = UI_view2d_region_to_view_x(v2d, region_x - 7);
+  const float xmax = UI_view2d_region_to_view_x(v2d, region_x + 7);
 
   bAnimListElem *ale = BLI_findlink(&anim_data, channel_index);
   if (ale != NULL) {
 if (ale->type == ANIMTYPE_NLATRACK) {
   NlaTrack *nlt = (NlaTrack *)ale->data;
+  float best_distance = MAXFRAMEF;
 
   LISTBASE_FOREACH (NlaStrip *, strip, &nlt->strips) {
 if (BKE_nlastrip_within_bounds(strip, xmin, xmax)) {
+  const float distance = BKE_nlastrip_distance_to_frame(strip, 
mouse_x);
+
+  /* Skip if strip is further away from mouse cursor than any previous 
strip. */
+  if (distance > best_distance) {
+continue;
+  }
+
   *r_ale = ale;
   *r_strip = strip;
+  best_distance = distance;
 
   BLI_remlink(&anim_data, ale);
+
+  /* Mouse cursor was directly on strip, no need to check other 
strips. */
+  if (distance == 0.0f) {
+break;
+  }
 }
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9aa82b0bf44] temp-vse-retiming-tool: Implement meta strip retiming for sound

2022-11-14 Thread Richard Antalik
Commit: 9aa82b0bf44a8992d4fa5000a8f597a65ab4ed90
Author: Richard Antalik
Date:   Fri Oct 21 20:59:19 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB9aa82b0bf44a8992d4fa5000a8f597a65ab4ed90

Implement meta strip retiming for sound

===

M   extern/audaspace/src/sequence/SequenceHandle.cpp
M   source/blender/editors/space_sequencer/sequencer_draw.c
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/effects.c
M   source/blender/sequencer/intern/image_cache.c
M   source/blender/sequencer/intern/proxy.c
M   source/blender/sequencer/intern/render.c
M   source/blender/sequencer/intern/strip_retiming.cc
M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h

===

diff --git a/extern/audaspace/src/sequence/SequenceHandle.cpp 
b/extern/audaspace/src/sequence/SequenceHandle.cpp
index 6021ce0ee59..236e828963a 100644
--- a/extern/audaspace/src/sequence/SequenceHandle.cpp
+++ b/extern/audaspace/src/sequence/SequenceHandle.cpp
@@ -250,7 +250,7 @@ bool SequenceHandle::seek(double position)

float target_frame = 0;
 
-   // XXX this can be optimized if there is only 1 point
+   // XXX this can be optimized for constant interpolation
if (pitch_property != nullptr){
for (int i = 0; i < seek_frame; i++){
float pitch;
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c 
b/source/blender/editors/space_sequencer/sequencer_draw.c
index a6916f9d031..3a95475c1cc 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -413,7 +413,6 @@ static void draw_seq_waveform_overlay(
 
   const float frames_per_pixel = BLI_rctf_size_x(®ion->v2d.cur) / 
region->winx;
   const float samples_per_frame = SOUND_WAVE_SAMPLES_PER_SECOND / FPS;
-  float samples_per_pixel = samples_per_frame * frames_per_pixel;
 
   /* Align strip start with nearest pixel to prevent waveform flickering. */
   const float x1_aligned = align_frame_with_pixel(x1, frames_per_pixel);
@@ -439,15 +438,16 @@ static void draw_seq_waveform_overlay(
   size_t wave_data_len = 0;
 
   /* Offset must be also aligned, otherwise waveform flickers when moving left 
handle. */
-  const float strip_offset = align_frame_with_pixel(seq->startofs + 
seq->anim_startofs,
-frames_per_pixel);
-  float start_sample = strip_offset * samples_per_frame;
-  start_sample += seq->sound->offset_time * SOUND_WAVE_SAMPLES_PER_SECOND;
+  float start_frame = SEQ_time_left_handle_frame_get(scene, seq);
+
   /* Add off-screen part of strip to offset. */
-  start_sample += (frame_start - x1_aligned) * samples_per_frame;
+  start_frame += (frame_start - x1_aligned);
+  start_frame += seq->sound->offset_time / FPS;
 
   for (int i = 0; i < pixels_to_draw; i++) {
-float sample = start_sample + i * samples_per_pixel;
+float timeline_frame = start_frame + i * frames_per_pixel;
+float frame_index = SEQ_give_frame_index(scene, seq, timeline_frame);
+float sample = frame_index * samples_per_frame;
 int sample_index = round_fl_to_int(sample);
 
 if (sample_index < 0) {
@@ -468,6 +468,8 @@ static void draw_seq_waveform_overlay(
   value_min = (1.0f - f) * value_min + f * waveform->data[sample_index * 3 
+ 3];
   value_max = (1.0f - f) * value_max + f * waveform->data[sample_index * 3 
+ 4];
   rms = (1.0f - f) * rms + f * waveform->data[sample_index * 3 + 5];
+
+  float samples_per_pixel = samples_per_frame * frames_per_pixel;
   if (samples_per_pixel > 1.0f) {
 /* We need to sum up the values we skip over until the next step. */
 float next_pos = sample + samples_per_pixel;
diff --git a/source/blender/sequencer/SEQ_time.h 
b/source/blender/sequencer/SEQ_time.h
index 49277cd28f7..31c645518d7 100644
--- a/source/blender/sequencer/SEQ_time.h
+++ b/source/blender/sequencer/SEQ_time.h
@@ -74,6 +74,11 @@ int SEQ_time_find_next_prev_edit(struct Scene *scene,
 bool SEQ_time_strip_intersects_frame(const struct Scene *scene,
  const struct Sequence *seq,
  int timeline_frame);
+/**
+ * Returns true if strip has frames without content to render.
+ */
+float SEQ_give_frame_index(const struct Scene *scene, struct Sequence *seq, 
float timeline_frame);
+
 /**
  * Returns true if strip has frames without content to render.
  */
diff --git a/source/blender/sequencer/intern/effects.c 
b/source/blender/sequencer/intern/effects.c
index 8469876ba25..8c99fcc0713 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -2617,7 +2617,7 @@ 

[Bf-blender-cvs] [4d729b3b3fa] temp-vse-retiming-tool: Add sound strip retiming support

2022-11-14 Thread Richard Antalik
Commit: 4d729b3b3fa3e9e53ae83a7f1177c0fbc9aa3833
Author: Richard Antalik
Date:   Fri Nov 4 18:26:15 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB4d729b3b3fa3e9e53ae83a7f1177c0fbc9aa3833

Add sound strip retiming support

Differential Revision: https://developer.blender.org/D16389

===

M   extern/audaspace/src/sequence/SequenceHandle.cpp
M   source/blender/editors/space_sequencer/sequencer_draw.c
M   source/blender/makesrna/intern/rna_scene.c
M   source/blender/sequencer/intern/sequencer.c
M   source/blender/sequencer/intern/strip_add.c
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/extern/audaspace/src/sequence/SequenceHandle.cpp 
b/extern/audaspace/src/sequence/SequenceHandle.cpp
index 236e828963a..bb739d812de 100644
--- a/extern/audaspace/src/sequence/SequenceHandle.cpp
+++ b/extern/audaspace/src/sequence/SequenceHandle.cpp
@@ -249,9 +249,7 @@ bool SequenceHandle::seek(double position)
AnimateableProperty *pitch_property = 
m_entry->getAnimProperty(AP_PITCH);

float target_frame = 0;
-
-   // XXX this can be optimized for constant interpolation
-   if (pitch_property != nullptr){
+   if (pitch_property != nullptr){
for (int i = 0; i < seek_frame; i++){
float pitch;
pitch_property->read(i, &pitch);
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c 
b/source/blender/editors/space_sequencer/sequencer_draw.c
index 3a95475c1cc..140f74d871c 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -446,6 +446,7 @@ static void draw_seq_waveform_overlay(
 
   for (int i = 0; i < pixels_to_draw; i++) {
 float timeline_frame = start_frame + i * frames_per_pixel;
+/* TODO: Use linear interpolation between frames to avoid bad drawing 
quality. */
 float frame_index = SEQ_give_frame_index(scene, seq, timeline_frame);
 float sample = frame_index * samples_per_frame;
 int sample_index = round_fl_to_int(sample);
diff --git a/source/blender/makesrna/intern/rna_scene.c 
b/source/blender/makesrna/intern/rna_scene.c
index fde8fcf651c..9a4b42eb052 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -33,6 +33,7 @@
 #include "BKE_idtype.h"
 #include "BKE_paint.h"
 #include "BKE_volume.h"
+#include "BKE_sound.h"
 
 #include "ED_gpencil.h"
 #include "ED_object.h"
@@ -888,9 +889,10 @@ static void rna_Scene_camera_update(Main *bmain, Scene 
*UNUSED(scene_unused), Po
   DEG_relations_tag_update(bmain);
 }
 
-static void rna_Scene_fps_update(Main *bmain, Scene *UNUSED(active_scene), 
PointerRNA *ptr)
+static void rna_Scene_fps_update(Main *bmain, Scene *active_scene, PointerRNA 
*ptr)
 {
   Scene *scene = (Scene *)ptr->owner_id;
+  BKE_sound_update_fps(bmain, active_scene);
   DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_FPS | 
ID_RECALC_SEQUENCER_STRIPS);
   /* NOTE: Tag via dependency graph will take care of all the updates ion the 
evaluated domain,
* however, changes in FPS actually modifies an original skip length,
diff --git a/source/blender/sequencer/intern/sequencer.c 
b/source/blender/sequencer/intern/sequencer.c
index d263c2e0437..f7281b67e5f 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -990,7 +990,7 @@ static bool seq_update_seq_cb(Sequence *seq, void 
*user_data)
 BKE_sound_set_scene_sound_volume(
 seq->scene_sound, seq->volume, (seq->flag & SEQ_AUDIO_VOLUME_ANIMATED) 
!= 0);
 SEQ_retiming_sound_animation_data_set(scene, seq);
-BKE_sound_set_scene_sound_pan(
+ BKE_sound_set_scene_sound_pan(
 seq->scene_sound, seq->pan, (seq->flag & SEQ_AUDIO_PAN_ANIMATED) != 0);
   }
   return true;
diff --git a/source/blender/sequencer/intern/strip_add.c 
b/source/blender/sequencer/intern/strip_add.c
index 7f4c91724fc..b3a364fa800 100644
--- a/source/blender/sequencer/intern/strip_add.c
+++ b/source/blender/sequencer/intern/strip_add.c
@@ -431,6 +431,7 @@ Sequence *SEQ_add_movie_strip(Main *bmain, Scene *scene, 
ListBase *seqbase, SeqL
 if (load_data->flags & SEQ_LOAD_MOVIE_SYNC_FPS) {
   scene->r.frs_sec = fps_denom;
   scene->r.frs_sec_base = fps_num;
+  DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_FPS | 
ID_RECALC_SEQUENCER_STRIPS);
 }
 
 load_data->r_video_stream_start = IMD_anim_get_offset(anim_arr[0]);
diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index f95a9a3596f..aa1642d40b6 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/

[Bf-blender-cvs] [af23a9585d7] temp-vse-retiming-tool: Merge branch 'retiming-sound' into temp-vse-retiming-tool

2022-11-14 Thread Richard Antalik
Commit: af23a9585d7bf874f2c7d6dd5ecf9d6671913e7e
Author: Richard Antalik
Date:   Mon Nov 14 16:22:28 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rBaf23a9585d7bf874f2c7d6dd5ecf9d6671913e7e

Merge branch 'retiming-sound' into temp-vse-retiming-tool

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f5799af5d29] temp-vse-retiming-tool: VSE: Add retiming tool

2022-11-14 Thread Richard Antalik
Commit: f5799af5d293711002726e2f9d18e16a7d62ded1
Author: Richard Antalik
Date:   Mon Nov 14 15:40:42 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rBf5799af5d293711002726e2f9d18e16a7d62ded1

VSE: Add retiming tool

This tools allows to change strip playback speed by manipulating
retiming handles. More handles can be added to single strip to create
variable playback speed.

Demo:
{F13511886}

Ref: T100337

Differential Revision: https://developer.blender.org/D15945

===

M   release/scripts/startup/bl_ui/space_sequencer.py
M   release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M   source/blender/editors/space_sequencer/CMakeLists.txt
A   source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
A   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
M   source/blender/editors/space_sequencer/sequencer_intern.h
M   source/blender/editors/space_sequencer/sequencer_ops.c
A   source/blender/editors/space_sequencer/sequencer_retiming.cc
M   source/blender/editors/space_sequencer/space_sequencer.c
M   source/blender/makesdna/DNA_sequence_types.h
M   source/blender/makesrna/intern/rna_internal.h
M   source/blender/makesrna/intern/rna_sequencer.c
M   source/blender/makesrna/intern/rna_sequencer_api.c
M   source/blender/sequencer/CMakeLists.txt
A   source/blender/sequencer/SEQ_retiming.hh
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/sequencer.c
A   source/blender/sequencer/intern/strip_retiming.cc
M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h

===

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py 
b/release/scripts/startup/bl_ui/space_sequencer.py
index e703cf7f9c6..3f72454015b 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1870,11 +1870,17 @@ class SEQUENCER_PT_time(SequencerButtonsPanel, Panel):
 split.label(text="Channel")
 split.prop(strip, "channel", text="")
 
+use_retiming_tool = strip.use_retiming_tool
+
 if not is_effect:
-split = layout.split(factor=0.5 + max_factor)
-split.alignment = 'RIGHT'
-split.label(text="Speed Factor")
-split.prop(strip, "speed_factor", text="")
+if not use_retiming_tool:
+split = layout.split(factor=0.5 + max_factor)
+split.alignment = 'RIGHT'
+split.label(text="Speed Factor")
+split.prop(strip, "speed_factor", text="")
+else:
+layout.operator("sequencer.retiming_reset")
+
 
 sub = layout.column(align=True)
 split = sub.split(factor=0.5 + max_factor, align=True)
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py 
b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 20021762d5a..a38b6c8451f 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -2558,6 +2558,17 @@ class _defs_sequencer_generic:
 options={'KEYMAP_FALLBACK'},
 )
 
+@ToolDef.from_fn
+def retime():
+return dict(
+idname="builtin.retime",
+label="Retime",
+icon="none",
+widget="SEQUENCER_GGT_gizmo_retime",
+operator="transform.translate",
+keymap=None,
+)
+
 @ToolDef.from_fn
 def sample():
 return dict(
@@ -3248,6 +3259,7 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, 
Panel):
 'SEQUENCER': [
 *_tools_select,
 _defs_sequencer_generic.blade,
+_defs_sequencer_generic.retime,
 ],
 'SEQUENCER_PREVIEW': [
 *_tools_select,
diff --git a/source/blender/editors/space_sequencer/CMakeLists.txt 
b/source/blender/editors/space_sequencer/CMakeLists.txt
index 5466beca255..419265ff299 100644
--- a/source/blender/editors/space_sequencer/CMakeLists.txt
+++ b/source/blender/editors/space_sequencer/CMakeLists.txt
@@ -33,10 +33,13 @@ set(SRC
   sequencer_drag_drop.c
   sequencer_draw.c
   sequencer_edit.c
+  sequencer_gizmo_retime.cc
+  sequencer_gizmo_retime_type.cc
   sequencer_modifier.c
   sequencer_ops.c
   sequencer_preview.c
   sequencer_proxy.c
+  sequencer_retiming.cc
   sequencer_scopes.c
   sequencer_select.c
   sequencer_thumbnails.c
diff --git a/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc

[Bf-blender-cvs] [6ff11ce2006] temp-vse-retiming-tool: Fix format, fix smaller issues

2022-11-14 Thread Richard Antalik
Commit: 6ff11ce200630d38bfeabe5238d2aef0713cf5c3
Author: Richard Antalik
Date:   Fri Nov 4 19:22:38 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB6ff11ce200630d38bfeabe5238d2aef0713cf5c3

Fix format, fix smaller issues

===

M   source/blender/makesrna/intern/rna_scene.c
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/sequencer.c
M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git a/source/blender/makesrna/intern/rna_scene.c 
b/source/blender/makesrna/intern/rna_scene.c
index 9a4b42eb052..fde8fcf651c 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -33,7 +33,6 @@
 #include "BKE_idtype.h"
 #include "BKE_paint.h"
 #include "BKE_volume.h"
-#include "BKE_sound.h"
 
 #include "ED_gpencil.h"
 #include "ED_object.h"
@@ -889,10 +888,9 @@ static void rna_Scene_camera_update(Main *bmain, Scene 
*UNUSED(scene_unused), Po
   DEG_relations_tag_update(bmain);
 }
 
-static void rna_Scene_fps_update(Main *bmain, Scene *active_scene, PointerRNA 
*ptr)
+static void rna_Scene_fps_update(Main *bmain, Scene *UNUSED(active_scene), 
PointerRNA *ptr)
 {
   Scene *scene = (Scene *)ptr->owner_id;
-  BKE_sound_update_fps(bmain, active_scene);
   DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_FPS | 
ID_RECALC_SEQUENCER_STRIPS);
   /* NOTE: Tag via dependency graph will take care of all the updates ion the 
evaluated domain,
* however, changes in FPS actually modifies an original skip length,
diff --git a/source/blender/sequencer/SEQ_time.h 
b/source/blender/sequencer/SEQ_time.h
index 31c645518d7..b70a9f57d64 100644
--- a/source/blender/sequencer/SEQ_time.h
+++ b/source/blender/sequencer/SEQ_time.h
@@ -157,9 +157,10 @@ void SEQ_retiming_offset_handle(const struct Scene *scene,
 float SEQ_retiming_handle_speed_get(const struct Scene *scene,
 const struct Sequence *seq,
 const struct SeqRetimingHandle *handle);
-int SEQ_retiming_handle_index_get(const struct Sequence *seq, const struct 
SeqRetimingHandle *handle);
+int SEQ_retiming_handle_index_get(const struct Sequence *seq,
+  const struct SeqRetimingHandle *handle);
 
-void SEQ_retiming_sound_animation_data_set(const struct Scene *scene,const 
struct Sequence *seq);
+void SEQ_retiming_sound_animation_data_set(const struct Scene *scene, const 
struct Sequence *seq);
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/sequencer/intern/sequencer.c 
b/source/blender/sequencer/intern/sequencer.c
index f7281b67e5f..d263c2e0437 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -990,7 +990,7 @@ static bool seq_update_seq_cb(Sequence *seq, void 
*user_data)
 BKE_sound_set_scene_sound_volume(
 seq->scene_sound, seq->volume, (seq->flag & SEQ_AUDIO_VOLUME_ANIMATED) 
!= 0);
 SEQ_retiming_sound_animation_data_set(scene, seq);
- BKE_sound_set_scene_sound_pan(
+BKE_sound_set_scene_sound_pan(
 seq->scene_sound, seq->pan, (seq->flag & SEQ_AUDIO_PAN_ANIMATED) != 0);
   }
   return true;
diff --git a/source/blender/sequencer/intern/strip_retiming.cc 
b/source/blender/sequencer/intern/strip_retiming.cc
index 69c233b16d1..d7262efc46c 100644
--- a/source/blender/sequencer/intern/strip_retiming.cc
+++ b/source/blender/sequencer/intern/strip_retiming.cc
@@ -39,7 +39,6 @@
 #include "strip_time.h"
 #include "utils.h"
 
-
 using blender::MutableSpan;
 
 MutableSpan SEQ_retiming_handles_get(const Sequence *seq)
@@ -256,7 +255,7 @@ using std::vector;
 
 class RetimingRange {
  public:
-  int start, end ;
+  int start, end;
   float speed;
 
   enum eIntersectType {
@@ -267,11 +266,12 @@ class RetimingRange {
 NONE,
   };
 
-  RetimingRange(int start_frame, int end_frame, float speed): 
start(start_frame), end(end_frame), speed(speed)
+  RetimingRange(int start_frame, int end_frame, float speed)
+  : start(start_frame), end(end_frame), speed(speed)
   {
   }
 
-  const eIntersectType intersect_type(const RetimingRange& other) const 
+  const eIntersectType intersect_type(const RetimingRange &other) const
   {
 if (other.start <= start && other.end >= end) {
   return FULL;
@@ -279,10 +279,10 @@ class RetimingRange {
 if (other.start > start && other.start < end && other.end > start && 
other.end < end) {
   return INSIDE;
 }
-if (other.start > start && other.start < end){
+if (other.start > start && other.start < end) {
   return PARTIAL_END;
 }
-if (other.end > start && other.en

[Bf-blender-cvs] [5449ae00534] temp-vse-retiming-tool: Fix speed range math when one of strips has no retiming data

2022-11-14 Thread Richard Antalik
Commit: 5449ae00534ea8a1f48fba1e5fd732c0aa77a32f
Author: Richard Antalik
Date:   Mon Nov 14 16:13:25 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB5449ae00534ea8a1f48fba1e5fd732c0aa77a32f

Fix speed range math when one of strips has no retiming data

===

M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git a/source/blender/sequencer/intern/strip_retiming.cc 
b/source/blender/sequencer/intern/strip_retiming.cc
index d7262efc46c..1a61ccce013 100644
--- a/source/blender/sequencer/intern/strip_retiming.cc
+++ b/source/blender/sequencer/intern/strip_retiming.cc
@@ -311,34 +311,45 @@ class RetimingRangeData {
 
   RetimingRangeData &operator*=(const RetimingRangeData rhs)
   {
-for (int i = 0; i < ranges.size(); i++) {
-  RetimingRange &range = ranges[i];
+if (ranges.size() == 0) {
   for (const RetimingRange &rhs_range : rhs.ranges) {
-if (range.intersect_type(rhs_range) == range.NONE) {
-  continue;
-}
-else if (range.intersect_type(rhs_range) == range.FULL) {
-  range.speed *= rhs_range.speed;
-}
-else if (range.intersect_type(rhs_range) == range.PARTIAL_START) {
-  RetimingRange range_left = RetimingRange(
-  range.start, rhs_range.end, range.speed * rhs_range.speed);
-  range.start = rhs_range.end + 1;
-  ranges.insert(ranges.begin() + i, range_left);
-}
-else if (range.intersect_type(rhs_range) == range.PARTIAL_END) {
-  RetimingRange range_left = RetimingRange(range.start, 
rhs_range.start - 1, range.speed);
-  range.start = rhs_range.start;
-  ranges.insert(ranges.begin() + i, range_left);
-}
-else if (range.intersect_type(rhs_range) == range.INSIDE) {
-  RetimingRange range_left = RetimingRange(range.start, 
rhs_range.start - 1, range.speed);
-  RetimingRange range_mid = RetimingRange(
-  rhs_range.start, rhs_range.start, rhs_range.speed * range.speed);
-  range.start = rhs_range.end + 1;
-  ranges.insert(ranges.begin() + i, range_left);
-  ranges.insert(ranges.begin() + i, range_mid);
-  break;
+RetimingRange range = RetimingRange(
+rhs_range.start, rhs_range.end, rhs_range.speed);
+ranges.push_back(range);
+  }
+}
+else {
+  for (int i = 0; i < ranges.size(); i++) {
+RetimingRange &range = ranges[i];
+for (const RetimingRange &rhs_range : rhs.ranges) {
+  if (range.intersect_type(rhs_range) == range.NONE) {
+continue;
+  }
+  else if (range.intersect_type(rhs_range) == range.FULL) {
+range.speed *= rhs_range.speed;
+  }
+  else if (range.intersect_type(rhs_range) == range.PARTIAL_START) {
+RetimingRange range_left = RetimingRange(
+range.start, rhs_range.end, range.speed * rhs_range.speed);
+range.start = rhs_range.end + 1;
+ranges.insert(ranges.begin() + i, range_left);
+  }
+  else if (range.intersect_type(rhs_range) == range.PARTIAL_END) {
+RetimingRange range_left = RetimingRange(
+range.start, rhs_range.start - 1, range.speed);
+range.start = rhs_range.start;
+ranges.insert(ranges.begin() + i, range_left);
+  }
+  else if (range.intersect_type(rhs_range) == range.INSIDE) {
+RetimingRange range_left = RetimingRange(
+range.start, rhs_range.start - 1, range.speed);
+RetimingRange range_mid = RetimingRange(
+rhs_range.start, rhs_range.start, rhs_range.speed * 
range.speed);
+range.start = rhs_range.end + 1;
+ranges.insert(ranges.begin() + i, range_left);
+ranges.insert(ranges.begin() + i, range_mid);
+break;
+  }
 }
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6ecdd045c71] temp-vse-retiming-tool: Implement constant range pitch definition and audaspace seek fix

2022-11-14 Thread Richard Antalik
Commit: 6ecdd045c71915fbb89da4d11bbe1455d854f3c5
Author: Richard Antalik
Date:   Thu Oct 20 22:14:53 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB6ecdd045c71915fbb89da4d11bbe1455d854f3c5

Implement constant range pitch definition and audaspace seek fix

===

M   extern/audaspace/bindings/C/AUD_Sequence.cpp
M   extern/audaspace/bindings/C/AUD_Sequence.h
M   extern/audaspace/include/sequence/AnimateableProperty.h
M   extern/audaspace/include/sequence/SequenceEntry.h
M   extern/audaspace/src/sequence/AnimateableProperty.cpp
M   extern/audaspace/src/sequence/SequenceData.cpp
M   extern/audaspace/src/sequence/SequenceEntry.cpp
M   extern/audaspace/src/sequence/SequenceHandle.cpp
M   source/blender/blenkernel/BKE_sound.h
M   source/blender/blenkernel/intern/sound.c
M   source/blender/sequencer/intern/sequencer.c
M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git a/extern/audaspace/bindings/C/AUD_Sequence.cpp 
b/extern/audaspace/bindings/C/AUD_Sequence.cpp
index e3f88629657..93e4558c7b7 100644
--- a/extern/audaspace/bindings/C/AUD_Sequence.cpp
+++ b/extern/audaspace/bindings/C/AUD_Sequence.cpp
@@ -165,6 +165,12 @@ AUD_API void AUD_SequenceEntry_move(AUD_SequenceEntry* 
entry, double begin, doub
(*entry)->move(begin, end, skip);
 }
 
+AUD_API void 
AUD_SequenceEntry_setAnimationData_constant_range(AUD_SequenceEntry* entry, 
AUD_AnimateablePropertyType type, int frame_start, int frame_end, float* data)
+{
+   AnimateableProperty* prop = 
(*entry)->getAnimProperty(static_cast(type));
+   prop->write_range(data, frame_start, frame_end);
+}
+
 AUD_API void AUD_SequenceEntry_setAnimationData(AUD_SequenceEntry* entry, 
AUD_AnimateablePropertyType type, int frame, float* data, char animated)
 {
AnimateableProperty* prop = 
(*entry)->getAnimProperty(static_cast(type));
diff --git a/extern/audaspace/bindings/C/AUD_Sequence.h 
b/extern/audaspace/bindings/C/AUD_Sequence.h
index bdf1a61a2de..ee97c6081f3 100644
--- a/extern/audaspace/bindings/C/AUD_Sequence.h
+++ b/extern/audaspace/bindings/C/AUD_Sequence.h
@@ -169,6 +169,16 @@ extern AUD_API void 
AUD_Sequence_setSpeedOfSound(AUD_Sound* sequence, float valu
  */
 extern AUD_API void AUD_SequenceEntry_move(AUD_SequenceEntry* entry, double 
begin, double end, double skip);
 
+/**
+ * Writes animation data to a sequenced entry.
+ * \param entry The sequenced entry.
+ * \param type The type of animation data.
+ * \param frame The frame this data is for.
+ * \param data The data to write.
+ * \param animated Whether the attribute is animated.
+ */
+AUD_API void 
AUD_SequenceEntry_setAnimationData_constant_range(AUD_SequenceEntry* entry, 
AUD_AnimateablePropertyType type, int frame_start, int frame_end, float* data);
+
 /**
  * Writes animation data to a sequenced entry.
  * \param entry The sequenced entry.
diff --git a/extern/audaspace/include/sequence/AnimateableProperty.h 
b/extern/audaspace/include/sequence/AnimateableProperty.h
index 2c3fcf23f8b..76cb5ecd3f9 100644
--- a/extern/audaspace/include/sequence/AnimateableProperty.h
+++ b/extern/audaspace/include/sequence/AnimateableProperty.h
@@ -112,6 +112,14 @@ public:
 */
void write(const float* data, int position, int count);
 
+   /**
+* Fills the properties frame range with constant value and marks it 
animated.
+* \param data The new value.
+* \param position The start position in the animation in frames.
+* \param position The end position in the animation in frames.
+*/
+void write_range(const float* data, int position_start, int position_end);
+
/**
 * Reads the properties value.
 * \param position The position in the animation in frames.
diff --git a/extern/audaspace/include/sequence/SequenceEntry.h 
b/extern/audaspace/include/sequence/SequenceEntry.h
index b8e9f116ee4..2495d08137c 100644
--- a/extern/audaspace/include/sequence/SequenceEntry.h
+++ b/extern/audaspace/include/sequence/SequenceEntry.h
@@ -63,6 +63,9 @@ private:
/// How many seconds are skipped at the beginning.
double m_skip;
 
+/// The FPS of the scene.
+float m_fps;
+
/// Whether the entry is muted.
bool m_muted;
 
@@ -124,7 +127,7 @@ public:
 * \param skip How much seconds should be skipped at the beginning.
 * \param id The ID of the entry.
 */
-   SequenceEntry(std::shared_ptr sound, double begin, double end, 
double skip, int id);
+   SequenceEntry(std::shared_ptr sound, double begin, double end, 
double skip, float fps, int id);
virtual ~SequenceEntry();
 
/**
diff --git a/extern/audaspace/src/sequence/AnimateableProperty.cpp 
b/extern/audaspace/src/sequence/AnimateableProperty.cpp
index 306ba8e07f5..7969947c8bf 

[Bf-blender-cvs] [db5bd228f5b] temp-vse-retiming-tool: Revert custom iterator and abstract retiming handle class. I can't make it do what I want, so only `MutableSpan` is used. Low level code is added

2022-11-14 Thread Richard Antalik
Commit: db5bd228f5b05590a645a9df46321b12026a7583
Author: Richard Antalik
Date:   Wed Oct 19 17:52:38 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rBdb5bd228f5b05590a645a9df46321b12026a7583

Revert custom iterator and abstract retiming handle class. I can't make it do 
what I want, so only `MutableSpan` is used. Low level code is added to module 
code, so API is not ideal, but will leave this for future me to clean up.

===

M   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
M   source/blender/editors/space_sequencer/sequencer_retiming.cc
M   source/blender/sequencer/SEQ_retiming.hh
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git 
a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
index 4711ffaae67..93a1d826288 100644
--- a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
@@ -50,7 +50,9 @@
 /* Own include. */
 #include "sequencer_intern.h"
 
-#define REMOVE_GIZMO_HEIGHT 12.0f * U.dpi_fac;/* Pixels from bottom of 
strip.  */
+using blender::MutableSpan;
+
+#define REMOVE_GIZMO_HEIGHT 12.0f * U.dpi_fac/* Pixels from bottom of 
strip.  */
 #define RETIME_HANDLE_TRIANGLE_SIZE 10.0f * U.dpi_fac /* Also used for 
mouseover test. */
 #define RETIME_BUTTON_SIZE 0.6f   /* Factor based on icon 
size. */
 
@@ -60,141 +62,40 @@ static float strip_y_rescale(const Sequence *seq, const 
float y_value)
   return (y_value * y_range) + seq->machine + SEQ_STRIP_OFSBOTTOM;
 }
 
-class RetimingHandle {
- public:
-  int index;
-  bool is_last_handle;
-
-  RetimingHandle(const Sequence *seq, const SeqRetimingHandle *handle, const 
int handle_index)
-  {
-seq_ = seq;
-handle_ = handle;
-index = handle_index;
-
-const int handle_count = SEQ_retiming_handles_count(seq);
-is_last_handle = (handle_index == handle_count - 1);
-  }
-
-  float x()
-  {
-return SEQ_time_start_frame_get(seq_) + handle_->strip_frame_index + 
(is_last_handle ? 1 : 0);
-  }
-
-  float y()
-  {
-return strip_y_rescale(seq_, handle_->retiming_factor);
-  }
-
-  RetimingHandle next_handle_get()
-  {
-const int handle_count = SEQ_retiming_handles_count(seq_);
-BLI_assert(index < handle_count - 1);
-const SeqRetimingHandle *next = handle_ + 1;
-return RetimingHandle(seq_, next, index + 1);
-  }
+static float handle_x_get(const Sequence *seq, const SeqRetimingHandle *handle)
+{
 
- private:
-  const Sequence *seq_;
-  const SeqRetimingHandle *handle_;
-};
-
-template class RetimingHandlesIterator {
- public:
-  using value_type = SeqRetimingHandle;
-  using pointer = value_type *;
-  using reference = T;
-
-  struct Iterator {
-Iterator(const Sequence *seq, pointer ptr, int handle_index)
-{
-  ptr_ = ptr;
-  seq_ = seq;
-  handle_index_ = handle_index;
-}
+  const SeqRetimingHandle *last_handle = SEQ_retiming_last_handle_get(seq);
+  const bool is_last_handle = (handle == last_handle);
 
-reference operator*() const
-{
-  return reference(seq_, ptr_, handle_index_);
-}
-pointer operator->()
-{
-  return ptr_;
-}
-Iterator &operator++()
-{
-  ptr_++;
-  handle_index_++;
-  return *this;
-}
-Iterator operator++(int)
-{
-  Iterator tmp = *this;
-  ++(*this);
-  return tmp;
-}
-friend bool operator==(const Iterator &a, const Iterator &b)
-{
-  return a.ptr_ == b.ptr_;
-};
-friend bool operator!=(const Iterator &a, const Iterator &b)
-{
-  return a.ptr_ != b.ptr_;
-};
-
-   private:
-pointer ptr_;
-int handle_index_;
-const Sequence *seq_;
-  };
-
-  Iterator begin()
-  {
-return Iterator(seq_, handles_array_, 0);
-  }
-  Iterator end()
-  {
-const int count = this->count();
-return Iterator(seq_, handles_array_ + count, count - 1);
-  }
-
- public:
-  RetimingHandlesIterator(const Sequence *seq)
-  {
-handles_array_ = seq->retiming_handles;
-seq_ = seq;
-  }
+  return SEQ_time_start_frame_get(seq) + handle->strip_frame_index +
+ (is_last_handle ? 1 : 0);
+}
 
-  reference *mouse_over_handle_get(const View2D *v2d, const int mval[2])
-  {
-int best_distance = INT_MAX;
-int best_handle_index = -1;
+static float handle_y_get(const Sequence *seq, const SeqRetimingHandle *handle)
+{
+  return strip_y_rescale(seq, handle->retiming_factor);
+}
 
-RetimingHandlesIterator handles = RetimingHandlesIterator(seq_);
-for (auto handle : handles) {
-  int distance = round_fl_to_int(fabsf(UI_view2d

[Bf-blender-cvs] [638abcbe98c] temp-vse-retiming-tool: Fix format in audaspace

2022-11-14 Thread Richard Antalik
Commit: 638abcbe98c5758b640319c64a337c64916e4279
Author: Richard Antalik
Date:   Fri Nov 4 19:47:36 2022 +0100
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB638abcbe98c5758b640319c64a337c64916e4279

Fix format in audaspace

===

M   extern/audaspace/include/sequence/AnimateableProperty.h
M   extern/audaspace/include/sequence/SequenceEntry.h
M   extern/audaspace/src/sequence/AnimateableProperty.cpp
M   extern/audaspace/src/sequence/SequenceHandle.cpp

===

diff --git a/extern/audaspace/include/sequence/AnimateableProperty.h 
b/extern/audaspace/include/sequence/AnimateableProperty.h
index 76cb5ecd3f9..f04c64f7941 100644
--- a/extern/audaspace/include/sequence/AnimateableProperty.h
+++ b/extern/audaspace/include/sequence/AnimateableProperty.h
@@ -118,7 +118,7 @@ public:
 * \param position The start position in the animation in frames.
 * \param position The end position in the animation in frames.
 */
-void write_range(const float* data, int position_start, int position_end);
+   void write_range(const float* data, int position_start, int 
position_end);
 
/**
 * Reads the properties value.
diff --git a/extern/audaspace/include/sequence/SequenceEntry.h 
b/extern/audaspace/include/sequence/SequenceEntry.h
index 2495d08137c..fc4cbc54924 100644
--- a/extern/audaspace/include/sequence/SequenceEntry.h
+++ b/extern/audaspace/include/sequence/SequenceEntry.h
@@ -63,8 +63,8 @@ private:
/// How many seconds are skipped at the beginning.
double m_skip;
 
-/// The FPS of the scene.
-float m_fps;
+   /// The FPS of the scene.
+   float m_fps;
 
/// Whether the entry is muted.
bool m_muted;
diff --git a/extern/audaspace/src/sequence/AnimateableProperty.cpp 
b/extern/audaspace/src/sequence/AnimateableProperty.cpp
index 7969947c8bf..633fca14cc7 100644
--- a/extern/audaspace/src/sequence/AnimateableProperty.cpp
+++ b/extern/audaspace/src/sequence/AnimateableProperty.cpp
@@ -65,11 +65,13 @@ void AnimateableProperty::write(const float* data)
std::memcpy(getBuffer(), data, m_count * sizeof(float));
 }
 
-void AnimateableProperty::write_range(const float* data, int position_start, 
int position_end){
+void AnimateableProperty::write_range(const float* data, int position_start, 
int position_end)
+{
assureSize(position_end * m_count * sizeof(float), true);
float* buf = getBuffer();
 
-   for (int i = position_start; i < position_end; i++){
+   for(int i = position_start; i < position_end; i++)
+   {
std::memcpy(buf + i * m_count, data, m_count * sizeof(float));
}
m_isAnimated = true;
diff --git a/extern/audaspace/src/sequence/SequenceHandle.cpp 
b/extern/audaspace/src/sequence/SequenceHandle.cpp
index bb739d812de..817fc45badf 100644
--- a/extern/audaspace/src/sequence/SequenceHandle.cpp
+++ b/extern/audaspace/src/sequence/SequenceHandle.cpp
@@ -246,20 +246,24 @@ bool SequenceHandle::seek(double position)
seek_frame = 0;
seek_frame += m_entry->m_skip * m_entry->m_fps;
 
-   AnimateableProperty *pitch_property = 
m_entry->getAnimProperty(AP_PITCH);
-   
+   AnimateableProperty* pitch_property = 
m_entry->getAnimProperty(AP_PITCH);
+
float target_frame = 0;
-   if (pitch_property != nullptr){
-   for (int i = 0; i < seek_frame; i++){
+   if(pitch_property != nullptr)
+   {
+   for(int i = 0; i < seek_frame; i++)
+   {
float pitch;
pitch_property->read(i, &pitch);
target_frame += pitch;
}
-   } else {
+   }
+   else
+   {
target_frame = seek_frame;
}
 
-   double seekpos = target_frame / m_entry->m_fps; 
+   double seekpos = target_frame / m_entry->m_fps;
 
m_handle->setPitch(1.0f);
m_handle->seek(seekpos);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ed2010b2014] temp-vse-retiming-tool: Remove unintended changes

2022-11-14 Thread Richard Antalik
Commit: ed2010b201425b98095b918797a711655c92b013
Author: Richard Antalik
Date:   Tue Oct 18 21:13:41 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rBed2010b201425b98095b918797a711655c92b013

Remove unintended changes

===

M   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc

===

diff --git 
a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
index 8198d19bdb7..4711ffaae67 100644
--- a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
@@ -196,21 +196,6 @@ template class RetimingHandlesIterator {
   SeqRetimingHandle *handles_array_;
 };
 
-class Test {
-  Test(const SeqRetimingHandle *handle)
-  {
-xxx = handle;
-  }
-
- private:
-  const SeqRetimingHandle *xxx;
-};
-
-static void test(Sequence *seq)
-{
-  RetimingHandlesIterator xx = RetimingHandlesIterator(seq);
-}
-
 static float pixels_to_view_width(const bContext *C, const float width)
 {
   const View2D *v2d = UI_view2d_fromcontext(C);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [1bbd5853ff1] temp-vse-retiming-tool: ...Repeat last change after saving all files

2022-11-14 Thread Richard Antalik
Commit: 1bbd5853ff13a51830db057ab32205259e515a85
Author: Richard Antalik
Date:   Thu Oct 20 20:19:05 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB1bbd5853ff13a51830db057ab32205259e515a85

...Repeat last change after saving all files

===

M   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
M   source/blender/sequencer/SEQ_time.h

===

diff --git 
a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
index 61b4a81998f..4ea496cd786 100644
--- a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
@@ -380,7 +380,7 @@ static void retime_speed_text_draw(const bContext *C,
   const int end_frame = SEQ_time_right_handle_frame_get(scene, seq);
 
   int next_handle_index = SEQ_retiming_handle_index_get(seq, handle) + 1;
-  SeqRetimingHandle *next_handle = 
&SEQ_retiming_handles_get(seq)[next_handle_index];
+  const SeqRetimingHandle *next_handle = 
&SEQ_retiming_handles_get(seq)[next_handle_index];
   if (handle_x_get(seq, next_handle) < start_frame || handle_x_get(seq, 
handle) > end_frame) {
 return; /* Label out of strip bounds. */
   }
diff --git a/source/blender/sequencer/SEQ_time.h 
b/source/blender/sequencer/SEQ_time.h
index d66bb85d5cb..8ac3f379226 100644
--- a/source/blender/sequencer/SEQ_time.h
+++ b/source/blender/sequencer/SEQ_time.h
@@ -151,7 +151,7 @@ void SEQ_retiming_offset_handle(const struct Scene *scene,
 const int offset);
 float SEQ_retiming_handle_speed_get(const struct Scene *scene,
 const struct Sequence *seq,
-const int point_index);
+const struct SeqRetimingHandle *handle);
 int SEQ_retiming_handle_index_get(const struct Sequence *seq, const struct 
SeqRetimingHandle *handle);
 #ifdef __cplusplus
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a8274b99a68] temp-vse-retiming-tool: Don't use handle index as argument for `SEQ_retiming_handle_speed_get`

2022-11-14 Thread Richard Antalik
Commit: a8274b99a68ae39f6d3cb92bbd351585b1e8335f
Author: Richard Antalik
Date:   Thu Oct 20 20:13:30 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rBa8274b99a68ae39f6d3cb92bbd351585b1e8335f

Don't use handle index as argument for `SEQ_retiming_handle_speed_get`

===

M   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git 
a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
index 93a1d826288..61b4a81998f 100644
--- a/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
@@ -385,7 +385,7 @@ static void retime_speed_text_draw(const bContext *C,
 return; /* Label out of strip bounds. */
   }
 
-  const float speed = SEQ_retiming_handle_speed_get(scene, seq, 
next_handle_index);
+  const float speed = SEQ_retiming_handle_speed_get(scene, seq, next_handle);
 
   char label_str[20];
   const size_t label_len = BLI_snprintf_rlen(
diff --git a/source/blender/sequencer/intern/strip_retiming.cc 
b/source/blender/sequencer/intern/strip_retiming.cc
index 46be9f61db0..676603b03b4 100644
--- a/source/blender/sequencer/intern/strip_retiming.cc
+++ b/source/blender/sequencer/intern/strip_retiming.cc
@@ -228,14 +228,15 @@ void SEQ_retiming_remove_handle(Sequence *seq, 
SeqRetimingHandle *handle)
   seq->retiming_handle_count--;
 }
 
-float SEQ_retiming_handle_speed_get(const Scene *scene, const Sequence *seq, 
const int point_index)
+float SEQ_retiming_handle_speed_get(const Scene *scene,
+const Sequence *seq,
+const SeqRetimingHandle *handle)
 {
-  if (point_index == 0) {
+  if (handle->strip_frame_index == 0) {
 return 1.0f;
   }
 
-  SeqRetimingHandle *handle = seq->retiming_handles + point_index;
-  SeqRetimingHandle *handle_prev = handle - 1;
+  const SeqRetimingHandle *handle_prev = handle - 1;
 
   const int frame_index_max = 
seq_time_strip_original_content_length_get(scene, seq) - 1;
   const int frame_retimed_prev = round_fl_to_int(handle_prev->retiming_factor 
* frame_index_max);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7c3ca0c30c1] temp-vse-retiming-tool: Add sound strip retiming support

2022-11-14 Thread Richard Antalik
Commit: 7c3ca0c30c1ec09fed88a44c140a3855cd653b85
Author: Richard Antalik
Date:   Thu Oct 20 20:10:11 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB7c3ca0c30c1ec09fed88a44c140a3855cd653b85

Add sound strip retiming support

===

M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git a/source/blender/sequencer/SEQ_time.h 
b/source/blender/sequencer/SEQ_time.h
index 8ac3f379226..49277cd28f7 100644
--- a/source/blender/sequencer/SEQ_time.h
+++ b/source/blender/sequencer/SEQ_time.h
@@ -153,6 +153,8 @@ float SEQ_retiming_handle_speed_get(const struct Scene 
*scene,
 const struct Sequence *seq,
 const struct SeqRetimingHandle *handle);
 int SEQ_retiming_handle_index_get(const struct Sequence *seq, const struct 
SeqRetimingHandle *handle);
+
+void SEQ_retiming_sound_animation_data_set(const struct Scene *scene,const 
struct Sequence *seq);
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/sequencer/intern/strip_retiming.cc 
b/source/blender/sequencer/intern/strip_retiming.cc
index 676603b03b4..a550ce2dd14 100644
--- a/source/blender/sequencer/intern/strip_retiming.cc
+++ b/source/blender/sequencer/intern/strip_retiming.cc
@@ -125,6 +125,7 @@ bool SEQ_retiming_is_active(const Scene *scene, const 
Sequence *seq)
 bool SEQ_retiming_is_allowed(const Sequence *seq)
 {
   return ELEM(seq->type,
+  SEQ_TYPE_SOUND_RAM,
   SEQ_TYPE_IMAGE,
   SEQ_TYPE_META,
   SEQ_TYPE_SCENE,
@@ -250,3 +251,20 @@ float SEQ_retiming_handle_speed_get(const Scene *scene,
   const float speed = (float)fragment_length_retimed / 
(float)fragment_length_original;
   return speed;
 }
+
+#include 
+void SEQ_retiming_sound_animation_data_set(const Scene scene, const Sequence 
*seq)
+{
+  MutableSpan handles = SEQ_retiming_handles_get(seq);
+
+  for (const SeqRetimingHandle &handle : handles) {
+if (handle.strip_frame_index == 0) {
+  continue;
+}
+
+float pitch = SEQ_retiming_handle_speed_get(scene, seq, handle);
+
+BKE_sound_set_scene_sound_pitch(
+seq->scene_sound, pitch, (seq->flag & SEQ_AUDIO_PITCH_ANIMATED) != 0);
+  }
+}

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ba2a0f5c655] temp-vse-retiming-tool: Add python API

2022-11-14 Thread Richard Antalik
Commit: ba2a0f5c655d974ea02989bdff996c3db42edb5d
Author: Richard Antalik
Date:   Tue Oct 18 21:07:16 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rBba2a0f5c655d974ea02989bdff996c3db42edb5d

Add python API

===

M   source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
M   source/blender/editors/space_sequencer/sequencer_retiming.cc
M   source/blender/makesrna/intern/rna_internal.h
M   source/blender/makesrna/intern/rna_sequencer.c
M   source/blender/makesrna/intern/rna_sequencer_api.c
M   source/blender/sequencer/SEQ_retiming.hh
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/strip_retiming.cc

===

diff --git a/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
index ff6d7f04cba..dde5708dca4 100644
--- a/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
@@ -25,6 +25,7 @@
 
 #include "SEQ_iterator.h"
 #include "SEQ_retiming.hh"
+#include "SEQ_time.h"
 #include "SEQ_sequencer.h"
 
 /* Own include. */
diff --git a/source/blender/editors/space_sequencer/sequencer_retiming.cc 
b/source/blender/editors/space_sequencer/sequencer_retiming.cc
index ce55218d1b4..3b0ee21c175 100644
--- a/source/blender/editors/space_sequencer/sequencer_retiming.cc
+++ b/source/blender/editors/space_sequencer/sequencer_retiming.cc
@@ -177,12 +177,9 @@ static int sequencer_retiming_handle_move_modal(bContext 
*C, wmOperator *op, con
   mouse_x = max_ff(xmin, mouse_x);
   offset = mouse_x - (SEQ_time_start_frame_get(seq) + 
handle->strip_frame_index);
 
-  MutableSpan handles = SEQ_retiming_handles_get(seq);
-  for (; handle < handles.end(); handle++) {
 SEQ_retiming_offset_handle(scene, seq, handle, offset);
-SEQ_relations_invalidate_cache_raw(scene, seq);
-  }
 
+  SEQ_relations_invalidate_cache_raw(scene, seq);
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
   return OPERATOR_RUNNING_MODAL;
 }
diff --git a/source/blender/makesrna/intern/rna_internal.h 
b/source/blender/makesrna/intern/rna_internal.h
index ea829e5cd86..4152779452d 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -470,6 +470,7 @@ void RNA_api_region_view3d(struct StructRNA *srna);
 void RNA_api_texture(struct StructRNA *srna);
 void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop, bool metastrip);
 void RNA_api_sequence_elements(BlenderRNA *brna, PropertyRNA *cprop);
+void RNA_api_sequence_retiming_handles(BlenderRNA *brna, PropertyRNA *cprop);
 void RNA_api_sound(struct StructRNA *srna);
 void RNA_api_vfont(struct StructRNA *srna);
 void RNA_api_workspace(struct StructRNA *srna);
diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index 4bca9360d78..c153cef4b11 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -272,7 +272,7 @@ static int rna_SequenceEditor_elements_length(PointerRNA 
*ptr)
   return (int)olen;
 }
 
-static void rna_SequenceEditor_elements_begin(CollectionPropertyIterator 
*iter, PointerRNA *ptr)
+static void rna_Sequence_elements_begin(CollectionPropertyIterator *iter, 
PointerRNA *ptr)
 {
   Sequence *seq = (Sequence *)ptr->data;
   rna_iterator_array_begin(iter,
@@ -283,6 +283,75 @@ static void 
rna_SequenceEditor_elements_begin(CollectionPropertyIterator *iter,
NULL);
 }
 
+static int rna_Sequence_retiming_handles_length(PointerRNA *ptr)
+{
+  return SEQ_retiming_handles_count((Sequence *)ptr->data);
+}
+
+static void 
rna_SequenceEditor_retiming_handles_begin(CollectionPropertyIterator *iter,
+  PointerRNA *ptr)
+{
+  Sequence *seq = (Sequence *)ptr->data;
+  rna_iterator_array_begin(iter,
+   (void *)seq->retiming_handles,
+   sizeof(SeqRetimingHandle),
+   SEQ_retiming_handles_count(seq),
+   0,
+   NULL);
+}
+
+static Sequence *strip_by_handle_find(Scene *scene, SeqRetimingHandle *handle)
+{
+  Editing *ed = SEQ_editing_get(scene);
+  SeqCollection *strips = SEQ_query_all_strips_recursive(&ed->seqbase);
+
+  Sequence *seq;
+  SEQ_ITERATOR_FOREACH (seq, strips) {
+int retiming_handle_count = SEQ_retiming_handles_count(seq);
+SeqRetimingHandle *first = seq->retiming_handles;
+SeqRetimingHandle *last =  seq->retiming_handles + retiming_handle_count - 
1;
+
+/* TODO: If this can't be avoided, add lookup API funct

[Bf-blender-cvs] [7e6142ac43b] temp-vse-retiming-tool: - Rewrite some code in C++, This needs a bit of tweaking still. - Address inlines

2022-11-14 Thread Richard Antalik
Commit: 7e6142ac43bfac3aedb305dcee8238f2cbfc11ec
Author: Richard Antalik
Date:   Mon Oct 17 20:38:50 2022 +0200
Branches: temp-vse-retiming-tool
https://developer.blender.org/rB7e6142ac43bfac3aedb305dcee8238f2cbfc11ec

- Rewrite some code in C++, This needs a bit of tweaking still.  - Address 
inlines

===

M   release/scripts/startup/bl_ui/space_sequencer.py
M   release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M   source/blender/editors/space_sequencer/CMakeLists.txt
A   source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
A   source/blender/editors/space_sequencer/sequencer_gizmo_retime_type.cc
M   source/blender/editors/space_sequencer/sequencer_intern.h
M   source/blender/editors/space_sequencer/sequencer_ops.c
A   source/blender/editors/space_sequencer/sequencer_retiming.cc
M   source/blender/editors/space_sequencer/space_sequencer.c
M   source/blender/makesdna/DNA_sequence_types.h
M   source/blender/makesrna/intern/rna_sequencer.c
M   source/blender/sequencer/CMakeLists.txt
A   source/blender/sequencer/SEQ_retiming.hh
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/sequencer.c
A   source/blender/sequencer/intern/strip_retiming.cc
M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h

===

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py 
b/release/scripts/startup/bl_ui/space_sequencer.py
index e703cf7f9c6..3f72454015b 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1870,11 +1870,17 @@ class SEQUENCER_PT_time(SequencerButtonsPanel, Panel):
 split.label(text="Channel")
 split.prop(strip, "channel", text="")
 
+use_retiming_tool = strip.use_retiming_tool
+
 if not is_effect:
-split = layout.split(factor=0.5 + max_factor)
-split.alignment = 'RIGHT'
-split.label(text="Speed Factor")
-split.prop(strip, "speed_factor", text="")
+if not use_retiming_tool:
+split = layout.split(factor=0.5 + max_factor)
+split.alignment = 'RIGHT'
+split.label(text="Speed Factor")
+split.prop(strip, "speed_factor", text="")
+else:
+layout.operator("sequencer.retiming_reset")
+
 
 sub = layout.column(align=True)
 split = sub.split(factor=0.5 + max_factor, align=True)
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py 
b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 20021762d5a..a38b6c8451f 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -2558,6 +2558,17 @@ class _defs_sequencer_generic:
 options={'KEYMAP_FALLBACK'},
 )
 
+@ToolDef.from_fn
+def retime():
+return dict(
+idname="builtin.retime",
+label="Retime",
+icon="none",
+widget="SEQUENCER_GGT_gizmo_retime",
+operator="transform.translate",
+keymap=None,
+)
+
 @ToolDef.from_fn
 def sample():
 return dict(
@@ -3248,6 +3259,7 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, 
Panel):
 'SEQUENCER': [
 *_tools_select,
 _defs_sequencer_generic.blade,
+_defs_sequencer_generic.retime,
 ],
 'SEQUENCER_PREVIEW': [
 *_tools_select,
diff --git a/source/blender/editors/space_sequencer/CMakeLists.txt 
b/source/blender/editors/space_sequencer/CMakeLists.txt
index 5466beca255..419265ff299 100644
--- a/source/blender/editors/space_sequencer/CMakeLists.txt
+++ b/source/blender/editors/space_sequencer/CMakeLists.txt
@@ -33,10 +33,13 @@ set(SRC
   sequencer_drag_drop.c
   sequencer_draw.c
   sequencer_edit.c
+  sequencer_gizmo_retime.cc
+  sequencer_gizmo_retime_type.cc
   sequencer_modifier.c
   sequencer_ops.c
   sequencer_preview.c
   sequencer_proxy.c
+  sequencer_retiming.cc
   sequencer_scopes.c
   sequencer_select.c
   sequencer_thumbnails.c
diff --git a/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc 
b/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
new file mode 100644
index 000..ff6d7f04cba
--- /dev/null
+++ b/source/blender/editors/space_sequencer/sequencer_gizmo_retime.cc
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright 2022 Blender Foundation. All rights reserved. */
+
+/** \file
+ * \ingroup spseq
+ */
+
+#

[Bf-blender-cvs] [4cd9e9991ca] master: Merge branch 'blender-v3.4-release'

2022-11-09 Thread Richard Antalik
Commit: 4cd9e9991ca5a5556d2862cab3b9840774a430b2
Author: Richard Antalik
Date:   Wed Nov 9 22:03:56 2022 +0100
Branches: master
https://developer.blender.org/rB4cd9e9991ca5a5556d2862cab3b9840774a430b2

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [cebea62b477] blender-v3.4-release: Fix T102256: Gamma Cross blend mode causes stripes

2022-11-09 Thread Richard Antalik
Commit: cebea62b4770295ae35d98e1e9e85a457bc05922
Author: Richard Antalik
Date:   Wed Nov 9 21:59:33 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rBcebea62b4770295ae35d98e1e9e85a457bc05922

Fix T102256: Gamma Cross blend mode causes stripes

Function `do_gammacross_effect_float` processed one color channel per
loop iteration instead of whole pixel.

===

M   source/blender/sequencer/intern/effects.c

===

diff --git a/source/blender/sequencer/intern/effects.c 
b/source/blender/sequencer/intern/effects.c
index 8469876ba25..6dd75031f3b 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -704,10 +704,13 @@ static void do_gammacross_effect_float(
 
   for (int i = 0; i < y; i++) {
 for (int j = 0; j < x; j++) {
-  *rt = gammaCorrect(mfac * invGammaCorrect(*rt1) + fac * 
invGammaCorrect(*rt2));
-  rt1++;
-  rt2++;
-  rt++;
+  rt[0] = gammaCorrect(mfac * invGammaCorrect(rt1[0]) + fac * 
invGammaCorrect(rt2[0]));
+  rt[1] = gammaCorrect(mfac * invGammaCorrect(rt1[1]) + fac * 
invGammaCorrect(rt2[1]));
+  rt[2] = gammaCorrect(mfac * invGammaCorrect(rt1[2]) + fac * 
invGammaCorrect(rt2[2]));
+  rt[3] = gammaCorrect(mfac * invGammaCorrect(rt1[3]) + fac * 
invGammaCorrect(rt2[3]));
+  rt1 += 4;
+  rt2+=4;
+  rt+=4;
 }
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [75265f27da6] master: Merge branch 'blender-v3.4-release'

2022-11-08 Thread Richard Antalik
Commit: 75265f27da64d4c18f5c22cd85ef868bc4a573ac
Author: Richard Antalik
Date:   Tue Nov 8 21:21:02 2022 +0100
Branches: master
https://developer.blender.org/rB75265f27da64d4c18f5c22cd85ef868bc4a573ac

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [62e32e7c2e0] blender-v3.4-release: Fix VSE: Effect strip flickers when moving left handle

2022-11-08 Thread Richard Antalik
Commit: 62e32e7c2e039415f91cb5578c462f98417bad0b
Author: Richard Antalik
Date:   Tue Nov 8 21:05:18 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB62e32e7c2e039415f91cb5578c462f98417bad0b

Fix VSE: Effect strip flickers when moving left handle

The issue was caused by refactoring, see 7afcfe111aacc8bc. Function
`SEQ_transform_fix_single_image_seq_offsets` modified offsets after
handle was moved, but this was not done correctly.

Remove function mentioned above and move strip start when moving left
handle of strips that have only single frame of content by design
(image, text, color, ...).

===

M   source/blender/blenloader/intern/versioning_290.c
M   source/blender/editors/space_sequencer/sequencer_edit.c
M   source/blender/editors/transform/transform_convert_sequencer.c
M   source/blender/makesrna/intern/rna_sequencer.c
M   source/blender/sequencer/SEQ_transform.h
M   source/blender/sequencer/intern/strip_add.c
M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/blenloader/intern/versioning_290.c 
b/source/blender/blenloader/intern/versioning_290.c
index e4c476e1212..b8161a9dc40 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -365,7 +365,6 @@ static void seq_update_meta_disp_range(Scene *scene)
 /* Update meta strip endpoints. */
 SEQ_time_left_handle_frame_set(scene, ms->parseq, ms->disp_range[0]);
 SEQ_time_right_handle_frame_set(scene, ms->parseq, ms->disp_range[1]);
-SEQ_transform_fix_single_image_seq_offsets(scene, ms->parseq);
 
 /* Recalculate effects using meta strip. */
 LISTBASE_FOREACH (Sequence *, seq, ms->oldbasep) {
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c 
b/source/blender/editors/space_sequencer/sequencer_edit.c
index c0c7782c60c..a9e31de2096 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -371,7 +371,6 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op)
 else { /* SEQ_RIGHTSEL */
   SEQ_time_right_handle_frame_set(scene, seq, snap_frame);
 }
-SEQ_transform_fix_single_image_seq_offsets(scene, seq);
   }
 }
   }
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c 
b/source/blender/editors/transform/transform_convert_sequencer.c
index 090f1bf1e6c..80c74b81cfa 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -615,7 +615,6 @@ static void flushTransSeq(TransInfo *t)
   case SEQ_LEFTSEL: { /* No vertical transform. */
 int old_startdisp = SEQ_time_left_handle_frame_get(scene, seq);
 SEQ_time_left_handle_frame_set(t->scene, seq, new_frame);
-SEQ_transform_fix_single_image_seq_offsets(t->scene, seq);
 
 if (abs(SEQ_time_left_handle_frame_get(scene, seq) - old_startdisp) > 
abs(max_offset)) {
   max_offset = SEQ_time_left_handle_frame_get(scene, seq) - 
old_startdisp;
@@ -625,7 +624,6 @@ static void flushTransSeq(TransInfo *t)
   case SEQ_RIGHTSEL: { /* No vertical transform. */
 int old_enddisp = SEQ_time_right_handle_frame_get(scene, seq);
 SEQ_time_right_handle_frame_set(t->scene, seq, new_frame);
-SEQ_transform_fix_single_image_seq_offsets(t->scene, seq);
 
 if (abs(SEQ_time_right_handle_frame_get(scene, seq) - old_enddisp) > 
abs(max_offset)) {
   max_offset = SEQ_time_right_handle_frame_get(scene, seq) - 
old_enddisp;
diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index c952210eecf..a10c64e292e 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -330,7 +330,6 @@ static void rna_Sequence_start_frame_final_set(PointerRNA 
*ptr, int value)
   Scene *scene = (Scene *)ptr->owner_id;
 
   SEQ_time_left_handle_frame_set(scene, seq, value);
-  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
   do_sequence_frame_change_update(scene, seq);
   SEQ_relations_invalidate_cache_composite(scene, seq);
 }
@@ -341,7 +340,6 @@ static void rna_Sequence_end_frame_final_set(PointerRNA 
*ptr, int value)
   Scene *scene = (Scene *)ptr->owner_id;
 
   SEQ_time_right_handle_frame_set(scene, seq, value);
-  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
   do_sequence_frame_change_update(scene, seq);
   SEQ_relations_invalidate_cache_composite(scene, seq);
 }
diff --git a/source/blender/sequencer/SEQ_transform.h 
b/source/blender/sequencer/SEQ_transform.h
index c27a9dc4409..30cf472f55b 100644
--- a/sour

[Bf-blender-cvs] [35eb37c60dc] master: Merge branch 'blender-v3.4-release'

2022-11-08 Thread Richard Antalik
Commit: 35eb37c60dcb0f378c91ed1e4e5b1f46a3fcd0b6
Author: Richard Antalik
Date:   Tue Nov 8 19:36:06 2022 +0100
Branches: master
https://developer.blender.org/rB35eb37c60dcb0f378c91ed1e4e5b1f46a3fcd0b6

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5925b1821a5] blender-v3.4-release: Fix T102328: Incorrect strip state after copying

2022-11-08 Thread Richard Antalik
Commit: 5925b1821a5706d59d1504ab3b426ce5df6aff52
Author: Richard Antalik
Date:   Tue Nov 8 19:10:26 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rB5925b1821a5706d59d1504ab3b426ce5df6aff52

Fix T102328: Incorrect strip state after copying

Effect strip start position was translated twice. This is caused by
recent refactoring, see 7afcfe111aacc8bc.

Don't change `seq->start` of attached effect strips during translation
and only rely on `seq_time_update_effects_strip_range` function.

===

M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index 2c7bb69da66..4296a8ea35c 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -145,7 +145,7 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, 
Sequence *seq, int delt
 /* Move meta start/end points. */
 seq_time_translate_handles(evil_scene, seq, delta);
   }
-  else { /* All other strip types. */
+  else if (seq->seq1 == NULL && seq->seq2 == NULL) { /* All other strip types. 
*/
 seq->start += delta;
 /* Only to make files usable in older versions. */
 seq->startdisp = SEQ_time_left_handle_frame_get(evil_scene, seq);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [59af0fba9d2] master: Merge branch 'blender-v3.4-release'

2022-11-04 Thread Richard Antalik
Commit: 59af0fba9d2ea6c9dc192d3f12de31f862d6b68f
Author: Richard Antalik
Date:   Fri Nov 4 21:06:39 2022 +0100
Branches: master
https://developer.blender.org/rB59af0fba9d2ea6c9dc192d3f12de31f862d6b68f

Merge branch 'blender-v3.4-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [bba6d289429] blender-v3.4-release: Fix T99641: Assert hit when splitting video sequencer area horizontally

2022-11-04 Thread Richard Antalik
Commit: bba6d2894290244be847a6d4ee7722c82ec01c0e
Author: Richard Antalik
Date:   Fri Nov 4 20:57:23 2022 +0100
Branches: blender-v3.4-release
https://developer.blender.org/rBbba6d2894290244be847a6d4ee7722c82ec01c0e

Fix T99641: Assert hit when splitting video sequencer area horizontally

Don't draw channels region when height is 0.

===

M   source/blender/editors/space_sequencer/sequencer_channels_draw.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_channels_draw.c 
b/source/blender/editors/space_sequencer/sequencer_channels_draw.c
index 8abd7e424d1..901417c152f 100644
--- a/source/blender/editors/space_sequencer/sequencer_channels_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_channels_draw.c
@@ -357,6 +357,10 @@ void draw_channels(const bContext *C, ARegion *region)
   SeqChannelDrawContext context;
   channel_draw_context_init(C, region, &context);
 
+  if (round_fl_to_int(context.channel_height) == 0) {
+return;
+  }
+
   UI_view2d_view_ortho(context.v2d);
 
   draw_channel_headers(&context);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [583ae0caaa4] master: VSE: Don't use timecodes if not explicitly enabled

2022-10-24 Thread Richard Antalik
Commit: 583ae0caaa495adcc4af2494a4a87d19ae4eb645
Author: Richard Antalik
Date:   Mon Oct 24 19:57:53 2022 +0200
Branches: master
https://developer.blender.org/rB583ae0caaa495adcc4af2494a4a87d19ae4eb645

VSE: Don't use timecodes if not explicitly enabled

UI panel may suggest, that disabling "Proxy & timecode" would cause
timecodes not being used, but this was not the case. Now timecodes will
be used only if the checkbox is checked.

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index dbbece73695..e3fd9216842 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -1026,6 +1026,15 @@ static ImBuf 
*seq_render_movie_strip_custom_file_proxy(const SeqRenderData *cont
   return IMB_anim_absolute(proxy->anim, frameno, IMB_TC_NONE, IMB_PROXY_NONE);
 }
 
+static IMB_Timecode_Type seq_render_movie_strip_timecode_get(Sequence *seq)
+{
+  bool use_timecodes = (seq->flag & SEQ_USE_PROXY) != 0;
+  if (!use_timecodes) {
+return IMB_TC_NONE;
+  }
+  return seq->strip->proxy ? seq->strip->proxy->tc : IMB_TC_NONE;
+}
+
 /**
  * Render individual view for multi-view or single (default view) for 
mono-view.
  */
@@ -1049,7 +1058,7 @@ static ImBuf *seq_render_movie_strip_view(const 
SeqRenderData *context,
 else {
   ibuf = IMB_anim_absolute(sanim->anim,
frame_index + seq->anim_startofs,
-   seq->strip->proxy ? seq->strip->proxy->tc : 
IMB_TC_RECORD_RUN,
+   seq_render_movie_strip_timecode_get(seq),
psize);
 }
 
@@ -1062,7 +1071,7 @@ static ImBuf *seq_render_movie_strip_view(const 
SeqRenderData *context,
   if (ibuf == NULL) {
 ibuf = IMB_anim_absolute(sanim->anim,
  frame_index + seq->anim_startofs,
- seq->strip->proxy ? seq->strip->proxy->tc : 
IMB_TC_RECORD_RUN,
+ seq_render_movie_strip_timecode_get(seq),
  IMB_PROXY_NONE);
   }
   if (ibuf == NULL) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a67876103a6] master: Fix T101981: Incorrect playback of AVI files

2022-10-24 Thread Richard Antalik
Commit: a67876103a6bb4554317f09ebd57c1997a45ed89
Author: Richard Antalik
Date:   Mon Oct 24 19:40:39 2022 +0200
Branches: master
https://developer.blender.org/rBa67876103a6bb4554317f09ebd57c1997a45ed89

Fix T101981: Incorrect playback of AVI files

Commit bcc56253e26e introduced 3 frame negative offset for seeking. This
can result in negative seek values.

Ensure, that seek value is always positive.

===

M   source/blender/imbuf/intern/anim_movie.c

===

diff --git a/source/blender/imbuf/intern/anim_movie.c 
b/source/blender/imbuf/intern/anim_movie.c
index 71e0d0fe11e..94c0555dcf0 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -1100,7 +1100,12 @@ static int64_t ffmpeg_get_seek_pts(struct anim *anim, 
int64_t pts_to_search)
* experimentally. Note: Too big offset can impact performance. Current 3 
frame offset has no
* measurable impact.
*/
-  return pts_to_search - (ffmpeg_steps_per_frame_get(anim) * 3);
+  int64_t seek_pts = pts_to_search - (ffmpeg_steps_per_frame_get(anim) * 3);
+
+  if (seek_pts < 0) {
+seek_pts = 0;
+  }
+  return seek_pts;
 }
 
 /* This gives us an estimate of which pts our requested frame will have.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [24fd8f729a5] master: Fix memory leak when proxy building fails

2022-10-20 Thread Richard Antalik
Commit: 24fd8f729a58b18159912a84525b910b0d4e7ef5
Author: Richard Antalik
Date:   Thu Oct 20 17:54:29 2022 +0200
Branches: master
https://developer.blender.org/rB24fd8f729a58b18159912a84525b910b0d4e7ef5

Fix memory leak when proxy building fails

Leak introduced in recent fix - bf8d4a9bc6fb28.

===

M   source/blender/imbuf/intern/indexer.c

===

diff --git a/source/blender/imbuf/intern/indexer.c 
b/source/blender/imbuf/intern/indexer.c
index e8e4b80ef45..eaa72441fb6 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -909,6 +909,9 @@ static IndexBuildContext 
*index_ffmpeg_create_context(struct anim *anim,
 
   if (context->proxy_ctx[0] == NULL && context->proxy_ctx[1] == NULL &&
   context->proxy_ctx[2] == NULL && context->proxy_ctx[3] == NULL) {
+avformat_close_input(&context->iFormatCtx);
+avcodec_free_context(&context->iCodecCtx);
+MEM_freeN(context);
 return NULL; /* Nothing to transcode. */
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [bf8d4a9bc6f] master: Fix T101857: Crash when trying to build proxies on read-only filesystem

2022-10-19 Thread Richard Antalik
Commit: bf8d4a9bc6fb285011f74f5fb36c77b299893ba9
Author: Richard Antalik
Date:   Wed Oct 19 21:06:07 2022 +0200
Branches: master
https://developer.blender.org/rBbf8d4a9bc6fb285011f74f5fb36c77b299893ba9

Fix T101857: Crash when trying to build proxies on read-only filesystem

Skip building if proxy file can't be created.

===

M   source/blender/imbuf/intern/indexer.c

===

diff --git a/source/blender/imbuf/intern/indexer.c 
b/source/blender/imbuf/intern/indexer.c
index 8965700c08a..e8e4b80ef45 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -498,7 +498,9 @@ static struct proxy_output_ctx *alloc_proxy_output_ffmpeg(
   rv->anim = anim;
 
   get_proxy_filepath(rv->anim, rv->proxy_size, filepath, true);
-  BLI_make_existing_file(filepath);
+  if (!BLI_make_existing_file(filepath)) {
+return NULL;
+  }
 
   rv->of = avformat_alloc_context();
   rv->of->oformat = av_guess_format("avi", NULL, NULL);
@@ -905,6 +907,11 @@ static IndexBuildContext 
*index_ffmpeg_create_context(struct anim *anim,
 }
   }
 
+  if (context->proxy_ctx[0] == NULL && context->proxy_ctx[1] == NULL &&
+  context->proxy_ctx[2] == NULL && context->proxy_ctx[3] == NULL) {
+return NULL; /* Nothing to transcode. */
+  }
+
   for (i = 0; i < num_indexers; i++) {
 if (tcs_in_use & tc_types[i]) {
   char filepath[FILE_MAX];

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [295eb04ba3b] blender-v3.3-release: Fix T101447: Hold split not working correctly

2022-10-17 Thread Richard Antalik
Commit: 295eb04ba3b750ba836ccbd6df112ca89909011a
Author: Richard Antalik
Date:   Tue Oct 4 16:05:48 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB295eb04ba3b750ba836ccbd6df112ca89909011a

Fix T101447: Hold split not working correctly

Caused by incorrect conflict resolution in commit 302b04a5a3fc0e76.

===

M   source/blender/sequencer/intern/strip_edit.c

===

diff --git a/source/blender/sequencer/intern/strip_edit.c 
b/source/blender/sequencer/intern/strip_edit.c
index 15c472dd5a7..a302a570eeb 100644
--- a/source/blender/sequencer/intern/strip_edit.c
+++ b/source/blender/sequencer/intern/strip_edit.c
@@ -259,49 +259,50 @@ bool SEQ_edit_move_strip_to_meta(Scene *scene,
   return true;
 }
 
-static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
+static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
 {
-  /* Adjust within range of extended stillframes before strip. */
-  if (timeline_frame < seq->start) {
-seq->start = timeline_frame - 1;
-seq->anim_endofs += SEQ_time_strip_length_get(scene, seq) - 1;
-seq->startstill = timeline_frame - seq->startdisp - 1;
-seq->endstill = 0;
+  const float content_start = seq->start;
+  const float content_end = seq->start + SEQ_time_strip_length_get(scene, seq);
+
+  /* Adjust within range of extended still-frames before strip. */
+  if (timeline_frame < content_start) {
+const float offset = content_start + 1 - timeline_frame;
+seq->start -= offset;
+seq->startofs += offset;
+SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
   }
   /* Adjust within range of strip contents. */
-  else if ((timeline_frame >= seq->start) &&
-   (timeline_frame <= (seq->start + SEQ_time_strip_length_get(scene, 
seq {
+  else if ((timeline_frame >= content_start) && (timeline_frame <= 
content_end)) {
 seq->endofs = 0;
-seq->endstill = 0;
-seq->anim_endofs += (seq->start + SEQ_time_strip_length_get(scene, seq)) - 
timeline_frame;
+seq->anim_endofs += (content_end - timeline_frame) * seq->speed_factor;
   }
-  /* Adjust within range of extended stillframes after strip. */
-  else if ((seq->start + SEQ_time_strip_length_get(scene, seq)) < 
timeline_frame) {
-seq->endstill = timeline_frame - seq->start - 
SEQ_time_strip_length_get(scene, seq);
+  /* Adjust within range of extended still-frames after strip. */
+  else if (timeline_frame > content_end) {
+SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
   }
 }
 
-static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
+static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
 {
-  /* Adjust within range of extended stillframes before strip. */
-  if (timeline_frame < seq->start) {
-seq->startstill = seq->start - timeline_frame;
+  const float content_start = seq->start;
+  const float content_end = seq->start + SEQ_time_strip_length_get(scene, seq);
+
+  /* Adjust within range of extended still-frames before strip. */
+  if (timeline_frame < content_start) {
+SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
   }
   /* Adjust within range of strip contents. */
-  else if ((timeline_frame >= seq->start) &&
-   (timeline_frame <= (seq->start + SEQ_time_strip_length_get(scene, 
seq {
-seq->anim_startofs += timeline_frame - seq->start;
+  else if ((timeline_frame >= content_start) && (timeline_frame <= 
content_end)) {
+seq->anim_startofs += (timeline_frame - content_start) * seq->speed_factor;
 seq->start = timeline_frame;
-seq->startstill = 0;
 seq->startofs = 0;
   }
-  /* Adjust within range of extended stillframes after strip. */
-  else if ((seq->start + SEQ_time_strip_length_get(scene, seq)) < 
timeline_frame) {
-seq->start = timeline_frame;
-seq->startofs = 0;
-seq->anim_startofs += SEQ_time_strip_length_get(scene, seq) - 1;
-seq->endstill = seq->enddisp - timeline_frame - 1;
-seq->startstill = 0;
+  /* Adjust within range of extended still-frames after strip. */
+  else if (timeline_frame > content_end) {
+const float offset = timeline_frame - content_end + 1;
+seq->start += offset;
+seq->endofs += offset;
+SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [bcc56253e26] master: Fix T95683: FFmpeg seeking is broken

2022-10-12 Thread Richard Antalik
Commit: bcc56253e26ee9834bd5e31df4abd976027c1ed6
Author: Richard Antalik
Date:   Wed Oct 12 20:00:20 2022 +0200
Branches: master
https://developer.blender.org/rBbcc56253e26ee9834bd5e31df4abd976027c1ed6

Fix T95683: FFmpeg seeking is broken

According to information I gathered, ffmpeg seeks internally using DTS
values instead of PTS. In some files DTS and PTS values are offset and
ffmpeg fails to seek correctly to keyframe located before requested PTS.

This issue become evident after hardcoded preseek of 25 frames was
removed and effort went into more precise seeking to improve
performance. It was thought, that this is bug in ffmpeg code, but
after reading some discussions, I don't think it is considered as such
by their developers, see below:
http://ffmpeg.org/pipermail/ffmpeg-devel/2018-March/226354.html
https://trac.ffmpeg.org/ticket/1189

Best solution seems to be to add small preseek value possibly at
detriment of performance, so 3 frames of preseek are applied. Number 3
was chosen experimentally.

Performance impact seems to be insignificant with this change.

Reviewed By: zeddb

Differential Revision: https://developer.blender.org/D15847

===

M   source/blender/imbuf/intern/anim_movie.c

===

diff --git a/source/blender/imbuf/intern/anim_movie.c 
b/source/blender/imbuf/intern/anim_movie.c
index 4f8fe0d8cdc..71e0d0fe11e 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -1093,12 +1093,14 @@ static int ffmpeg_seek_by_byte(AVFormatContext 
*pFormatCtx)
 
 static int64_t ffmpeg_get_seek_pts(struct anim *anim, int64_t pts_to_search)
 {
-  /* Step back half a frame position to make sure that we get the requested
-   * frame and not the one after it. This is a workaround as ffmpeg will
-   * sometimes not seek to a frame after the requested pts even if
-   * AVSEEK_FLAG_BACKWARD is specified.
+  /* FFmpeg seeks internally using DTS values instead of PTS. In some files 
DTS and PTS values are
+   * offset and sometimes ffmpeg fails to take this into account when seeking.
+   * Therefore we need to seek backwards a certain offset to make sure the 
frame we want is in
+   * front of us. It is not possible to determine the exact needed offset, 
this value is determined
+   * experimentally. Note: Too big offset can impact performance. Current 3 
frame offset has no
+   * measurable impact.
*/
-  return pts_to_search - (ffmpeg_steps_per_frame_get(anim) / 2);
+  return pts_to_search - (ffmpeg_steps_per_frame_get(anim) * 3);
 }
 
 /* This gives us an estimate of which pts our requested frame will have.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [76043bc3d62] master: Cleanup: VSE code readability

2022-10-04 Thread Richard Antalik
Commit: 76043bc3d62c5a23f182c2cf0521e787600bd0d7
Author: Richard Antalik
Date:   Tue Oct 4 19:50:13 2022 +0200
Branches: master
https://developer.blender.org/rB76043bc3d62c5a23f182c2cf0521e787600bd0d7

Cleanup: VSE code readability

Add function `SEQ_time_content_end_frame_get` to get content end frame.
New function is shorthand for
`SEQ_time_start_frame_get() + SEQ_time_strip_length_get()`.

===

M   source/blender/editors/space_sequencer/sequencer_draw.c
M   source/blender/editors/space_sequencer/sequencer_thumbnails.c
M   source/blender/editors/transform/transform_snap_sequencer.c
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/render.c
M   source/blender/sequencer/intern/strip_edit.c
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c 
b/source/blender/editors/space_sequencer/sequencer_draw.c
index ce12629f9d6..6ebc3e95b70 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -963,8 +963,7 @@ static void draw_sequence_extensions_overlay(
   UI_GetColorPtrShade3ubv(col, blend_col, 10);
 
   const float strip_content_start = SEQ_time_start_frame_get(seq);
-  const float strip_content_end = SEQ_time_start_frame_get(seq) +
-  SEQ_time_strip_length_get(scene, seq);
+  const float strip_content_end = SEQ_time_content_end_frame_get(scene, seq);
   float right_handle_frame = SEQ_time_right_handle_frame_get(scene, seq);
   float left_handle_frame = SEQ_time_left_handle_frame_get(scene, seq);
 
@@ -1095,8 +1094,7 @@ static void draw_seq_background(Scene *scene,
 }
 if (SEQ_time_has_right_still_frames(scene, seq)) {
   float right_handle_frame = SEQ_time_right_handle_frame_get(scene, seq);
-  const float content_end = SEQ_time_start_frame_get(seq) +
-SEQ_time_strip_length_get(scene, seq);
+  const float content_end = SEQ_time_content_end_frame_get(scene, seq);
   immRectf(pos, content_end, y1, right_handle_frame, y2);
 }
   }
@@ -1317,8 +1315,7 @@ static void draw_seq_strip(const bContext *C,
   x1 = SEQ_time_has_left_still_frames(scene, seq) ? 
SEQ_time_start_frame_get(seq) :
 
SEQ_time_left_handle_frame_get(scene, seq);
   y1 = seq->machine + SEQ_STRIP_OFSBOTTOM;
-  x2 = SEQ_time_has_right_still_frames(scene, seq) ?
-   SEQ_time_start_frame_get(seq) + SEQ_time_strip_length_get(scene, 
seq) :
+  x2 = SEQ_time_has_right_still_frames(scene, seq) ? 
SEQ_time_content_end_frame_get(scene, seq) :
SEQ_time_right_handle_frame_get(scene, seq);
   y2 = seq->machine + SEQ_STRIP_OFSTOP;
 
@@ -2290,7 +2287,7 @@ static void draw_seq_strips(const bContext *C, Editing 
*ed, ARegion *region)
 continue;
   }
   if (max_ii(SEQ_time_right_handle_frame_get(scene, seq),
- SEQ_time_start_frame_get(seq) + 
SEQ_time_strip_length_get(scene, seq)) <
+ SEQ_time_content_end_frame_get(scene, seq)) <
   v2d->cur.xmin) {
 continue;
   }
diff --git a/source/blender/editors/space_sequencer/sequencer_thumbnails.c 
b/source/blender/editors/space_sequencer/sequencer_thumbnails.c
index 6f443d0353e..36f2aa87d9d 100644
--- a/source/blender/editors/space_sequencer/sequencer_thumbnails.c
+++ b/source/blender/editors/space_sequencer/sequencer_thumbnails.c
@@ -74,10 +74,11 @@ static bool check_seq_need_thumbnails(const Scene *scene, 
Sequence *seq, rctf *v
   if (!ELEM(seq->type, SEQ_TYPE_MOVIE, SEQ_TYPE_IMAGE)) {
 return false;
   }
-  if (min_ii(SEQ_time_left_handle_frame_get(scene, seq), seq->start) > 
view_area->xmax) {
+  if (min_ii(SEQ_time_left_handle_frame_get(scene, seq), 
SEQ_time_start_frame_get(seq)) >
+  view_area->xmax) {
 return false;
   }
-  if (max_ii(SEQ_time_right_handle_frame_get(scene, seq), seq->start + 
seq->len) <
+  if (max_ii(SEQ_time_right_handle_frame_get(scene, seq), 
SEQ_time_content_end_frame_get(scene, seq)) <
   view_area->xmin) {
 return false;
   }
diff --git a/source/blender/editors/transform/transform_snap_sequencer.c 
b/source/blender/editors/transform/transform_snap_sequencer.c
index 06d9bb05206..ed8b201240b 100644
--- a/source/blender/editors/transform/transform_snap_sequencer.c
+++ b/source/blender/editors/transform/transform_snap_sequencer.c
@@ -203,8 +203,10 @@ static void seq_snap_target_points_build(Scene *scene,
 i += 2;
 
 if (snap_mode & SEQ_SNAP_TO_STRIP_HOLD) {
-  int content_start = min_ii(SEQ_time_right_handle_frame_get(scene, seq), 
seq->start);
-  int content_end = max_ii(SEQ_time_left_handle_frame_get(scene, seq), 
seq->start + seq->len);
+  

[Bf-blender-cvs] [82de17c801e] master: Cleanup: VSE: Rename `val` to `timeline_frame`

2022-10-04 Thread Richard Antalik
Commit: 82de17c801e429c8e92a3c3683c59fdf74427997
Author: Richard Antalik
Date:   Tue Oct 4 21:21:50 2022 +0200
Branches: master
https://developer.blender.org/rB82de17c801e429c8e92a3c3683c59fdf74427997

Cleanup: VSE: Rename `val` to `timeline_frame`

===

M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/source/blender/sequencer/SEQ_time.h 
b/source/blender/sequencer/SEQ_time.h
index 8f8dddefee8..8a67753d9d2 100644
--- a/source/blender/sequencer/SEQ_time.h
+++ b/source/blender/sequencer/SEQ_time.h
@@ -96,12 +96,16 @@ int SEQ_time_right_handle_frame_get(const struct Scene 
*scene, const struct Sequ
 /**
  * Set frame where strip boundary starts. This function moves only handle, 
content is not moved.
  */
-void SEQ_time_left_handle_frame_set(const struct Scene *scene, struct Sequence 
*seq, int val);
+void SEQ_time_left_handle_frame_set(const struct Scene *scene,
+struct Sequence *seq,
+int timeline_frame);
 /**
  * Set frame where strip boundary ends.
  * This function moves only handle, content is not moved.
  */
-void SEQ_time_right_handle_frame_set(const struct Scene *scene, struct 
Sequence *seq, int val);
+void SEQ_time_right_handle_frame_set(const struct Scene *scene,
+ struct Sequence *seq,
+ int timeline_frame);
 /**
  * Get number of frames (in timeline) that can be rendered.
  * This can change depending on scene FPS or strip speed factor.
diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index 5ebb5915763..c484cd425c4 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -522,31 +522,31 @@ int SEQ_time_right_handle_frame_get(const Scene *scene, 
const Sequence *seq)
   return SEQ_time_content_end_frame_get(scene, seq) - seq->endofs;
 }
 
-void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int val)
+void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int 
timeline_frame)
 {
   const float right_handle_orig_frame = SEQ_time_right_handle_frame_get(scene, 
seq);
 
-  if (val >= right_handle_orig_frame) {
-val = right_handle_orig_frame - 1;
+  if (timeline_frame >= right_handle_orig_frame) {
+timeline_frame = right_handle_orig_frame - 1;
   }
 
-  seq->startofs = val - SEQ_time_start_frame_get(seq);
-  seq->startdisp = val; /* Only to make files usable in older versions. */
+  seq->startofs = timeline_frame - SEQ_time_start_frame_get(seq);
+  seq->startdisp = timeline_frame; /* Only to make files usable in older 
versions. */
 
   SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
   seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
 }
 
-void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int 
val)
+void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int 
timeline_frame)
 {
   const float left_handle_orig_frame = SEQ_time_left_handle_frame_get(scene, 
seq);
 
-  if (val <= left_handle_orig_frame) {
-val = left_handle_orig_frame + 1;
+  if (timeline_frame <= left_handle_orig_frame) {
+timeline_frame = left_handle_orig_frame + 1;
   }
 
-  seq->endofs = SEQ_time_content_end_frame_get(scene, seq) - val;
-  seq->enddisp = val; /* Only to make files usable in older versions. */
+  seq->endofs = SEQ_time_content_end_frame_get(scene, seq) - timeline_frame;
+  seq->enddisp = timeline_frame; /* Only to make files usable in older 
versions. */
 
   SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
   seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6309f677182] master: Cleanup: Add docstrings to `SEQ_time.h`

2022-10-04 Thread Richard Antalik
Commit: 6309f6771829eea795b5e8cb06c6ebc506627fde
Author: Richard Antalik
Date:   Tue Oct 4 20:40:00 2022 +0200
Branches: master
https://developer.blender.org/rB6309f6771829eea795b5e8cb06c6ebc506627fde

Cleanup: Add docstrings to `SEQ_time.h`

===

M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/source/blender/sequencer/SEQ_time.h 
b/source/blender/sequencer/SEQ_time.h
index e6e8d75807e..8f8dddefee8 100644
--- a/source/blender/sequencer/SEQ_time.h
+++ b/source/blender/sequencer/SEQ_time.h
@@ -42,7 +42,19 @@ void SEQ_timeline_expand_boundbox(const struct Scene *scene,
 void SEQ_timeline_boundbox(const struct Scene *scene,
const struct ListBase *seqbase,
struct rctf *rect);
+/**
+ * Get FPS rate of source media. Movie, scene and movieclip strips are 
supported.
+ * Returns 0 for unsupported strip or if media can't be loaded.
+ */
 float SEQ_time_sequence_get_fps(struct Scene *scene, struct Sequence *seq);
+/**
+ * Find start or end position of next or previous strip.
+ * \param scene: Video editing scene
+ * \param timeline_frame: reference frame for searching
+ * \param side: direction of searching, `SEQ_SIDE_LEFT`, `SEQ_SIDE_RIGHT` or 
`SEQ_SIDE_BOTH`.
+ * \param do_center: find closest strip center if true, otherwise finds 
closest handle position.
+ * \param do_unselected: only find closest position of unselected strip.
+ */
 int SEQ_time_find_next_prev_edit(struct Scene *scene,
  int timeline_frame,
  short side,
@@ -61,21 +73,64 @@ int SEQ_time_find_next_prev_edit(struct Scene *scene,
 bool SEQ_time_strip_intersects_frame(const struct Scene *scene,
  const struct Sequence *seq,
  int timeline_frame);
+/**
+ * Returns true if strip has frames without content to render.
+ */
 bool SEQ_time_has_still_frames(const struct Scene *scene, const struct 
Sequence *seq);
+/**
+ * Returns true if at beginning of strip there is no content to be rendered.
+ */
 bool SEQ_time_has_left_still_frames(const struct Scene *scene, const struct 
Sequence *seq);
+/**
+ * Returns true if at end of strip there is no content to be rendered.
+ */
 bool SEQ_time_has_right_still_frames(const struct Scene *scene, const struct 
Sequence *seq);
-
+/**
+ * Get timeline frame where strip boundary starts.
+ */
 int SEQ_time_left_handle_frame_get(const struct Scene *scene, const struct 
Sequence *seq);
+/**
+ * Get timeline frame where strip boundary ends.
+ */
 int SEQ_time_right_handle_frame_get(const struct Scene *scene, const struct 
Sequence *seq);
+/**
+ * Set frame where strip boundary starts. This function moves only handle, 
content is not moved.
+ */
 void SEQ_time_left_handle_frame_set(const struct Scene *scene, struct Sequence 
*seq, int val);
+/**
+ * Set frame where strip boundary ends.
+ * This function moves only handle, content is not moved.
+ */
 void SEQ_time_right_handle_frame_set(const struct Scene *scene, struct 
Sequence *seq, int val);
+/**
+ * Get number of frames (in timeline) that can be rendered.
+ * This can change depending on scene FPS or strip speed factor.
+ */
 int SEQ_time_strip_length_get(const struct Scene *scene, const struct Sequence 
*seq);
+/**
+ * Set strip playback speed.
+ * Strip length is affected by changing speed factor.
+ */
 void SEQ_time_speed_factor_set(const struct Scene *scene,
struct Sequence *seq,
const float speed_factor);
+/**
+ * Get timeline frame where strip content starts.
+ */
 float SEQ_time_start_frame_get(const struct Sequence *seq);
+/**
+ * Get timeline frame where strip content ends.
+ */
 float SEQ_time_content_end_frame_get(const struct Scene *scene, const struct 
Sequence *seq);
+/**
+ * Set frame where strip content starts.
+ * This function will also move strip handles.
+ */
 void SEQ_time_start_frame_set(const struct Scene *scene, struct Sequence *seq, 
int timeline_frame);
+/**
+ * Update length of metastrip after any contained strip length or position has 
changed.
+ * \note this function is currently only used internally and in versioning 
code.
+ */
 void SEQ_time_update_meta_strip_range(const struct Scene *scene, struct 
Sequence *seq_meta);
 
 #ifdef __cplusplus
diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index 5d953398732..5ebb5915763 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -478,8 +478,6 @@ bool SEQ_time_has_still_frames(const Scene *scene, const 
Sequence *seq)
   return SEQ_time_has_right_still_frames(scene, seq) || 
SEQ_time_has_left_still_frames(scene, seq);
 }
 
-/* Leng

[Bf-blender-cvs] [957cb173f21] master: Fix T101447: Hold split not working correctly

2022-10-04 Thread Richard Antalik
Commit: 957cb173f21628c7056bc67236c622c2e17504e2
Author: Richard Antalik
Date:   Tue Oct 4 16:05:48 2022 +0200
Branches: master
https://developer.blender.org/rB957cb173f21628c7056bc67236c622c2e17504e2

Fix T101447: Hold split not working correctly

Caused by incorrect conflict resolution in commit 302b04a5a3fc0e76.

===

M   source/blender/sequencer/intern/strip_edit.c

===

diff --git a/source/blender/sequencer/intern/strip_edit.c 
b/source/blender/sequencer/intern/strip_edit.c
index 7358f5e74a0..9751ccf18a6 100644
--- a/source/blender/sequencer/intern/strip_edit.c
+++ b/source/blender/sequencer/intern/strip_edit.c
@@ -258,49 +258,50 @@ bool SEQ_edit_move_strip_to_meta(Scene *scene,
   return true;
 }
 
-static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
+static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
 {
+  const float content_start = seq->start;
+  const float content_end = seq->start + SEQ_time_strip_length_get(scene, seq);
+
   /* Adjust within range of extended still-frames before strip. */
-  if (timeline_frame < seq->start) {
-seq->start = timeline_frame - 1;
-seq->anim_endofs += SEQ_time_strip_length_get(scene, seq) - 1;
-seq->startstill = timeline_frame - seq->startdisp - 1;
-seq->endstill = 0;
+  if (timeline_frame < content_start) {
+const float offset = content_start + 1 - timeline_frame;
+seq->start -= offset;
+seq->startofs += offset;
+SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
   }
   /* Adjust within range of strip contents. */
-  else if ((timeline_frame >= seq->start) &&
-   (timeline_frame <= (seq->start + SEQ_time_strip_length_get(scene, 
seq {
+  else if ((timeline_frame >= content_start) && (timeline_frame <= 
content_end)) {
 seq->endofs = 0;
-seq->endstill = 0;
-seq->anim_endofs += (seq->start + SEQ_time_strip_length_get(scene, seq)) - 
timeline_frame;
+seq->anim_endofs += (content_end - timeline_frame) * seq->speed_factor;
   }
   /* Adjust within range of extended still-frames after strip. */
-  else if ((seq->start + SEQ_time_strip_length_get(scene, seq)) < 
timeline_frame) {
-seq->endstill = timeline_frame - seq->start - 
SEQ_time_strip_length_get(scene, seq);
+  else if (timeline_frame > content_end) {
+SEQ_time_right_handle_frame_set(scene, seq, timeline_frame);
   }
 }
 
-static void seq_split_set_right_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
+static void seq_split_set_left_hold_offset(Scene *scene, Sequence *seq, int 
timeline_frame)
 {
+  const float content_start = seq->start;
+  const float content_end = seq->start + SEQ_time_strip_length_get(scene, seq);
+
   /* Adjust within range of extended still-frames before strip. */
-  if (timeline_frame < seq->start) {
-seq->startstill = seq->start - timeline_frame;
+  if (timeline_frame < content_start) {
+SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
   }
   /* Adjust within range of strip contents. */
-  else if ((timeline_frame >= seq->start) &&
-   (timeline_frame <= (seq->start + SEQ_time_strip_length_get(scene, 
seq {
-seq->anim_startofs += timeline_frame - seq->start;
+  else if ((timeline_frame >= content_start) && (timeline_frame <= 
content_end)) {
+seq->anim_startofs += (timeline_frame - content_start) * seq->speed_factor;
 seq->start = timeline_frame;
-seq->startstill = 0;
 seq->startofs = 0;
   }
   /* Adjust within range of extended still-frames after strip. */
-  else if ((seq->start + SEQ_time_strip_length_get(scene, seq)) < 
timeline_frame) {
-seq->start = timeline_frame;
-seq->startofs = 0;
-seq->anim_startofs += SEQ_time_strip_length_get(scene, seq) - 1;
-seq->endstill = seq->enddisp - timeline_frame - 1;
-seq->startstill = 0;
+  else if (timeline_frame > content_end) {
+const float offset = timeline_frame - content_end + 1;
+seq->start += offset;
+seq->endofs += offset;
+SEQ_time_left_handle_frame_set(scene, seq, timeline_frame);
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [55177b40f3f] blender-v3.3-release: Fix T100998: Speed effect not rendering scene strip subframes

2022-09-21 Thread Richard Antalik
Commit: 55177b40f3f4eb459f9b7091a4d1a232a6529451
Author: Richard Antalik
Date:   Tue Sep 13 20:24:49 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB55177b40f3f4eb459f9b7091a4d1a232a6529451

Fix T100998: Speed effect not rendering scene strip subframes

After change in 19bff8eb51f, subframe must be calculated for function
`RE_RenderFrame` in order to render subframes.

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index fd3b6103b94..ea9090addf5 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -1506,8 +1506,16 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData 
*context,
 re = RE_NewSceneRender(scene);
   }
 
-  RE_RenderFrame(
-  re, context->bmain, scene, have_comp ? NULL : view_layer, camera, 
frame, 0.0f, false);
+  const float subframe = frame - floorf(frame);
+
+  RE_RenderFrame(re,
+ context->bmain,
+ scene,
+ have_comp ? NULL : view_layer,
+ camera,
+ floorf(frame),
+ subframe,
+ false);
 
   /* restore previous state after it was toggled on & off by 
RE_RenderFrame */
   G.is_rendering = is_rendering;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [41527ea89c7] blender-v3.3-release: Fix T101098: Moving meta strip can change its length

2022-09-21 Thread Richard Antalik
Commit: 41527ea89c7ab99737c8ba598f649d20bd7df972
Author: Richard Antalik
Date:   Sat Sep 17 03:38:38 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB41527ea89c7ab99737c8ba598f649d20bd7df972

Fix T101098: Moving meta strip can change its length

Caused by clamping handle translation to strip bounds in functions
`SEQ_time_*_handle_frame_set()` to prevent strip ending in invalid
state. Issue happens when meta strip is moved so quickly, such that
immediate offset is greater than strip length.

Currently meta strip bounds are updated when any contained strip changes
its position, but this update always preserves meta strip position.
Transforming meta strip is not possible directly and all contained
strips are moved instead. Therefore this is 2-step process and fix needs
to be applied on update function and on translation function.

Inline offset handling without clamping in function
`SEQ_time_update_meta_strip_range()`.
Add new function `seq_time_translate_handles()` to move both handles at
once in `SEQ_transform_translate_sequence()`.

===

M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h
M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index 5d8266dbc6e..6725e0a8394 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -169,11 +169,16 @@ void SEQ_time_update_meta_strip_range(const Scene *scene, 
Sequence *seq_meta)
   seq_meta->len -= seq_meta->anim_startofs;
   seq_meta->len -= seq_meta->anim_endofs;
 
-  seq_update_sound_bounds_recursive(scene, seq_meta);
+  /* Functions `SEQ_time_*_handle_frame_set()` can not be used here, because 
they are clamped, so
+   * change must be done at once. */
+  seq_meta->startofs = strip_start - seq_meta->start;
+  seq_meta->startdisp = strip_start; /* Only to make files usable in older 
versions. */
+  seq_meta->endofs = seq_meta->start + SEQ_time_strip_length_get(scene, 
seq_meta) - strip_end;
+  seq_meta->enddisp = strip_end; /* Only to make files usable in older 
versions. */
 
-  /* Prevent meta-strip to move in timeline. */
-  SEQ_time_left_handle_frame_set(scene, seq_meta, strip_start);
-  SEQ_time_right_handle_frame_set(scene, seq_meta, strip_end);
+  seq_update_sound_bounds_recursive(scene, seq_meta);
+  SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq_meta));
+  seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq_meta));
 }
 
 void seq_time_effect_range_set(const Scene *scene, Sequence *seq)
@@ -546,3 +551,14 @@ void SEQ_time_right_handle_frame_set(const Scene *scene, 
Sequence *seq, int val)
   SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
   seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
 }
+
+void seq_time_translate_handles(const Scene *scene, Sequence *seq, const int 
offset)
+{
+  seq->startofs += offset;
+  seq->endofs -= offset;
+  seq->startdisp += offset; /* Only to make files usable in older versions. */
+  seq->enddisp -= offset;   /* Only to make files usable in older versions. */
+
+  SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
+  seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
+}
diff --git a/source/blender/sequencer/intern/strip_time.h 
b/source/blender/sequencer/intern/strip_time.h
index db581649f8a..19f549924df 100644
--- a/source/blender/sequencer/intern/strip_time.h
+++ b/source/blender/sequencer/intern/strip_time.h
@@ -40,6 +40,7 @@ void seq_time_gap_info_get(const struct Scene *scene,
struct GapInfo *r_gap_info);
 void seq_time_effect_range_set(const struct Scene *scene, Sequence *seq);
 void seq_time_update_effects_strip_range(const struct Scene *scene, struct 
SeqCollection *effects);
+void seq_time_translate_handles(const struct Scene *scene, struct Sequence 
*seq, const int offset);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index 68b30c9ce19..447ab9c221d 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -146,10 +146,7 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, 
Sequence *seq, int delt
   SEQ_transform_translate_sequence(evil_scene, seq_child, delta);
 }
 /* Move meta start/end points. */
-SEQ_time_left_handle_frame_set(
-evil_scene, seq, SEQ_time_left_handle_frame_get(evil_scene, seq) + 
delta);
-SEQ_time_right_

[Bf-blender-cvs] [440c29f65b7] blender-v3.3-release: Fix T100771: Incorrect strip length when timecodes are used

2022-09-21 Thread Richard Antalik
Commit: 440c29f65b7f85190376811a5c10258e35cf2d60
Author: Richard Antalik
Date:   Tue Sep 13 20:29:12 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB440c29f65b7f85190376811a5c10258e35cf2d60

Fix T100771: Incorrect strip length when timecodes are used

Some files have 2 different framerates stored in metadata. Use function
`av_guess_frame_rate` to get media FPS, because it provides more
consistent / correct values across multiple files.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D15839

===

M   source/blender/imbuf/intern/indexer.c

===

diff --git a/source/blender/imbuf/intern/indexer.c 
b/source/blender/imbuf/intern/indexer.c
index 00396c01d99..a4f1f5e813a 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -1012,7 +1012,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext 
*context,
 
   stream_size = avio_size(context->iFormatCtx->pb);
 
-  context->frame_rate = av_q2d(context->iStream->r_frame_rate);
+  context->frame_rate = av_q2d(av_guess_frame_rate(context->iFormatCtx, 
context->iStream, NULL));
   context->pts_time_base = av_q2d(context->iStream->time_base);
 
   while (av_read_frame(context->iFormatCtx, next_packet) >= 0) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a4c39115a0c] temp-T97352-3d-texturing-seam-bleeding-b2: Fix T101098: Moving meta strip can change its length

2022-09-20 Thread Richard Antalik
Commit: a4c39115a0c59e1947810c79ff4d40ae90d5e0c2
Author: Richard Antalik
Date:   Sat Sep 17 03:38:38 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rBa4c39115a0c59e1947810c79ff4d40ae90d5e0c2

Fix T101098: Moving meta strip can change its length

Caused by clamping handle translation to strip bounds in functions
`SEQ_time_*_handle_frame_set()` to prevent strip ending in invalid
state. Issue happens when meta strip is moved so quickly, such that
immediate offset is greater than strip length.

Currently meta strip bounds are updated when any contained strip changes
its position, but this update always preserves meta strip position.
Transforming meta strip is not possible directly and all contained
strips are moved instead. Therefore this is 2-step process and fix needs
to be applied on update function and on translation function.

Inline offset handling without clamping in function
`SEQ_time_update_meta_strip_range()`.
Add new function `seq_time_translate_handles()` to move both handles at
once in `SEQ_transform_translate_sequence()`.

===

M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h
M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index 5d8266dbc6e..6725e0a8394 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -169,11 +169,16 @@ void SEQ_time_update_meta_strip_range(const Scene *scene, 
Sequence *seq_meta)
   seq_meta->len -= seq_meta->anim_startofs;
   seq_meta->len -= seq_meta->anim_endofs;
 
-  seq_update_sound_bounds_recursive(scene, seq_meta);
+  /* Functions `SEQ_time_*_handle_frame_set()` can not be used here, because 
they are clamped, so
+   * change must be done at once. */
+  seq_meta->startofs = strip_start - seq_meta->start;
+  seq_meta->startdisp = strip_start; /* Only to make files usable in older 
versions. */
+  seq_meta->endofs = seq_meta->start + SEQ_time_strip_length_get(scene, 
seq_meta) - strip_end;
+  seq_meta->enddisp = strip_end; /* Only to make files usable in older 
versions. */
 
-  /* Prevent meta-strip to move in timeline. */
-  SEQ_time_left_handle_frame_set(scene, seq_meta, strip_start);
-  SEQ_time_right_handle_frame_set(scene, seq_meta, strip_end);
+  seq_update_sound_bounds_recursive(scene, seq_meta);
+  SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq_meta));
+  seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq_meta));
 }
 
 void seq_time_effect_range_set(const Scene *scene, Sequence *seq)
@@ -546,3 +551,14 @@ void SEQ_time_right_handle_frame_set(const Scene *scene, 
Sequence *seq, int val)
   SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
   seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
 }
+
+void seq_time_translate_handles(const Scene *scene, Sequence *seq, const int 
offset)
+{
+  seq->startofs += offset;
+  seq->endofs -= offset;
+  seq->startdisp += offset; /* Only to make files usable in older versions. */
+  seq->enddisp -= offset;   /* Only to make files usable in older versions. */
+
+  SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
+  seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
+}
diff --git a/source/blender/sequencer/intern/strip_time.h 
b/source/blender/sequencer/intern/strip_time.h
index db581649f8a..19f549924df 100644
--- a/source/blender/sequencer/intern/strip_time.h
+++ b/source/blender/sequencer/intern/strip_time.h
@@ -40,6 +40,7 @@ void seq_time_gap_info_get(const struct Scene *scene,
struct GapInfo *r_gap_info);
 void seq_time_effect_range_set(const struct Scene *scene, Sequence *seq);
 void seq_time_update_effects_strip_range(const struct Scene *scene, struct 
SeqCollection *effects);
+void seq_time_translate_handles(const struct Scene *scene, struct Sequence 
*seq, const int offset);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index a7361cbb1f9..fdfd208f957 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -146,10 +146,7 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, 
Sequence *seq, int delt
   SEQ_transform_translate_sequence(evil_scene, seq_child, delta);
 }
 /* Move meta start/end points. */
-SEQ_time_left_handle_frame_set(
-evil_scene, seq, SEQ_time_left_handle_frame_get(evil_scene, seq) + 
delta);
-SEQ_time_right_

[Bf-blender-cvs] [e1e980b1c98] temp-T97352-3d-texturing-seam-bleeding-b2: Cleanup: Use dedicated function to offset VSE strip handles

2022-09-20 Thread Richard Antalik
Commit: e1e980b1c98547d5c43f4b85f6018773462aeb61
Author: Richard Antalik
Date:   Sat Sep 17 05:21:33 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rBe1e980b1c98547d5c43f4b85f6018773462aeb61

Cleanup: Use dedicated function to offset VSE strip handles

===

M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index fdfd208f957..2c7bb69da66 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -95,10 +95,7 @@ void SEQ_transform_fix_single_image_seq_offsets(const Scene 
*scene, Sequence *se
   start = seq->start;
   if (start != left) {
 const int offset = left - start;
-SEQ_time_left_handle_frame_set(
-scene, seq, SEQ_time_left_handle_frame_get(scene, seq) - offset);
-SEQ_time_right_handle_frame_set(
-scene, seq, SEQ_time_right_handle_frame_get(scene, seq) - offset);
+seq_time_translate_handles(scene, seq, -offset);
 seq->start += offset;
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5f6f2e106c1] master: Cleanup: Use dedicated function to offset VSE strip handles

2022-09-16 Thread Richard Antalik
Commit: 5f6f2e106c1984e2b44580f2f45d513968f0ef29
Author: Richard Antalik
Date:   Sat Sep 17 05:21:33 2022 +0200
Branches: master
https://developer.blender.org/rB5f6f2e106c1984e2b44580f2f45d513968f0ef29

Cleanup: Use dedicated function to offset VSE strip handles

===

M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index fdfd208f957..2c7bb69da66 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -95,10 +95,7 @@ void SEQ_transform_fix_single_image_seq_offsets(const Scene 
*scene, Sequence *se
   start = seq->start;
   if (start != left) {
 const int offset = left - start;
-SEQ_time_left_handle_frame_set(
-scene, seq, SEQ_time_left_handle_frame_get(scene, seq) - offset);
-SEQ_time_right_handle_frame_set(
-scene, seq, SEQ_time_right_handle_frame_get(scene, seq) - offset);
+seq_time_translate_handles(scene, seq, -offset);
 seq->start += offset;
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d4a763d363f] master: Fix T101098: Moving meta strip can change its length

2022-09-16 Thread Richard Antalik
Commit: d4a763d363f14ae4de9411652d3556df2abcce21
Author: Richard Antalik
Date:   Sat Sep 17 03:38:38 2022 +0200
Branches: master
https://developer.blender.org/rBd4a763d363f14ae4de9411652d3556df2abcce21

Fix T101098: Moving meta strip can change its length

Caused by clamping handle translation to strip bounds in functions
`SEQ_time_*_handle_frame_set()` to prevent strip ending in invalid
state. Issue happens when meta strip is moved so quickly, such that
immediate offset is greater than strip length.

Currently meta strip bounds are updated when any contained strip changes
its position, but this update always preserves meta strip position.
Transforming meta strip is not possible directly and all contained
strips are moved instead. Therefore this is 2-step process and fix needs
to be applied on update function and on translation function.

Inline offset handling without clamping in function
`SEQ_time_update_meta_strip_range()`.
Add new function `seq_time_translate_handles()` to move both handles at
once in `SEQ_transform_translate_sequence()`.

===

M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h
M   source/blender/sequencer/intern/strip_transform.c

===

diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index 5d8266dbc6e..6725e0a8394 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -169,11 +169,16 @@ void SEQ_time_update_meta_strip_range(const Scene *scene, 
Sequence *seq_meta)
   seq_meta->len -= seq_meta->anim_startofs;
   seq_meta->len -= seq_meta->anim_endofs;
 
-  seq_update_sound_bounds_recursive(scene, seq_meta);
+  /* Functions `SEQ_time_*_handle_frame_set()` can not be used here, because 
they are clamped, so
+   * change must be done at once. */
+  seq_meta->startofs = strip_start - seq_meta->start;
+  seq_meta->startdisp = strip_start; /* Only to make files usable in older 
versions. */
+  seq_meta->endofs = seq_meta->start + SEQ_time_strip_length_get(scene, 
seq_meta) - strip_end;
+  seq_meta->enddisp = strip_end; /* Only to make files usable in older 
versions. */
 
-  /* Prevent meta-strip to move in timeline. */
-  SEQ_time_left_handle_frame_set(scene, seq_meta, strip_start);
-  SEQ_time_right_handle_frame_set(scene, seq_meta, strip_end);
+  seq_update_sound_bounds_recursive(scene, seq_meta);
+  SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq_meta));
+  seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq_meta));
 }
 
 void seq_time_effect_range_set(const Scene *scene, Sequence *seq)
@@ -546,3 +551,14 @@ void SEQ_time_right_handle_frame_set(const Scene *scene, 
Sequence *seq, int val)
   SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
   seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
 }
+
+void seq_time_translate_handles(const Scene *scene, Sequence *seq, const int 
offset)
+{
+  seq->startofs += offset;
+  seq->endofs -= offset;
+  seq->startdisp += offset; /* Only to make files usable in older versions. */
+  seq->enddisp -= offset;   /* Only to make files usable in older versions. */
+
+  SEQ_time_update_meta_strip_range(scene, 
seq_sequence_lookup_meta_by_seq(scene, seq));
+  seq_time_update_effects_strip_range(scene, 
seq_sequence_lookup_effects_by_seq(scene, seq));
+}
diff --git a/source/blender/sequencer/intern/strip_time.h 
b/source/blender/sequencer/intern/strip_time.h
index db581649f8a..19f549924df 100644
--- a/source/blender/sequencer/intern/strip_time.h
+++ b/source/blender/sequencer/intern/strip_time.h
@@ -40,6 +40,7 @@ void seq_time_gap_info_get(const struct Scene *scene,
struct GapInfo *r_gap_info);
 void seq_time_effect_range_set(const struct Scene *scene, Sequence *seq);
 void seq_time_update_effects_strip_range(const struct Scene *scene, struct 
SeqCollection *effects);
+void seq_time_translate_handles(const struct Scene *scene, struct Sequence 
*seq, const int offset);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/sequencer/intern/strip_transform.c 
b/source/blender/sequencer/intern/strip_transform.c
index a7361cbb1f9..fdfd208f957 100644
--- a/source/blender/sequencer/intern/strip_transform.c
+++ b/source/blender/sequencer/intern/strip_transform.c
@@ -146,10 +146,7 @@ void SEQ_transform_translate_sequence(Scene *evil_scene, 
Sequence *seq, int delt
   SEQ_transform_translate_sequence(evil_scene, seq_child, delta);
 }
 /* Move meta start/end points. */
-SEQ_time_left_handle_frame_set(
-evil_scene, seq, SEQ_time_left_handle_frame_get(evil_scene, seq) + 
delta);
-SEQ_time_right_handle_frame_set(
-evil_s

[Bf-blender-cvs] [f404dd0b3c7] master: Fix Unreported: VSE and NLA handle position text is not drawn

2022-09-14 Thread Richard Antalik
Commit: f404dd0b3c7732379a83b55362c49e2ad15bca25
Author: Richard Antalik
Date:   Thu Sep 15 00:54:17 2022 +0200
Branches: master
https://developer.blender.org/rBf404dd0b3c7732379a83b55362c49e2ad15bca25

Fix Unreported: VSE and NLA handle position text is not drawn

When moving strip, or it's handle, text with frame number near handle
should be drawn. This feature was broken by 8d53ead69bb5, because
function `UI_view2d_text_cache_add` sets all fields of `v2s->rect` to 0.
This case was checked in function `UI_view2d_text_cache_draw`, but it
was not quite obvious.

This commit reverts 8d53ead69bb5, makes condition for 0 size rectangle
more obvious and adds comment for clarity.

function `UI_view2d_text_cache_add` is only used in NLA and VSE, and
this new condition fits existing use-cases. Status of T97500 is not
affected by this change.

===

M   source/blender/editors/interface/view2d.cc

===

diff --git a/source/blender/editors/interface/view2d.cc 
b/source/blender/editors/interface/view2d.cc
index bb459f227f9..b5a86ebe18b 100644
--- a/source/blender/editors/interface/view2d.cc
+++ b/source/blender/editors/interface/view2d.cc
@@ -2100,12 +2100,22 @@ void UI_view2d_text_cache_draw(ARegion *region)
   col_pack_prev = v2s->col.pack;
 }
 
-BLF_enable(font_id, BLF_CLIPPING);
-BLF_clipping(
-font_id, v2s->rect.xmin - 4, v2s->rect.ymin - 4, v2s->rect.xmax + 4, 
v2s->rect.ymax + 4);
-BLF_draw_default(
-v2s->rect.xmin + xofs, v2s->rect.ymin + yofs, 0.0f, v2s->str, 
BLF_DRAW_STR_DUMMY_MAX);
-BLF_disable(font_id, BLF_CLIPPING);
+/* Don't use clipping if `v2s->rect` is not set. */
+if (BLI_rcti_size_x(&v2s->rect) == 0 && BLI_rcti_size_y(&v2s->rect) == 0) {
+  BLF_draw_default((float)(v2s->mval[0] + xofs),
+   (float)(v2s->mval[1] + yofs),
+   0.0,
+   v2s->str,
+   BLF_DRAW_STR_DUMMY_MAX);
+}
+else {
+  BLF_enable(font_id, BLF_CLIPPING);
+  BLF_clipping(
+  font_id, v2s->rect.xmin - 4, v2s->rect.ymin - 4, v2s->rect.xmax + 4, 
v2s->rect.ymax + 4);
+  BLF_draw_default(
+  v2s->rect.xmin + xofs, v2s->rect.ymin + yofs, 0.0f, v2s->str, 
BLF_DRAW_STR_DUMMY_MAX);
+  BLF_disable(font_id, BLF_CLIPPING);
+}
   }
   g_v2d_strings = nullptr;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3302b7e6a37] master: Fix T100998: Speed effect not rendering scene strip subframes

2022-09-13 Thread Richard Antalik
Commit: 3302b7e6a3768f04ef545634ee18a3280dfe8f62
Author: Richard Antalik
Date:   Tue Sep 13 20:24:49 2022 +0200
Branches: master
https://developer.blender.org/rB3302b7e6a3768f04ef545634ee18a3280dfe8f62

Fix T100998: Speed effect not rendering scene strip subframes

After change in 19bff8eb51f, subframe must be calculated for function
`RE_RenderFrame` in order to render subframes.

===

M   source/blender/sequencer/intern/render.c

===

diff --git a/source/blender/sequencer/intern/render.c 
b/source/blender/sequencer/intern/render.c
index fd3b6103b94..ea9090addf5 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -1506,8 +1506,16 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData 
*context,
 re = RE_NewSceneRender(scene);
   }
 
-  RE_RenderFrame(
-  re, context->bmain, scene, have_comp ? NULL : view_layer, camera, 
frame, 0.0f, false);
+  const float subframe = frame - floorf(frame);
+
+  RE_RenderFrame(re,
+ context->bmain,
+ scene,
+ have_comp ? NULL : view_layer,
+ camera,
+ floorf(frame),
+ subframe,
+ false);
 
   /* restore previous state after it was toggled on & off by 
RE_RenderFrame */
   G.is_rendering = is_rendering;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7518d30f2a4] master: Fix T100771: Incorrect strip length when timecodes are used

2022-09-13 Thread Richard Antalik
Commit: 7518d30f2a4b1db3e35e1cad3680dc50474ef46c
Author: Richard Antalik
Date:   Tue Sep 13 20:29:12 2022 +0200
Branches: master
https://developer.blender.org/rB7518d30f2a4b1db3e35e1cad3680dc50474ef46c

Fix T100771: Incorrect strip length when timecodes are used

Some files have 2 different framerates stored in metadata. Use function
`av_guess_frame_rate` to get media FPS, because it provides more
consistent / correct values across multiple files.

Reviewed By: sergey

Differential Revision: https://developer.blender.org/D15839

===

M   source/blender/imbuf/intern/indexer.c

===

diff --git a/source/blender/imbuf/intern/indexer.c 
b/source/blender/imbuf/intern/indexer.c
index 00396c01d99..a4f1f5e813a 100644
--- a/source/blender/imbuf/intern/indexer.c
+++ b/source/blender/imbuf/intern/indexer.c
@@ -1012,7 +1012,7 @@ static int index_rebuild_ffmpeg(FFmpegIndexBuilderContext 
*context,
 
   stream_size = avio_size(context->iFormatCtx->pb);
 
-  context->frame_rate = av_q2d(context->iStream->r_frame_rate);
+  context->frame_rate = av_q2d(av_guess_frame_rate(context->iFormatCtx, 
context->iStream, NULL));
   context->pts_time_base = av_q2d(context->iStream->time_base);
 
   while (av_read_frame(context->iFormatCtx, next_packet) >= 0) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7f70b995841] master: Fix VSE: accidentally commented out code

2022-09-05 Thread Richard Antalik
Commit: 7f70b9958410a16c9288112924703598b49a5c0c
Author: Richard Antalik
Date:   Mon Sep 5 17:39:23 2022 +0200
Branches: master
https://developer.blender.org/rB7f70b9958410a16c9288112924703598b49a5c0c

Fix VSE: accidentally commented out code

`DEG_id_tag_update` was commented out in `sequencer_meta_toggle_exec()`.
Tagging does not affect functionality now, but it should be done.

===

M   source/blender/editors/space_sequencer/sequencer_edit.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c 
b/source/blender/editors/space_sequencer/sequencer_edit.c
index e37d254b16f..86dc9f566e5 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1931,7 +1931,7 @@ static int sequencer_meta_toggle_exec(bContext *C, 
wmOperator *UNUSED(op))
 SEQ_select_active_set(scene, meta_parent);
   }
 
-  // DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
+  DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
   WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
 
   return OPERATOR_FINISHED;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [70da5a1434e] master: Cleanup: Remove unused code for VSE waveform drawing

2022-09-05 Thread Richard Antalik
Commit: 70da5a1434efb5d1639264d8a0c49b56e8fc5db6
Author: Richard Antalik
Date:   Mon Sep 5 17:47:27 2022 +0200
Branches: master
https://developer.blender.org/rB70da5a1434efb5d1639264d8a0c49b56e8fc5db6

Cleanup: Remove unused code for VSE waveform drawing

===

M   source/blender/editors/space_sequencer/sequencer_draw.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c 
b/source/blender/editors/space_sequencer/sequencer_draw.c
index 0bacbde8240..bb027c99546 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -519,18 +519,6 @@ static void draw_seq_waveform_overlay(
   MEM_freeN(waveform_data);
 }
 
-#if 0
-static size_t *waveform_append(WaveVizData *waveform_data,
-   vec2f pos,
-   const float value_min,
-   const float value_max,
-   const float y_mid,
-   const float y_scale,
-   const float rms,
-   const bool is_clipping,
-   const bool is_line_strip)
-#endif
-
 static void drawmeta_contents(Scene *scene,
   Sequence *seqm,
   float x1,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a77a1bcae75] master: Merge branch 'blender-v3.3-release'

2022-08-23 Thread Richard Antalik
Commit: a77a1bcae759a585599ca813215e23654062dbaa
Author: Richard Antalik
Date:   Tue Aug 23 15:09:50 2022 +0200
Branches: master
https://developer.blender.org/rBa77a1bcae759a585599ca813215e23654062dbaa

Merge branch 'blender-v3.3-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [efc9faef23f] blender-v3.3-release: Fix T98954: Color management is very slow with sequencer sound

2022-08-23 Thread Richard Antalik
Commit: efc9faef23fdbc3e3eb0d88ed096aa269a294f01
Author: Richard Antalik
Date:   Tue Aug 23 14:56:38 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rBefc9faef23fdbc3e3eb0d88ed096aa269a294f01

Fix T98954: Color management is very slow with sequencer sound

Function `rna_ColorManagement_update` tagged unnecesary updates.

Reviewed By: sergey, brecht

Differential Revision: https://developer.blender.org/D15710

===

M   source/blender/makesrna/intern/rna_color.c

===

diff --git a/source/blender/makesrna/intern/rna_color.c 
b/source/blender/makesrna/intern/rna_color.c
index 863238103d7..b68d87587e7 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -682,7 +682,6 @@ static void rna_ColorManagement_update(Main *UNUSED(bmain), 
Scene *UNUSED(scene)
   }
 
   if (GS(id->name) == ID_SCE) {
-DEG_id_tag_update(id, 0);
 WM_main_add_notifier(NC_SCENE | ND_SEQUENCER, NULL);
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5fab3bc630f] master: Merge branch 'blender-v3.3-release'

2022-08-16 Thread Richard Antalik
Commit: 5fab3bc630f8c0572c8afa7c68f45abe6f2e412f
Author: Richard Antalik
Date:   Wed Aug 17 05:12:34 2022 +0200
Branches: master
https://developer.blender.org/rB5fab3bc630f8c0572c8afa7c68f45abe6f2e412f

Merge branch 'blender-v3.3-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [06a01168f66] blender-v3.3-release: Fix T100079: Encoding with DNxHD fails due to bad parameters

2022-08-16 Thread Richard Antalik
Commit: 06a01168f669aa223f87f6b65538ce36c5300157
Author: Richard Antalik
Date:   Wed Aug 17 04:49:38 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB06a01168f669aa223f87f6b65538ce36c5300157

Fix T100079: Encoding with DNxHD fails due to bad parameters

Constant_rate_factor mode was not updated when choosing DNxHD codec in
RNA update function.

Ensure `FFM_CRF_NONE` is set.

===

M   source/blender/makesrna/intern/rna_scene.c

===

diff --git a/source/blender/makesrna/intern/rna_scene.c 
b/source/blender/makesrna/intern/rna_scene.c
index 8ed07a8dbf7..a5cf02b9ba4 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2728,7 +2728,11 @@ static void rna_FFmpegSettings_codec_update(Main 
*UNUSED(bmain),
 PointerRNA *ptr)
 {
   FFMpegCodecData *codec_data = (FFMpegCodecData *)ptr->data;
-  if (!ELEM(codec_data->codec, AV_CODEC_ID_H264, AV_CODEC_ID_MPEG4, 
AV_CODEC_ID_VP9)) {
+  if (!ELEM(codec_data->codec,
+AV_CODEC_ID_H264,
+AV_CODEC_ID_MPEG4,
+AV_CODEC_ID_VP9,
+AV_CODEC_ID_DNXHD)) {
 /* Constant Rate Factor (CRF) setting is only available for H264,
  * MPEG4 and WEBM/VP9 codecs. So changing encoder quality mode to
  * CBR as CRF is not supported.

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [cd800656865] blender-v3.2-release: Fix T100049: Crash when render finishes

2022-08-02 Thread Richard Antalik
Commit: cd800656865e6feed6a4f72d6bf5b33a67cbad40
Author: Richard Antalik
Date:   Tue Aug 2 17:52:40 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rBcd800656865e6feed6a4f72d6bf5b33a67cbad40

Fix T100049: Crash when render finishes

Caused by NULL dereference of `Editing` before NULL check was done.

===

M   source/blender/sequencer/intern/utils.c

===

diff --git a/source/blender/sequencer/intern/utils.c 
b/source/blender/sequencer/intern/utils.c
index 0cf47420d8f..751cf680651 100644
--- a/source/blender/sequencer/intern/utils.c
+++ b/source/blender/sequencer/intern/utils.c
@@ -384,14 +384,15 @@ void seq_open_anim_file(Scene *scene, Sequence *seq, bool 
openfile)
 const Sequence *SEQ_get_topmost_sequence(const Scene *scene, int frame)
 {
   Editing *ed = scene->ed;
-  ListBase *channels = SEQ_channels_displayed_get(ed);
-  const Sequence *seq, *best_seq = NULL;
-  int best_machine = -1;
 
   if (!ed) {
 return NULL;
   }
 
+  ListBase *channels = SEQ_channels_displayed_get(ed);
+  const Sequence *seq, *best_seq = NULL;
+  int best_machine = -1;
+
   for (seq = ed->seqbasep->first; seq; seq = seq->next) {
 if (SEQ_render_is_muted(channels, seq) || 
!SEQ_time_strip_intersects_frame(seq, frame)) {
   continue;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ac9d9c993ad] master: Merge branch 'blender-v3.3-release'

2022-08-02 Thread Richard Antalik
Commit: ac9d9c993ad1610881828e89f131dc7e9bf8e8c2
Author: Richard Antalik
Date:   Tue Aug 2 17:57:12 2022 +0200
Branches: master
https://developer.blender.org/rBac9d9c993ad1610881828e89f131dc7e9bf8e8c2

Merge branch 'blender-v3.3-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [97b226ac511] blender-v3.3-release: Fix T100049: Crash when render finishes

2022-08-02 Thread Richard Antalik
Commit: 97b226ac51188ce1f4ab8bee7820c7dd296c7012
Author: Richard Antalik
Date:   Tue Aug 2 17:52:40 2022 +0200
Branches: blender-v3.3-release
https://developer.blender.org/rB97b226ac51188ce1f4ab8bee7820c7dd296c7012

Fix T100049: Crash when render finishes

Caused by NULL dereference of `Editing` before NULL check was done.

===

M   source/blender/sequencer/intern/utils.c

===

diff --git a/source/blender/sequencer/intern/utils.c 
b/source/blender/sequencer/intern/utils.c
index 2026e322763..e6c641a5532 100644
--- a/source/blender/sequencer/intern/utils.c
+++ b/source/blender/sequencer/intern/utils.c
@@ -338,14 +338,15 @@ void seq_open_anim_file(Scene *scene, Sequence *seq, bool 
openfile)
 const Sequence *SEQ_get_topmost_sequence(const Scene *scene, int frame)
 {
   Editing *ed = scene->ed;
-  ListBase *channels = SEQ_channels_displayed_get(ed);
-  const Sequence *seq, *best_seq = NULL;
-  int best_machine = -1;
 
   if (!ed) {
 return NULL;
   }
 
+  ListBase *channels = SEQ_channels_displayed_get(ed);
+  const Sequence *seq, *best_seq = NULL;
+  int best_machine = -1;
+
   for (seq = ed->seqbasep->first; seq; seq = seq->next) {
 if (SEQ_render_is_muted(channels, seq) ||
 !SEQ_time_strip_intersects_frame(scene, seq, frame)) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [82f65d8971e] master: Cleanup: VSE waveform drawing

2022-07-15 Thread Richard Antalik
Commit: 82f65d8971ea2def50ab6cd6031793207cc45168
Author: Richard Antalik
Date:   Fri Jul 15 15:46:50 2022 +0200
Branches: master
https://developer.blender.org/rB82f65d8971ea2def50ab6cd6031793207cc45168

Cleanup: VSE waveform drawing

No functional changes.

===

M   source/blender/editors/space_sequencer/sequencer_draw.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c 
b/source/blender/editors/space_sequencer/sequencer_draw.c
index aa5681306a4..b1e13850bf2 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -241,329 +241,296 @@ typedef struct WaveVizData {
   float pos[2];
   float rms_pos;
   bool clip;
-  bool end;
+  bool draw_line;/* Draw triangle otherwise. */
+  bool final_sample; /* There are no more samples. */
 } WaveVizData;
 
-static int get_section_len(WaveVizData *start, WaveVizData *end)
+static bool seq_draw_waveforms_poll(const bContext *C, SpaceSeq *sseq, 
Sequence *seq)
 {
-  int len = 0;
-  while (start != end) {
-len++;
-if (start->end) {
-  return len;
-}
-start++;
-  }
-  return len;
-}
+  const bool strip_is_valid = seq->type == SEQ_TYPE_SOUND_RAM && seq->sound != 
NULL;
+  const bool overlays_enabled = (sseq->flag & SEQ_SHOW_OVERLAY) != 0;
+  const bool ovelay_option = ((sseq->timeline_overlay.flag & 
SEQ_TIMELINE_ALL_WAVEFORMS) != 0 ||
+  (seq->flag & SEQ_AUDIO_DRAW_WAVEFORM));
 
-static void draw_waveform(WaveVizData *iter, WaveVizData *end, GPUPrimType 
prim_type, bool use_rms)
-{
-  int strip_len = get_section_len(iter, end);
-  if (strip_len > 1) {
-GPU_blend(GPU_BLEND_ALPHA);
-GPUVertFormat *format = immVertexFormat();
-uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, 
GPU_FETCH_FLOAT);
-uint col = GPU_vertformat_attr_add(format, "color", GPU_COMP_F32, 4, 
GPU_FETCH_FLOAT);
+  if ((sseq->timeline_overlay.flag & SEQ_TIMELINE_NO_WAVEFORMS) != 0) {
+return false;
+  }
 
-immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
-immBegin(prim_type, strip_len);
+  if (strip_is_valid && overlays_enabled && ovelay_option) {
+return true;
+  }
 
-while (iter != end) {
-  if (iter->clip) {
-immAttr4f(col, 1.0f, 0.0f, 0.0f, 0.5f);
-  }
-  else if (use_rms) {
-immAttr4f(col, 1.0f, 1.0f, 1.0f, 0.8f);
-  }
-  else {
-immAttr4f(col, 1.0f, 1.0f, 1.0f, 0.5f);
-  }
+  return false;
+}
 
-  if (use_rms) {
-immVertex2f(pos, iter->pos[0], iter->rms_pos);
-  }
-  else {
-immVertex2f(pos, iter->pos[0], iter->pos[1]);
-  }
+static void waveform_job_start_if_needed(const bContext *C, Sequence *seq)
+{
+  bSound *sound = seq->sound;
 
-  if (iter->end) {
-/* End of line. */
-iter++;
-strip_len = get_section_len(iter, end);
-if (strip_len != 0) {
-  immEnd();
-  immUnbindProgram();
-  immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
-  immBegin(prim_type, strip_len);
-}
-  }
-  else {
-iter++;
-  }
+  BLI_spin_lock(sound->spinlock);
+  if (!sound->waveform) {
+/* Load the waveform data if it hasn't been loaded and cached already. */
+if (!(sound->tags & SOUND_TAGS_WAVEFORM_LOADING)) {
+  /* Prevent sounds from reloading. */
+  sound->tags |= SOUND_TAGS_WAVEFORM_LOADING;
+  BLI_spin_unlock(sound->spinlock);
+  sequencer_preview_add_sound(C, seq);
+}
+else {
+  BLI_spin_unlock(sound->spinlock);
 }
-immEnd();
-immUnbindProgram();
-
-GPU_blend(GPU_BLEND_NONE);
   }
+  BLI_spin_unlock(sound->spinlock);
 }
 
-static float clamp_frame_coord_to_pixel(float frame_coord,
-float pixel_frac,
-float frames_per_pixel)
+static size_t get_vertex_count(WaveVizData *waveform_data)
 {
-  float cur_pixel = (frame_coord / frames_per_pixel);
-  float new_pixel = (int)(frame_coord / frames_per_pixel) + pixel_frac;
-  if (cur_pixel > new_pixel) {
-new_pixel += 1.0f;
+  bool draw_line = waveform_data->draw_line;
+  size_t length = 0;
+
+  while (waveform_data->draw_line == draw_line && 
!waveform_data->final_sample) {
+waveform_data++;
+length++;
   }
-  return new_pixel * frames_per_pixel;
+
+  return length;
 }
 
-/**
- * \param x1, x2, y1, y2: The starting and end X value to draw the wave, same 
for y1 and y2.
- * \param frames_per_pixel: The amount of pixels a whole frame takes up 
(x-axis direction).
- */
-static void draw_seq_waveform_overlay(View2D *v2d,
-  const bContext *C,
-

[Bf-blender-cvs] [fa00bfaf2a5] temp-T97352-3d-texturing-seam-bleeding-b2: Fix T99494: Transition effects not working correctly

2022-07-11 Thread Richard Antalik
Commit: fa00bfaf2a57fb68e50d7b91f115beb16d79a488
Author: Richard Antalik
Date:   Fri Jul 8 17:44:24 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rBfa00bfaf2a57fb68e50d7b91f115beb16d79a488

Fix T99494: Transition effects not working correctly

This was caused by strip content length and start position being
incorrect. Previously this was set from strip boundary by update
function, but it was removed.

Add back code to set effect strip start and length.

Previously content length was always 1 for effects, but now it must
correspond to strip length. Because of this workaround for speed effect
to get this apparent content length was removed.

===

M   source/blender/sequencer/intern/effects.c
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/source/blender/sequencer/intern/effects.c 
b/source/blender/sequencer/intern/effects.c
index 2ab8b170ce9..25a6acb8975 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -2578,21 +2578,6 @@ static int early_out_speed(Sequence *UNUSED(seq), float 
UNUSED(fac))
   return EARLY_DO_EFFECT;
 }
 
-/**
- * Generator strips with zero inputs have their length set to 1 permanently. 
In some cases it is
- * useful to use speed effect on these strips because they can be animated. 
This can be done by
- * using their length as is on timeline as content length. See T82698.
- */
-static int seq_effect_speed_get_strip_content_length(Scene *scene, const 
Sequence *seq)
-{
-  if ((seq->type & SEQ_TYPE_EFFECT) != 0 && 
SEQ_effect_get_num_inputs(seq->type) == 0) {
-return SEQ_time_right_handle_frame_get(scene, seq) -
-   SEQ_time_left_handle_frame_get(scene, seq);
-  }
-
-  return SEQ_time_strip_length_get(scene, seq);
-}
-
 static FCurve *seq_effect_speed_speed_factor_curve_get(Scene *scene, Sequence 
*seq)
 {
   return id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "speed_factor", 
0, NULL);
@@ -2657,8 +2642,7 @@ float seq_speed_effect_target_frame_get(Scene *scene,
   switch (s->speed_control_type) {
 case SEQ_SPEED_STRETCH: {
   /* Only right handle controls effect speed! */
-  const float target_content_length = 
seq_effect_speed_get_strip_content_length(scene,
-   
 source) -
+  const float target_content_length = SEQ_time_strip_length_get(scene, 
source) -
   source->startofs;
   const float speed_effetct_length = 
SEQ_time_right_handle_frame_get(scene, seq_speed) -
  SEQ_time_left_handle_frame_get(scene, 
seq_speed);
@@ -2678,15 +2662,14 @@ float seq_speed_effect_target_frame_get(Scene *scene,
   break;
 }
 case SEQ_SPEED_LENGTH:
-  target_frame = seq_effect_speed_get_strip_content_length(scene, source) *
- (s->speed_fader_length / 100.0f);
+  target_frame = SEQ_time_strip_length_get(scene, source) * 
(s->speed_fader_length / 100.0f);
   break;
 case SEQ_SPEED_FRAME_NUMBER:
   target_frame = s->speed_fader_frame_number;
   break;
   }
 
-  CLAMP(target_frame, 0, seq_effect_speed_get_strip_content_length(scene, 
source));
+  CLAMP(target_frame, 0, SEQ_time_strip_length_get(scene, source));
   target_frame += seq_speed->start;
 
   /* No interpolation. */
diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index aa51813c9b8..5d8266dbc6e 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -203,6 +203,8 @@ void seq_time_effect_range_set(const Scene *scene, Sequence 
*seq)
 
   /* Values unusable for effects, these should be always 0. */
   seq->startofs = seq->endofs = seq->anim_startofs = seq->anim_endofs = 0;
+  seq->start = seq->startdisp;
+  seq->len = seq->enddisp - seq->startdisp;
 }
 
 /* Update strip startdisp and enddisp (n-input effects have no len to 
calculate these). */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2ee68917287] master: Fix T99494: Transition effects not working correctly

2022-07-08 Thread Richard Antalik
Commit: 2ee68917287627a3803a8eae91d4d788ac316185
Author: Richard Antalik
Date:   Fri Jul 8 17:44:24 2022 +0200
Branches: master
https://developer.blender.org/rB2ee68917287627a3803a8eae91d4d788ac316185

Fix T99494: Transition effects not working correctly

This was caused by strip content length and start position being
incorrect. Previously this was set from strip boundary by update
function, but it was removed.

Add back code to set effect strip start and length.

Previously content length was always 1 for effects, but now it must
correspond to strip length. Because of this workaround for speed effect
to get this apparent content length was removed.

===

M   source/blender/sequencer/intern/effects.c
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/source/blender/sequencer/intern/effects.c 
b/source/blender/sequencer/intern/effects.c
index 2ab8b170ce9..25a6acb8975 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -2578,21 +2578,6 @@ static int early_out_speed(Sequence *UNUSED(seq), float 
UNUSED(fac))
   return EARLY_DO_EFFECT;
 }
 
-/**
- * Generator strips with zero inputs have their length set to 1 permanently. 
In some cases it is
- * useful to use speed effect on these strips because they can be animated. 
This can be done by
- * using their length as is on timeline as content length. See T82698.
- */
-static int seq_effect_speed_get_strip_content_length(Scene *scene, const 
Sequence *seq)
-{
-  if ((seq->type & SEQ_TYPE_EFFECT) != 0 && 
SEQ_effect_get_num_inputs(seq->type) == 0) {
-return SEQ_time_right_handle_frame_get(scene, seq) -
-   SEQ_time_left_handle_frame_get(scene, seq);
-  }
-
-  return SEQ_time_strip_length_get(scene, seq);
-}
-
 static FCurve *seq_effect_speed_speed_factor_curve_get(Scene *scene, Sequence 
*seq)
 {
   return id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "speed_factor", 
0, NULL);
@@ -2657,8 +2642,7 @@ float seq_speed_effect_target_frame_get(Scene *scene,
   switch (s->speed_control_type) {
 case SEQ_SPEED_STRETCH: {
   /* Only right handle controls effect speed! */
-  const float target_content_length = 
seq_effect_speed_get_strip_content_length(scene,
-   
 source) -
+  const float target_content_length = SEQ_time_strip_length_get(scene, 
source) -
   source->startofs;
   const float speed_effetct_length = 
SEQ_time_right_handle_frame_get(scene, seq_speed) -
  SEQ_time_left_handle_frame_get(scene, 
seq_speed);
@@ -2678,15 +2662,14 @@ float seq_speed_effect_target_frame_get(Scene *scene,
   break;
 }
 case SEQ_SPEED_LENGTH:
-  target_frame = seq_effect_speed_get_strip_content_length(scene, source) *
- (s->speed_fader_length / 100.0f);
+  target_frame = SEQ_time_strip_length_get(scene, source) * 
(s->speed_fader_length / 100.0f);
   break;
 case SEQ_SPEED_FRAME_NUMBER:
   target_frame = s->speed_fader_frame_number;
   break;
   }
 
-  CLAMP(target_frame, 0, seq_effect_speed_get_strip_content_length(scene, 
source));
+  CLAMP(target_frame, 0, SEQ_time_strip_length_get(scene, source));
   target_frame += seq_speed->start;
 
   /* No interpolation. */
diff --git a/source/blender/sequencer/intern/strip_time.c 
b/source/blender/sequencer/intern/strip_time.c
index aa51813c9b8..5d8266dbc6e 100644
--- a/source/blender/sequencer/intern/strip_time.c
+++ b/source/blender/sequencer/intern/strip_time.c
@@ -203,6 +203,8 @@ void seq_time_effect_range_set(const Scene *scene, Sequence 
*seq)
 
   /* Values unusable for effects, these should be always 0. */
   seq->startofs = seq->endofs = seq->anim_startofs = seq->anim_endofs = 0;
+  seq->start = seq->startdisp;
+  seq->len = seq->enddisp - seq->startdisp;
 }
 
 /* Update strip startdisp and enddisp (n-input effects have no len to 
calculate these). */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [16264aebe6e] master: Fix sequencer transform test failing.

2022-07-01 Thread Richard Antalik
Commit: 16264aebe6e022f9fbb95851d8806681ae5726a3
Author: Richard Antalik
Date:   Fri Jul 1 08:59:03 2022 +0200
Branches: master
https://developer.blender.org/rB16264aebe6e022f9fbb95851d8806681ae5726a3

Fix sequencer transform test failing.

Issue was caused by using function `SEQ_render_give_stripelem` to obtain
first `StripElem`, but this function now takes retiming into account.

Since first element was meant to be obtained, point to it directly by
using `seq->strip->stripdata`.

===

M   source/blender/blenloader/intern/versioning_290.c

===

diff --git a/source/blender/blenloader/intern/versioning_290.c 
b/source/blender/blenloader/intern/versioning_290.c
index 47786f55871..de652b40590 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -160,7 +160,7 @@ static void seq_convert_transform_crop(const Scene *scene,
   const uint32_t use_transform_flag = (1 << 16);
   const uint32_t use_crop_flag = (1 << 17);
 
-  const StripElem *s_elem = SEQ_render_give_stripelem(scene, seq, seq->start);
+  const StripElem *s_elem = seq->strip->stripdata;
   if (s_elem != NULL) {
 image_size_x = s_elem->orig_width;
 image_size_y = s_elem->orig_height;
@@ -285,7 +285,7 @@ static void seq_convert_transform_crop_2(const Scene *scene,
  Sequence *seq,
  const eSpaceSeq_Proxy_RenderSize 
render_size)
 {
-  const StripElem *s_elem = SEQ_render_give_stripelem(scene, seq, seq->start);
+  const StripElem *s_elem = seq->strip->stripdata;
   if (s_elem == NULL) {
 return;
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a9696f04a01] master: Fix T90964: Strip can't be deleted if cursor is at bottom of timeline

2022-06-30 Thread Richard Antalik
Commit: a9696f04a012ce23ef419afe489378d1ce840638
Author: Richard Antalik
Date:   Thu Jun 30 20:41:09 2022 +0200
Branches: master
https://developer.blender.org/rBa9696f04a012ce23ef419afe489378d1ce840638

Fix T90964: Strip can't be deleted if cursor is at bottom of timeline

Caused by hard-coded width of markers region causing operator to pass
through.

Execute operator if there are no markers.

===

M   source/blender/editors/space_sequencer/sequencer_edit.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c 
b/source/blender/editors/space_sequencer/sequencer_edit.c
index 79eeb3c0374..cb95e9a75de 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1703,8 +1703,10 @@ static int sequencer_delete_exec(bContext *C, wmOperator 
*op)
 static int sequencer_delete_invoke(bContext *C, wmOperator *op, const wmEvent 
*event)
 {
   ARegion *region = CTX_wm_region(C);
+  Scene *scene = CTX_data_scene(C);
+  ListBase *markers = &scene->markers;
 
-  if (region->regiontype == RGN_TYPE_WINDOW) {
+  if (region->regiontype == RGN_TYPE_WINDOW && 
!BLI_listbase_is_empty(markers)) {
 /* Bounding box of 30 pixels is used for markers shortcuts,
  * prevent conflict with markers shortcuts here.
  */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [66de653784a] master: Fix incorrect strip position if pitch was animated

2022-06-30 Thread Richard Antalik
Commit: 66de653784ab06ccea46413de6b2f086b5a69d30
Author: Richard Antalik
Date:   Thu Jun 30 18:26:14 2022 +0200
Branches: master
https://developer.blender.org/rB66de653784ab06ccea46413de6b2f086b5a69d30

Fix incorrect strip position if pitch was animated

Commit 302b04a5a3fc introduced new retiming system, that unified sound
pitch animation with strip speed control. Because sound playback is
handled in different way, this did not work as expected and old files
were broken. In addition animation was not copied to new property.

Revert length position and offset handling for sound strips so their
position does not change and remap fcurves to new `speed_factor`
property.

===

M   source/blender/blenloader/intern/versioning_300.c
M   source/blender/makesrna/intern/rna_sequencer.c
M   source/blender/sequencer/intern/strip_time.c

===

diff --git a/source/blender/blenloader/intern/versioning_300.c 
b/source/blender/blenloader/intern/versioning_300.c
index 35b1367ca1e..f6cc413d220 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -595,6 +595,39 @@ static bNodeTree *add_realize_node_tree(Main *bmain)
   return node_tree;
 }
 
+static void seq_speed_factor_fix_rna_path(Sequence *seq, ListBase *fcurves)
+{
+  char name_esc[(sizeof(seq->name) - 2) * 2];
+  BLI_str_escape(name_esc, seq->name + 2, sizeof(name_esc));
+  char *path = BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].pitch", 
name_esc);
+  FCurve *fcu = BKE_fcurve_find(&fcurves, path, 0);
+  if (fcu != NULL) {
+MEM_freeN(fcu->rna_path);
+fcu->rna_path = 
BLI_sprintfN("sequence_editor.sequences_all[\"%s\"].speed_factor", name_esc);
+  }
+  MEM_freeN(path);
+}
+
+static bool seq_speed_factor_set(Sequence *seq, void *user_data)
+{
+  const Scene *scene = user_data;
+  if (seq->type == SEQ_TYPE_SOUND_RAM) {
+/* Move `pitch` animation to `speed_factor` */
+if (scene->adt && scene->adt->action) {
+  seq_speed_factor_fix_rna_path(seq, &scene->adt->action->curves);
+}
+if (scene->adt && !BLI_listbase_is_empty(&scene->adt->drivers)) {
+  seq_speed_factor_fix_rna_path(seq, &scene->adt->drivers);
+}
+
+seq->speed_factor = seq->pitch;
+  }
+  else {
+seq->speed_factor = 1.0f;
+  }
+  return true;
+}
+
 void do_versions_after_linking_300(Main *bmain, ReportList *UNUSED(reports))
 {
   if (MAIN_VERSION_ATLEAST(bmain, 300, 0) && !MAIN_VERSION_ATLEAST(bmain, 300, 
1)) {
@@ -819,6 +852,17 @@ void do_versions_after_linking_300(Main *bmain, ReportList 
*UNUSED(reports))
   }
 }
   }
+
+  if (!MAIN_VERSION_ATLEAST(bmain, 303, 5)) {
+LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
+  Editing *ed = SEQ_editing_get(scene);
+  if (ed == NULL) {
+continue;
+  }
+  SEQ_for_each_callback(&ed->seqbase, seq_speed_factor_set, scene);
+}
+  }
+
   /**
* Versioning code until next subversion bump goes here.
*
@@ -1235,17 +1279,6 @@ static bool version_merge_still_offsets(Sequence *seq, 
void *UNUSED(user_data))
   return true;
 }
 
-static bool seq_speed_factor_set(Sequence *seq, void *UNUSED(user_data))
-{
-  if (seq->type == SEQ_TYPE_SOUND_RAM) {
-seq->speed_factor = seq->pitch;
-  }
-  else {
-seq->speed_factor = 1.0f;
-  }
-  return true;
-}
-
 /* Those `version_liboverride_rnacollections_*` functions mimic the old, 
pre-3.0 code to find
  * anchor and source items in the given list of modifiers, constraints etc., 
using only the
  * `subitem_local` data of the override property operation.
@@ -3223,14 +3256,6 @@ void blo_do_versions_300(FileData *fd, Library 
*UNUSED(lib), Main *bmain)
 }
   }
 }
-
-LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
-  Editing *ed = SEQ_editing_get(scene);
-  if (ed == NULL) {
-continue;
-  }
-  SEQ_for_each_callback(&ed->seqbase, seq_speed_factor_set, NULL);
-}
   }
   /**
* Versioning code until next subversion bump goes here.
diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index f9dfb8544ca..04037a64426 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -2331,7 +2331,6 @@ static void rna_def_speed_factor(StructRNA *srna)
   RNA_def_property_float_default(prop, 1.0f);
   RNA_def_property_range(prop, 0.1f, FLT_MAX);
   RNA_def_property_ui_range(prop, 1.0f, 100.0f, 10.0, 3);
-  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_ui_text(prop, "Speed Factor", "Multiply playback speed");
   RNA_def_property_float_funcs(
   prop, NULL, "

[Bf-blender-cvs] [b6c668a13dd] blender-v3.2-release: Fix T99266: Crash when dragging file to VSE from file browser

2022-06-30 Thread Richard Antalik
Commit: b6c668a13dda87a0fc95bd1b5bbfde651e378263
Author: Richard Antalik
Date:   Thu Jun 30 15:56:08 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rBb6c668a13dda87a0fc95bd1b5bbfde651e378263

Fix T99266: Crash when dragging file to VSE from file browser

Crash happened because sequencer data was not initialized. Ensure data
is initialized before adding strip.

===

M   source/blender/editors/space_sequencer/sequencer_drag_drop.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_drag_drop.c 
b/source/blender/editors/space_sequencer/sequencer_drag_drop.c
index 645c0dc9a1d..b5bd82fd31a 100644
--- a/source/blender/editors/space_sequencer/sequencer_drag_drop.c
+++ b/source/blender/editors/space_sequencer/sequencer_drag_drop.c
@@ -231,10 +231,9 @@ static void update_overlay_strip_poistion_data(bContext 
*C, const int mval[2])
   else {
 /* Check if there is a strip that would intersect with the new strip(s). */
 coords->is_intersecting = false;
-Sequence dummy_seq = {.machine = coords->channel,
-  .startdisp = coords->start_frame,
-  .enddisp = coords->start_frame + coords->strip_len};
-Editing *ed = SEQ_editing_get(scene);
+Sequence dummy_seq = {
+.machine = coords->channel, .start = coords->start_frame, .len = 
coords->strip_len};
+Editing *ed = SEQ_editing_ensure(scene);
 
 for (int i = 0; i < coords->channel_len && !coords->is_intersecting; i++) {
   coords->is_intersecting = SEQ_transform_test_overlap(ed->seqbasep, 
&dummy_seq);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6bb703a9ee8] master: Fix T99266: Crash when dragging file to VSE from file browser

2022-06-30 Thread Richard Antalik
Commit: 6bb703a9ee8dc368c17f7432485e2e863597a576
Author: Richard Antalik
Date:   Thu Jun 30 15:56:08 2022 +0200
Branches: master
https://developer.blender.org/rB6bb703a9ee8dc368c17f7432485e2e863597a576

Fix T99266: Crash when dragging file to VSE from file browser

Crash happened because sequencer data was not initialized. Ensure data
is initialized before adding strip.

===

M   source/blender/editors/space_sequencer/sequencer_drag_drop.c

===

diff --git a/source/blender/editors/space_sequencer/sequencer_drag_drop.c 
b/source/blender/editors/space_sequencer/sequencer_drag_drop.c
index 586cdad7e74..94427009939 100644
--- a/source/blender/editors/space_sequencer/sequencer_drag_drop.c
+++ b/source/blender/editors/space_sequencer/sequencer_drag_drop.c
@@ -233,7 +233,7 @@ static void update_overlay_strip_poistion_data(bContext *C, 
const int mval[2])
 coords->is_intersecting = false;
 Sequence dummy_seq = {
 .machine = coords->channel, .start = coords->start_frame, .len = 
coords->strip_len};
-Editing *ed = SEQ_editing_get(scene);
+Editing *ed = SEQ_editing_ensure(scene);
 
 for (int i = 0; i < coords->channel_len && !coords->is_intersecting; i++) {
   coords->is_intersecting = SEQ_transform_test_overlap(scene, 
ed->seqbasep, &dummy_seq);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [547efb6b1e3] master: Fix T99133:animating multiply factor on video strips crashes blender

2022-06-30 Thread Richard Antalik
Commit: 547efb6b1e3414f1b696fb1975e0c49742a264dc
Author: Richard Antalik
Date:   Thu Jun 30 15:27:49 2022 +0200
Branches: master
https://developer.blender.org/rB547efb6b1e3414f1b696fb1975e0c49742a264dc

Fix T99133:animating multiply factor on video strips crashes blender

Crash caused by `effect_seq->len` being 0, so frame map was not built.

Get length in timeline using handle positions.

===

M   source/blender/sequencer/intern/effects.c

===

diff --git a/source/blender/sequencer/intern/effects.c 
b/source/blender/sequencer/intern/effects.c
index 368c00534be..4aec4916f7b 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -2600,7 +2600,10 @@ static FCurve 
*seq_effect_speed_speed_factor_curve_get(Scene *scene, Sequence *s
 
 void seq_effect_speed_rebuild_map(Scene *scene, Sequence *seq)
 {
-  if ((seq->seq1 == NULL) || (seq->len < 1)) {
+  const int effect_strip_length = SEQ_time_right_handle_frame_get(scene, seq) -
+  SEQ_time_left_handle_frame_get(scene, seq);
+
+  if ((seq->seq1 == NULL) || (effect_strip_length < 1)) {
 return; /* Make coverity happy and check for (CID 598) input strip... */
   }
 
@@ -2614,15 +2617,13 @@ void seq_effect_speed_rebuild_map(Scene *scene, 
Sequence *seq)
 MEM_freeN(v->frameMap);
   }
 
-  const int effect_strip_length = SEQ_time_right_handle_frame_get(scene, seq) -
-  SEQ_time_left_handle_frame_get(scene, seq);
   v->frameMap = MEM_mallocN(sizeof(float) * effect_strip_length, __func__);
   v->frameMap[0] = 0.0f;
 
   float target_frame = 0;
   for (int frame_index = 1; frame_index < effect_strip_length; frame_index++) {
 target_frame += evaluate_fcurve(fcu, SEQ_time_left_handle_frame_get(scene, 
seq) + frame_index);
-CLAMP(target_frame, 0, seq->seq1->len);
+CLAMP(target_frame, 0, SEQ_time_strip_length_get(seq->seq1));
 v->frameMap[frame_index] = target_frame;
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [302b04a5a3f] master: VSE: Improved Retiming system

2022-06-29 Thread Richard Antalik
Commit: 302b04a5a3fc0e767ac784424f78ce2edf5d2844
Author: Richard Antalik
Date:   Wed Jun 29 12:45:59 2022 +0200
Branches: master
https://developer.blender.org/rB302b04a5a3fc0e767ac784424f78ce2edf5d2844

VSE: Improved Retiming system

Patch implements better way to control playback speed than it is
possible to do with speed effect. Speed factor property can be set in
Time panel.

There are 2 layers of control:

Option to retime movie to match scene FPS rate.
Custom speed factor to control playback rate.
Since playback rate is strip property, it is now possible to manipulate
strip as normal one even if it is retimed.

To facilitate manipulation, some functions need to consider speed factor
and apply necessary corrections to strip offset or strip start. These
corrections may need to be float numbers, so start and offsets must be
float as well.

Sound strips now use speed factor instead of pitch. This means, that
strips will change length to match usable length. In addition, it is
possible to group movie and sound strip and change speed of meta strip.

===

M   release/scripts/startup/bl_ui/space_sequencer.py
M   source/blender/blenkernel/BKE_blender_version.h
M   source/blender/blenkernel/intern/sound.c
M   source/blender/blenloader/intern/versioning_290.c
M   source/blender/blenloader/intern/versioning_300.c
M   source/blender/editors/animation/anim_ops.c
M   source/blender/editors/space_sequencer/sequencer_add.c
M   source/blender/editors/space_sequencer/sequencer_channels_draw.c
M   source/blender/editors/space_sequencer/sequencer_drag_drop.c
M   source/blender/editors/space_sequencer/sequencer_draw.c
M   source/blender/editors/space_sequencer/sequencer_edit.c
M   source/blender/editors/space_sequencer/sequencer_intern.h
M   source/blender/editors/space_sequencer/sequencer_select.c
M   source/blender/editors/space_sequencer/sequencer_thumbnails.c
M   source/blender/editors/space_sequencer/sequencer_view.c
M   source/blender/editors/space_sequencer/space_sequencer.c
M   source/blender/editors/transform/transform_convert_sequencer.c
M   source/blender/editors/transform/transform_convert_sequencer_image.c
M   source/blender/editors/transform/transform_gizmo_2d.c
M   source/blender/editors/transform/transform_snap_sequencer.c
M   source/blender/makesdna/DNA_sequence_types.h
M   source/blender/makesrna/intern/rna_sequencer.c
M   source/blender/makesrna/intern/rna_sequencer_api.c
M   source/blender/sequencer/SEQ_add.h
M   source/blender/sequencer/SEQ_edit.h
M   source/blender/sequencer/SEQ_effects.h
M   source/blender/sequencer/SEQ_iterator.h
M   source/blender/sequencer/SEQ_render.h
M   source/blender/sequencer/SEQ_sound.h
M   source/blender/sequencer/SEQ_time.h
M   source/blender/sequencer/SEQ_transform.h
M   source/blender/sequencer/intern/disk_cache.c
M   source/blender/sequencer/intern/effects.c
M   source/blender/sequencer/intern/image_cache.c
M   source/blender/sequencer/intern/iterator.c
M   source/blender/sequencer/intern/prefetch.c
M   source/blender/sequencer/intern/proxy.c
M   source/blender/sequencer/intern/render.c
M   source/blender/sequencer/intern/render.h
M   source/blender/sequencer/intern/sequencer.c
M   source/blender/sequencer/intern/sound.c
M   source/blender/sequencer/intern/strip_add.c
M   source/blender/sequencer/intern/strip_edit.c
M   source/blender/sequencer/intern/strip_relations.c
M   source/blender/sequencer/intern/strip_time.c
M   source/blender/sequencer/intern/strip_time.h
M   source/blender/sequencer/intern/strip_transform.c
M   source/blender/sequencer/intern/utils.c

===

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py 
b/release/scripts/startup/bl_ui/space_sequencer.py
index 2db30ac1450..060c00c0443 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1870,6 +1870,12 @@ class SEQUENCER_PT_time(SequencerButtonsPanel, Panel):
 split.label(text="Channel")
 split.prop(strip, "channel", text="")
 
+if not is_effect:
+split = layout.split(factor=0.5 + max_factor)
+split.alignment = 'RIGHT'
+split.label(text="Speed Factor")
+split.prop(strip, "speed_factor", text="")
+
 sub = layout.column(align=True)
 split = sub.split(factor=0.5 + max_factor, align=True)
 split.alignment = 'RIGHT'
@@ -1982,11 +1988,6 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, 
Panel):
 split.label(text="Volume")
 split.prop(strip, "volume", text="")
 
-   

[Bf-blender-cvs] [a545ef2912b] cycles_oneapi: Fix frame_final_start/end strip property not setting handle position

2022-06-29 Thread Richard Antalik
Commit: a545ef2912bc59636a9167432aa7bd6778efe8c4
Author: Richard Antalik
Date:   Tue Jun 28 15:51:27 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rBa545ef2912bc59636a9167432aa7bd6778efe8c4

Fix frame_final_start/end strip property not setting handle position

This was a mistake in 17a773cdcee9 - I did not notice existing set
function and assumed, that property set DNA directly.

Both get and set functions are now available and readonly flag is
removed.

===

M   source/blender/makesrna/intern/rna_sequencer.c

===

diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index 9edf17614c8..d14763d2609 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -322,6 +322,28 @@ static int rna_Sequence_frame_final_end_get(PointerRNA 
*ptr)
   return SEQ_time_right_handle_frame_get((Sequence *)ptr->data);
 }
 
+static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value)
+{
+  Sequence *seq = (Sequence *)ptr->data;
+  Scene *scene = (Scene *)ptr->owner_id;
+
+  SEQ_time_left_handle_frame_set(scene, seq, value);
+  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
+  do_sequence_frame_change_update(scene, seq);
+  SEQ_relations_invalidate_cache_composite(scene, seq);
+}
+
+static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value)
+{
+  Sequence *seq = (Sequence *)ptr->data;
+  Scene *scene = (Scene *)ptr->owner_id;
+
+  SEQ_time_right_handle_frame_set(scene, seq, value);
+  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
+  do_sequence_frame_change_update(scene, seq);
+  SEQ_relations_invalidate_cache_composite(scene, seq);
+}
+
 static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
 {
   Sequence *seq = (Sequence *)ptr->data;
@@ -1959,8 +1981,10 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_start", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "startdisp");
-  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_start_get", NULL, 
NULL);
-  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(
+  prop, "rna_Sequence_frame_final_start_get", 
"rna_Sequence_start_frame_final_set", NULL);
+  RNA_def_property_editable_func(prop, "rna_Sequence_frame_editable");
+  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop,
   "Start Frame",
@@ -1972,8 +1996,10 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_end", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "enddisp");
-  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_end_get", NULL, 
NULL);
-  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(
+  prop, "rna_Sequence_frame_final_end_get", 
"rna_Sequence_end_frame_final_set", NULL);
+  RNA_def_property_editable_func(prop, "rna_Sequence_frame_editable");
+  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop, "End Frame", "End frame displayed in the sequence editor after 
offsets are applied");
   /* overlap tests and calc_seq_disp */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2cccae2784c] cycles_oneapi: Fix T99216: RNA startdisp and enddisp return unreliable values

2022-06-29 Thread Richard Antalik
Commit: 2cccae2784c194e4ca84e840f2978b7c8464a9ea
Author: Richard Antalik
Date:   Mon Jun 27 22:22:18 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB2cccae2784c194e4ca84e840f2978b7c8464a9ea

Fix T99216: RNA startdisp and enddisp return unreliable values

Since 7afcfe111aac `startdisp` and `enddisp` fields are used as runtime
position storage for effect strips exclusively.

Use getter functon to return handle position and make properties read
only.

===

M   source/blender/makesrna/intern/rna_sequencer.c

===

diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index 9bfdcda79a7..1c7ca8656fd 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -312,6 +312,16 @@ static void rna_Sequence_frame_change_update(Main 
*UNUSED(bmain),
   do_sequence_frame_change_update(scene, (Sequence *)ptr->data);
 }
 
+static int rna_Sequence_frame_final_start_get(PointerRNA *ptr)
+{
+  return SEQ_time_left_handle_frame_get((Sequence *)ptr->data);
+}
+
+static int rna_Sequence_frame_final_end_get(PointerRNA *ptr)
+{
+  return SEQ_time_right_handle_frame_get((Sequence *)ptr->data);
+}
+
 static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
 {
   Sequence *seq = (Sequence *)ptr->data;
@@ -1971,7 +1981,8 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_start", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "startdisp");
-  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_start_get", NULL, 
NULL);
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop,
   "Start Frame",
@@ -1985,7 +1996,8 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_end", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "enddisp");
-  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_end_get", NULL, 
NULL);
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop, "End Frame", "End frame displayed in the sequence editor after 
offsets are applied");
   /* overlap tests and calc_seq_disp */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [71c7f3d0123] cycles_oneapi: FFmpeg: Add VFR media support

2022-06-29 Thread Richard Antalik
Commit: 71c7f3d0123144372991819337708ef493fb665c
Author: Richard Antalik
Date:   Mon Jun 27 16:16:21 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB71c7f3d0123144372991819337708ef493fb665c

FFmpeg: Add VFR media support

Variable frame rate (VFR) files have been difficult to work with.
This is because during sequential decoding, spacing between frames is
not always equal, but it was assumed to be equal. This can result in
movie getting out of sync with sound and difference between preview and
rendered image. A way to resolve these issues was to build and use
timecodes which is quite lengthy and resource intensive process. Such
issues are also difficult to communicate through UI because it is not
possible to predict if timecode usage would be needed.

With this patch, double buffer is used to keep previously decoded frame.
If current frame has PTS greater than what we are looking for, it is not
time to display it yet, and previous frame is displayed instead.

Each `AVFrame` has information about it's duration, so in theory double
buffering would not be needed, but in practice this information is
unreliable.

To ensure double buffer is always used, function
`ffmpeg_decode_video_frame_scan` is used for sequential decoding, even
if no scanning is expected.

This approach is similar to D6392, but this implementation does not
require seeking so it is much faster. Currently `AVFrame` is only
referenced, so no data is copied and therefore no overhead is added.

Note: There is one known issue where seeking fails even with double
buffering: Some files may seek too far in stream and miss requested
PTS. These require preseeking or greater negative subframe offset

Fixes: T86361, T72347

Reviewed By: zeddb, sergey

Differential Revision: https://developer.blender.org/D13583

===

M   source/blender/imbuf/intern/IMB_anim.h
M   source/blender/imbuf/intern/anim_movie.c

===

diff --git a/source/blender/imbuf/intern/IMB_anim.h 
b/source/blender/imbuf/intern/IMB_anim.h
index e99572adbb0..0ac1d7bfb74 100644
--- a/source/blender/imbuf/intern/IMB_anim.h
+++ b/source/blender/imbuf/intern/IMB_anim.h
@@ -109,17 +109,22 @@ struct anim {
   AVFormatContext *pFormatCtx;
   AVCodecContext *pCodecCtx;
   const AVCodec *pCodec;
-  AVFrame *pFrame;
-  int pFrameComplete;
   AVFrame *pFrameRGB;
   AVFrame *pFrameDeinterlaced;
   struct SwsContext *img_convert_ctx;
   int videoStream;
 
+  AVFrame *pFrame;
+  bool pFrame_complete;
+  AVFrame *pFrame_backup;
+  bool pFrame_backup_complete;
+
   struct ImBuf *cur_frame_final;
   int64_t cur_pts;
   int64_t cur_key_frame_pts;
   AVPacket *cur_packet;
+
+  bool seek_before_decode;
 #endif
 
   char index_dir[768];
diff --git a/source/blender/imbuf/intern/anim_movie.c 
b/source/blender/imbuf/intern/anim_movie.c
index 0052ce19aa1..12ba6a0217d 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -675,7 +675,7 @@ static int startffmpeg(struct anim *anim)
   anim->orientation = 0;
   anim->framesize = anim->x * anim->y * 4;
 
-  anim->cur_position = -1;
+  anim->cur_position = 0;
   anim->cur_frame_final = 0;
   anim->cur_pts = -1;
   anim->cur_key_frame_pts = -1;
@@ -683,7 +683,9 @@ static int startffmpeg(struct anim *anim)
   anim->cur_packet->stream_index = -1;
 
   anim->pFrame = av_frame_alloc();
-  anim->pFrameComplete = false;
+  anim->pFrame_backup = av_frame_alloc();
+  anim->pFrame_backup_complete = false;
+  anim->pFrame_complete = false;
   anim->pFrameDeinterlaced = av_frame_alloc();
   anim->pFrameRGB = av_frame_alloc();
   anim->pFrameRGB->format = AV_PIX_FMT_RGBA;
@@ -698,6 +700,7 @@ static int startffmpeg(struct anim *anim)
 av_frame_free(&anim->pFrameRGB);
 av_frame_free(&anim->pFrameDeinterlaced);
 av_frame_free(&anim->pFrame);
+av_frame_free(&anim->pFrame_backup);
 anim->pCodecCtx = NULL;
 return -1;
   }
@@ -710,6 +713,7 @@ static int startffmpeg(struct anim *anim)
 av_frame_free(&anim->pFrameRGB);
 av_frame_free(&anim->pFrameDeinterlaced);
 av_frame_free(&anim->pFrame);
+av_frame_free(&anim->pFrame_backup);
 anim->pCodecCtx = NULL;
 return -1;
   }
@@ -747,6 +751,7 @@ static int startffmpeg(struct anim *anim)
 av_frame_free(&anim->pFrameRGB);
 av_frame_free(&anim->pFrameDeinterlaced);
 av_frame_free(&anim->pFrame);
+av_frame_free(&anim->pFrame_backup);
 anim->pCodecCtx = NULL;
 return -1;
   }
@@ -781,22 +786,71 @@ static int startffmpeg(struct anim *anim)
   return 0;
 }
 
+static double ffmpeg_steps_per_frame_get(struct anim *anim)
+{
+  AVStream *v_st = anim->pFormatCtx->streams[anim->videoStream];
+  AVRational time_base = v_st->t

[Bf-blender-cvs] [d45bacd2e7e] cycles_oneapi: Fix error in previous commit - missed include

2022-06-29 Thread Richard Antalik
Commit: d45bacd2e7e90155e31d36cd9792ebd233bf33e6
Author: Richard Antalik
Date:   Mon Jun 27 22:17:59 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rBd45bacd2e7e90155e31d36cd9792ebd233bf33e6

Fix error in previous commit - missed include

===

M   source/blender/sequencer/intern/sequencer.c

===

diff --git a/source/blender/sequencer/intern/sequencer.c 
b/source/blender/sequencer/intern/sequencer.c
index c8b9e5e6654..79549a09c26 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -37,6 +37,7 @@
 #include "SEQ_select.h"
 #include "SEQ_sequencer.h"
 #include "SEQ_sound.h"
+#include "SEQ_time.h"
 #include "SEQ_utils.h"
 
 #include "BLO_read_write.h"

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6d1861e7b52] cycles_oneapi: Fix meta strip has incorrect range when created

2022-06-29 Thread Richard Antalik
Commit: 6d1861e7b52a78665465f4c9d4e55f654cd11390
Author: Richard Antalik
Date:   Mon Jun 27 22:04:27 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB6d1861e7b52a78665465f4c9d4e55f654cd11390

Fix meta strip has incorrect range when created

Caused by using `startdisp` and `enddisp` to initialize range.
Use handle position instead.

===

M   source/blender/sequencer/intern/sequencer.c

===

diff --git a/source/blender/sequencer/intern/sequencer.c 
b/source/blender/sequencer/intern/sequencer.c
index 71f4aef6916..c8b9e5e6654 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -410,7 +410,8 @@ static MetaStack *seq_meta_stack_alloc(const Scene *scene, 
Sequence *seq_meta)
   ms->oldbasep = higher_level_meta ? &higher_level_meta->seqbase : 
&ed->seqbase;
   ms->old_channels = higher_level_meta ? &higher_level_meta->channels : 
&ed->channels;
 
-  copy_v2_v2_int(ms->disp_range, &ms->parseq->startdisp);
+  ms->disp_range[0] = SEQ_time_left_handle_frame_get(ms->parseq);
+  ms->disp_range[1] = SEQ_time_right_handle_frame_get(ms->parseq);
   return ms;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b585872450b] master: Fix frame_final_start/end strip property not setting handle position

2022-06-28 Thread Richard Antalik
Commit: b585872450b429540b895aa908d779134485516b
Author: Richard Antalik
Date:   Tue Jun 28 15:51:27 2022 +0200
Branches: master
https://developer.blender.org/rBb585872450b429540b895aa908d779134485516b

Fix frame_final_start/end strip property not setting handle position

This was a mistake in 17a773cdcee9 - I did not notice existing set
function and assumed, that property set DNA directly.

Both get and set functions are now available and readonly flag is
removed.

===

M   source/blender/makesrna/intern/rna_sequencer.c

===

diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index 9edf17614c8..d14763d2609 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -322,6 +322,28 @@ static int rna_Sequence_frame_final_end_get(PointerRNA 
*ptr)
   return SEQ_time_right_handle_frame_get((Sequence *)ptr->data);
 }
 
+static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value)
+{
+  Sequence *seq = (Sequence *)ptr->data;
+  Scene *scene = (Scene *)ptr->owner_id;
+
+  SEQ_time_left_handle_frame_set(scene, seq, value);
+  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
+  do_sequence_frame_change_update(scene, seq);
+  SEQ_relations_invalidate_cache_composite(scene, seq);
+}
+
+static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value)
+{
+  Sequence *seq = (Sequence *)ptr->data;
+  Scene *scene = (Scene *)ptr->owner_id;
+
+  SEQ_time_right_handle_frame_set(scene, seq, value);
+  SEQ_transform_fix_single_image_seq_offsets(scene, seq);
+  do_sequence_frame_change_update(scene, seq);
+  SEQ_relations_invalidate_cache_composite(scene, seq);
+}
+
 static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
 {
   Sequence *seq = (Sequence *)ptr->data;
@@ -1959,8 +1981,10 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_start", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "startdisp");
-  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_start_get", NULL, 
NULL);
-  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(
+  prop, "rna_Sequence_frame_final_start_get", 
"rna_Sequence_start_frame_final_set", NULL);
+  RNA_def_property_editable_func(prop, "rna_Sequence_frame_editable");
+  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop,
   "Start Frame",
@@ -1972,8 +1996,10 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_end", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "enddisp");
-  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_end_get", NULL, 
NULL);
-  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(
+  prop, "rna_Sequence_frame_final_end_get", 
"rna_Sequence_end_frame_final_set", NULL);
+  RNA_def_property_editable_func(prop, "rna_Sequence_frame_editable");
+  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop, "End Frame", "End frame displayed in the sequence editor after 
offsets are applied");
   /* overlap tests and calc_seq_disp */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [17a773cdcee] master: Fix T99216: RNA startdisp and enddisp return unreliable values

2022-06-27 Thread Richard Antalik
Commit: 17a773cdcee9ea413d5be72a95fe1567743c269b
Author: Richard Antalik
Date:   Mon Jun 27 22:22:18 2022 +0200
Branches: master
https://developer.blender.org/rB17a773cdcee9ea413d5be72a95fe1567743c269b

Fix T99216: RNA startdisp and enddisp return unreliable values

Since 7afcfe111aac `startdisp` and `enddisp` fields are used as runtime
position storage for effect strips exclusively.

Use getter functon to return handle position and make properties read
only.

===

M   source/blender/makesrna/intern/rna_sequencer.c

===

diff --git a/source/blender/makesrna/intern/rna_sequencer.c 
b/source/blender/makesrna/intern/rna_sequencer.c
index 9bfdcda79a7..1c7ca8656fd 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -312,6 +312,16 @@ static void rna_Sequence_frame_change_update(Main 
*UNUSED(bmain),
   do_sequence_frame_change_update(scene, (Sequence *)ptr->data);
 }
 
+static int rna_Sequence_frame_final_start_get(PointerRNA *ptr)
+{
+  return SEQ_time_left_handle_frame_get((Sequence *)ptr->data);
+}
+
+static int rna_Sequence_frame_final_end_get(PointerRNA *ptr)
+{
+  return SEQ_time_right_handle_frame_get((Sequence *)ptr->data);
+}
+
 static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
 {
   Sequence *seq = (Sequence *)ptr->data;
@@ -1971,7 +1981,8 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_start", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "startdisp");
-  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_start_get", NULL, 
NULL);
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop,
   "Start Frame",
@@ -1985,7 +1996,8 @@ static void rna_def_sequence(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "frame_final_end", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "enddisp");
-  RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+  RNA_def_property_int_funcs(prop, "rna_Sequence_frame_final_end_get", NULL, 
NULL);
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
   RNA_def_property_ui_text(
   prop, "End Frame", "End frame displayed in the sequence editor after 
offsets are applied");
   /* overlap tests and calc_seq_disp */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


  1   2   3   4   5   6   7   8   9   >