Commit Graph

995 Commits

Author SHA1 Message Date
Aras Pranckevicius
77eec34973 Cleanup: BLF FontFlags enum type safety, move enums to separate header
- BLF font flags were an untyped enum; change to actual enum and
  update usages from int to that.
- Move all BLF API enums to their own header, so that if something
  needs just the enums they don't have to include whole BLF_api.hh

Pull Request: https://projects.blender.org/blender/blender/pulls/143692
2025-07-31 18:47:19 +02:00
Damien Picard
f6771d8e21 UI: Improve running jobs labels
Use the form "Processing something..." (gerund, sentence case,
ellipsis) for running jobs progress label, according to Blender's
Human Interface Guidelines.

Pull Request: https://projects.blender.org/blender/blender/pulls/141573
2025-07-31 16:32:41 +02:00
Aras Pranckevicius
f942767b14 Fix: VSE gaussian blur size was incorrect in proxies / render scale
Gaussian blur effect size is expressed in pixels (not ideal, but that is
what it is). It was not taking render output scale or preview proxy
size into account, resulting in much larger blur at lower render scales.

Pull Request: https://projects.blender.org/blender/blender/pulls/143627
2025-07-30 20:53:43 +02:00
Aras Pranckevicius
23242002c4 Cleanup: add get_render_scale_factor helper to use across VSE, proxy size type safety
- Some functions that took integer arguments for proxy size enums; make
  them take said enums directly.
- Add get_render_scale_factor() that calculates effective render scale,
  use that in places that did manual "use either scene render scale setting
  or proxy size" calculation in 5 places.
- Replace previous double with float in proxy size scale factors; all
  the factors are exactly representable as floats, and all the calling
  places used them as floats too.
2025-07-30 20:53:42 +02:00
Aras Pranckevicius
cf27df45f8 Cleanup: Add enum types around various VSE DNA enums
- In various VSE related DNA structs, indicate which enums they use
  as comments,
- Add enum types for the enums that were untyped,
- Move Wipe effect enums to DNA header for clarity, since they are
  serialized values,
- Reduce SeqRetimingKey size from 40 bytes to 32 bytes; there
  was too much unnecessary padding.
- Rename some enums SEQUENCE_ -> STRIP_ where relevant.
- Rename wipe enums DO_MEOW_WIPE -> SEQ_WIPE_MEOW

Pull Request: https://projects.blender.org/blender/blender/pulls/143565
2025-07-30 11:00:19 +02:00
Campbell Barton
f281f5a500 Cleanup: header grouping
Group includes, this is mostly being done already but had become mixed
up in some areas.
2025-07-30 14:22:06 +10:00
Campbell Barton
e93e9db6b7 Cleanup: UTF8 string functions for color-space & imbuf strings
Use UTF8 aware functions unless raw bytes are expected.
2025-07-27 04:34:04 +00:00
Campbell Barton
649b89781e Cleanup: ensure UTF8 string copy for DNA & screen data
Use `BLI_strncpy_utf8` & `BLI_snprintf_utf8` for fixed size buffers in
DNA and screen data structures such as panels, menus & operators.

This could be considered a fix as copying a UTF8 string into a smaller
buffer without proper truncation can create an invalid UTF8 sequence.
However identifying which of these users are likely to run into would
be time consuming and not especially useful.
2025-07-26 12:33:15 +00:00
Aras Pranckevicius
025019e74d Fix #142853: adding a VSE effect displays stale frame
VSE final image cache invalidation for the newly added effect
strip was invoked before the strip time range values were set,
effectively not invalidating anything.

Pull Request: https://projects.blender.org/blender/blender/pulls/142854
2025-07-23 15:08:50 +02:00
Campbell Barton
5c7bc1f9c0 Cleanup: use size-comments checked by "make check_size_comments" 2025-07-23 09:59:26 +10:00
Aras Pranckevicius
828bd5336b Cleanup: remove unused variables from VSE Editing struct
act_imagedir and act_sounddir were added in 2009 (999d9d146e)
but seemingly never ever used for anything. So remove that; makes
Editing struct go from 3248 bytes down to 1200 bytes as well.

Pull Request: https://projects.blender.org/blender/blender/pulls/142846
2025-07-22 20:15:30 +02:00
John Kiril Swenson
ec4323f95b Cleanup: VSE: Move strip flags to StripRuntime
Quite a few flags in `Strip.flag` were used only at runtime; they were
temporarily set and then cleared thereafter. Move them to
`StripRuntime.flag` instead.

Most of the moves are trivial renames, with some old versioning code for
`SEQ_FLAG_DELETE` deleted. That code fixed a very uncommon edge-case bug
in 2.x which doesn't seem worthwhile to keep deprecated code around for.

Pull Request: https://projects.blender.org/blender/blender/pulls/142776
2025-07-22 19:42:07 +02:00
Aras Pranckevicius
9c3509bacc VSE: Better default values for newly added Gaussian Blur effect
Previously, newly added Gaussian Blur effect did not blurring at all,
since blur sizes were set to zero. Make them default to 9 pixel size
blur, which is similar to the amount of blur the Glow effect does by
default.

Pull Request: https://projects.blender.org/blender/blender/pulls/142851
2025-07-22 18:53:16 +02:00
Richard Antalik
40b2cd92ee Fix #142195: Crash when adding stereo 3D image
Caused by assigning pointer to address which is eventually freed.

Use `MEM_mallocN()` with copy assignment instead.

Pull Request: https://projects.blender.org/blender/blender/pulls/142361
2025-07-21 14:05:31 +02:00
Richard Antalik
10b2670616 Fix #141709: VSE doesn't show scene strip subframes
Caused by source cache using integer for frame index, which is used as
cache key. Use float for scene strips instead.

Co-authored-by: Aras Pranckevicius <aras@nesnausk.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/142380
2025-07-21 12:45:12 +02:00
Campbell Barton
e5947bdf63 Cleanup: spelling (make check_spelling_*)
Also exclude some files that have too many false positives.
2025-07-20 14:59:19 +10:00
Hans Goudey
8cc29b9cd4 Fix: Build error in lite build
Caused by 0396316fa4
2025-07-18 12:04:58 -04:00
Richard Antalik
a002fa5efa Cleanup: Format 2025-07-18 17:07:45 +02:00
Richard Antalik
0396316fa4 Fix #141084: Sound glitches in render with equalizer
Ultimately, the issue was caused by updating sound sequence handle in
`AUD_SequenceEntry_setSound` on each new frame regardless if the
modifier data has changed.

This commit fixes the issue by implementing a means for modifiers to
check, if their parameters or inputs are changed.
This is done by storing these parameters in `StripModifierDataRuntime`
struct, that is shared between all modifier types. This is not ideal,
but it significantly simplifies dependency graph runtime store/restore
code.
Function `strip_update_sound_modifiers` passes boolean `needs_update`
to strip stack update functions. If any needs to be updated, it sets
value of `needs_update` to true allowing following update functions to
skip parameter checking to speed up the process.

Original code updated sound sequence handle twice. Once by function
`BKE_sound_update_scene_sound` then by `strip_update_sound_modifiers`.
If sound modifier is used, only `strip_update_sound_modifiers` needs to
be called, so there is condition to decide which one of these functions
is called.

Also fixes #139605

Pull Request: https://projects.blender.org/blender/blender/pulls/141595
2025-07-18 16:34:09 +02:00
Falk David
99f3beb63f Refactor: VSE: Use new scene context function
This PR switches out the internal scene context function
used from the sequencer. This is done in preparation for
#140271.

Using a separate context function allows us to keep the
existing `context.scene` to refer to the active scene
and use a separate context member to refer to the
sequencer scene in the workspace (which is added in #140271).

Previous attempts simply overrode the `context.scene`
to refer to a different scene than the active one in the window.
This has two issues:
1) Any operator that wants to use the active scene in the window
  can't do it in the context of the sequencer. This is a problem for
  example for poll functions of operators that don't have anything to
  do with the sequencer.
2) For better or for worse, Blender expects the `context.scene` to
  always exist. For the sequencer, we'd like to possibly have no
  sequence selected.

Using a different context member for the sequencer has some
advantages:
1) Although we have to change quite a few places, it's limited to the
  sequencer. We don't have to change other parts of Blender to make
  things work.
2) It allows us to prepare for the future when we might want to
 separate the VSE from the scene. This is a step in that direction.
 Having a different context function makes it easy to find the places
 that would need to be refactored.

Pull Request: https://projects.blender.org/blender/blender/pulls/141271
2025-07-18 16:17:47 +02:00
Campbell Barton
fc07a4d45e Cleanup: quiet ignored qualifier & unused warnings 2025-07-17 12:30:39 +10:00
John Kiril Swenson
d910fb88b0 VSE: Clamp strip handles to video/audio bounds
This initial commit properly clamps handles for video/audio strips, and
provides functionality to enable/disable the behavior for all strip types
(addresses #90280).

Toggling handle clamping is done with "C",
just like with the redesigned slip operator (#137072).

If a strip is not already clamped when you start moving its handles,
then clamping behavior is disabled starting out. This means no abrupt
clamp until you explicitly ask for it.

Transform logic was altered, fixing a few bugs:
- When initializing a transform, `createTransSeqData` would already
  create some clamping data for channels. This patch replaces it with
  `offset_clamp` (for unconditional clamping which cannot be disabled)
  and `handle_xmin/xmax` (for hold offset clamping, which is optional).
    - Collecting this data ahead of time is necessary for the double
      handle tweak case -- `flushTransSeq` only works one strip at a
      time, so we can't clamp post-hoc.
- In `applySeqSlideValue`, we apply `transform_convert_sequencer_clamp`
  before values are printed to the header, but let the unclamped values
  get flushed to the strips themselves. This is so that we can have the
  data later at the individual strip level to recalculate clamps.
  Otherwise, if transform values are clamped preemptively, then we have
  no idea whether strips are clamped vs. merely resting at their
  boundaries.

Note that currently, handle clamping is drawn identically to overlaps.

More information in PR.

Pull Request: https://projects.blender.org/blender/blender/pulls/134319
2025-07-16 06:16:19 +02:00
John Kiril Swenson
1cb30b9d1e Fix: VSE: Metastack channel preview with negative values
As mentioned in comments on #43646, a negative channel value in preview
view settings can be used to climb the metastack. But the functionality
did not work as expected in most cases.

This combines a one-line fix by Sergey with an updated description for the
property which documents the feature.

In the future we may want to change its operation to be less obscure,
since it has some use-cases in aligning strips within a metastrip with
those outside of it.
2025-07-16 06:12:09 +02:00
Sergey Sharybin
d156a047fd Merge branch 'blender-v4.5-release' 2025-07-14 11:09:04 +02:00
Sergey Sharybin
08ec4602a2 Fix #141768: VSE: Tabbing in/out of metastrips does not update strip cache
Regression caused by 9e4c26574a.

Add strip stack as a key to the final cache.

Use the pointer to the list of sequences, as it is the easiest one to
obtain in all places where it is needed. This is slightly different
from the code prior to the 9e4c26574a where strips.last() was used,
but it allows to use the same logic in the prefetch job.

Pull Request: https://projects.blender.org/blender/blender/pulls/141778
2025-07-14 11:08:39 +02:00
Campbell Barton
ec8751f826 Cleanup: white-space around C-style comment blocks
Also use C++ style comments for disabling code.
2025-07-13 21:58:53 +10:00
Sergey Sharybin
93be12fde0 ImBuf: Linearize float buffers from FFmpeg
Blender expects float buffers to be in scene linear space, which was
violated bu the 1012bit movie reading code. While such image buffers
can be displayed correctly, performing operations in various areas
of Blender might lead to unexpected results.

The non-linear colorspace for ImBuf is expected to be "internal-only"
to a specific area, like VSE.

This is only done for Image and MovieClip data-blocks, sequencer still
reads movie files in their original colorspace as it helps performance and
sequencer can not be referenced from places where linear colorspace
for float buffer is really important.

Pull Request: https://projects.blender.org/blender/blender/pulls/141603
2025-07-10 17:39:00 +02:00
Sergey Sharybin
3f6861f8f3 Merge branch 'blender-v4.5-release' 2025-07-10 11:37:27 +02:00
Sergey Sharybin
413d8e5406 Fix #141651: VSE: The Channel setting does not work independently in multiple areas
Make display channel part of the key for the final cache.

The prefetch uses display channel of 0, which is the default. It might
need to be adjusted, but it is unclear whether it was behaving different
prior to the 9e4c26574a.

Pull Request: https://projects.blender.org/blender/blender/pulls/141670
2025-07-10 11:35:39 +02:00
Bastien Montagne
a345b83f1a Merge branch 'blender-v4.5-release' 2025-07-07 15:53:53 +02:00
Damien Picard
771af1a0ad I18n: Translate "Equalizer" strip modifier name
New sequence strip modifiers get a name that is to be translated if
translation of data is enabled. This used the default translation
context, but "Sequence" must be used because this is the context used
to extract the modifier names (`modifiersTypes` array in modifier.cc).

Reported by Ye Gui in #43295.
2025-07-07 12:02:25 +02:00
Aras Pranckevicius
9809385ffa Merge remote-tracking branch 'origin/blender-v4.5-release' 2025-07-02 11:01:45 +03:00
Aras Pranckevicius
21870da9e2 Fix #141282: VSE cache issues when rendering at reduced resolution scale
If render settings resolution scale had lowered resolution, cached
images from render image/animation session could "stay around"
and be incorrectly used in the VSE preview area. Two cases I found are
fixed here:
- Intra-frame cache was not flushed upon actual final resolution
  change,
- "Source images" for effect/scene strips were not removed when
  requested resolution no longer matches their rendered resolution.

Pull Request: https://projects.blender.org/blender/blender/pulls/141297
2025-07-02 09:58:11 +02:00
Aras Pranckevicius
293cdac6ab Merge branch 'blender-v4.5-release' 2025-07-01 11:53:30 +03:00
Aras Pranckevicius
5cbb1c62c4 Fix #139552: VSE strips wrongly occlude others, when render resolution scale is small
get_strip_screen_quad function was not taking render scale into account,
unlike all other places that did a similar calculation.

Pull Request: https://projects.blender.org/blender/blender/pulls/141229
2025-07-01 10:49:10 +02:00
Bastien Montagne
3bb53a27bb Merge branch 'blender-v4.5-release' 2025-06-30 11:21:59 +02:00
Damien Picard
33f31f1842 I18n: Translate a few messages
I18n: Translate a few messages

- Translate add-on types in the user preferences.
- Translate a report which uses formatting.
- Do not translate scene names in `sequencer.scene_strip_add` operator
  UI.
- Do translate the type of new scene in
  `sequencer.scene_strip_add_new` operator.
- Translate Half and Float image format color depth enum items.
- Translate Mix node header with non-color data types.
- Translate sequencer modifiers' names if data translation is enabled.

Most issues reported by Ye Gui in #43295.

Pull Request: https://projects.blender.org/blender/blender/pulls/141145
2025-06-30 11:12:48 +02:00
Bastien Montagne
7276b2009a Core: Add new 'system IDprops' storage for runtime-generated RNA properties.
This commit cleanly splits IDProperties storage for its two very different
usages:
* "User-defined" data, also known as "custom properties". Mostly exposed
  in UI and as 'dictionary' in Python scripting, these are unique to each data
  (each object can have its own set of custom properties).
* "System-defined" data, mainly as backend-storage for runtime RNA
  structures and properties. While these are not necessarily present in the
  storage, they are registered for a data type, and therefore always available
  to all data of that type through RNA access.

See #123232 for rationales, designs and alternative investigated solutions.

## User-facing Changes

When using Blender, the only noticeable change is that python-defined RNA
data are not listed anymore in the Custom Properties panels (e.g. Cycles
data).

From a Python API perspective, the main changes are:
* Runtime RNA structs defined by sub-classing `PropertyGroup` and
  registering them are no more accessible through the 'dict' syntax.
  * They remain accessible through a dedicated 'bl_system_properties_get()`
    callback, but its usages are only expected to be for testing and
    debugging.
  * The result of this call will be `None` by default when there has been
    nothing written into it yet, unless its optional `do_create` parameter
    is set to `True`.
* Some types (like `Node`, `UIList`, etc.) cannot store raw IDProperties
  anymore (using the 'dict' syntax).

## Technical Details

* Adds System idprops to some data types (IDs, ViewLayer...).
* Moves some other containers (e.g operator properties, or some UI types like
  UILists) to only have system-defined properties.
* For a few specific types (like `PropertyGroup`), the same storage is used,
  but exposed in RNA as both user and system properties.
* Adds RNA API accessor callback to system idprops.
* Adds a function `bl_system_properties_get()`, which wraps system-defined
  idprops and gives 'dict-like' access to them. Currently mainly used by some
  unittests.
* System IDProps are always ignored by RNA diffing code (and therefore
  liboverride processing), as their value is already exposed through RNA
  properties, and should always be processed through these RNA properties.
* Modifies bpy rna binding to use these new system idprops for property
  accesses, and keeps using user-defined idprops for 'dict-type' accesses.
* Handles versioning by copying 'user idprops' (existing ones) into new
  'system idprops'.

### IDProperties Split

These types keep their historic IDProperty storage for user properties,
and get a new `system_id_properties` storage for system properties:

`ID`, `ViewLayers`, `Bone`, `EditBone`, `BoneCollection`, `PoseBone`, `Strip`

These types can both be extended with registrable RNA properties, and
expose Custom Properties in the UI.

### IDProperties become System Ones

These types keep a single IDProperties storage (their DNA struct does not
change), but it is now exclusively used for system-defined properties.

`OperatorProperty`, `View3DShading`, `UIList`, `AddonPreferences`,
`KeyConfigPreferences`, `GizmoProperties`, `GizmoGroupProperties`,
`Node`, `NodeSocket`, `NodeTreeInterfaceSocket`, `TimelineMarker`,
`AssetMetaData``

Since user properties were never available in the UI for them, they lose
their 'dict-like' IDProperties access in the Python API.

### Single Storage, Exposed as Both in API

These types still use a single IDProperty storage, but expose it both as
user properties and as system ones through RNA API.

* `PropertyGroup`: They need both access APIs since they are both
  used for raw IDProperty groups (the 'dict-like' access), and
  internally to access data of runtime-defined RNA structs.
* `IDPropertyWrapPtr`: Done mainly to follow `PropertyGroup`.
* `NodesModifier`: cannot become purely system idprops currently, as
  there is no other access than the 'raw ID properties' paths to their
  values. This can be changed once #132129 is finally implemented.

Pull Request: https://projects.blender.org/blender/blender/pulls/135807
2025-06-23 18:25:24 +02:00
Aras Pranckevicius
11bf3dd71e VSE: Text Strip supports text longer than 512 bytes
Text strip had a fixed size buffer of 512 bytes to hold the displayed
text (this can be much fewer actual characters with non-English
languages). Switch to dynamically allocated buffer instead, which can
hold longer text.

In order to support forward/backward compatibility, TextVars continues
to hold the 512 byte buffer in memory. When writing out the .blend file,
dynamic text buffer is copied into the fixed one. If it is longer, the
text is truncated, so opening the .blend file in an older version
will contain the first 512 bytes of the longer text. When reading
existing files without the dynamic text buffer, it is created from the
static buffer. Conceptually this approach is similar to constraints
name length increase PR !137310.

The text strip editing code was switched to operate on the dynamic
buffer, resizing it as needed. seq::CharInfo internal struct was
switched to be more independent of the actual buffer address; now
each char entry just stores an index into the buffer instead of direct
pointer (side effect: makes the struct smaller as well).

Pull Request: https://projects.blender.org/blender/blender/pulls/140733
2025-06-20 21:27:12 +02:00
Richard Antalik
2f10db2377 VSE: Draw more correct text boundbox
Text strip along with other effect strips draws into buffer, which is
defined by common render size. However this makes selection, snapping
and other features not work correctly from user perspective.

There are 2 ways to remedy this:
 - Draw text into buffer which size is defined by text boundbox
 - Just draw the correct size boundbox and make UI use it correctly

This PR implements second option, as there are multiple difficulties
asociated with first option. Main problem is, that one would need to
calculate boundboxes for all individual text effects(blur, shadow, ...),
but many of these effects need to know the size of buffer we are trying
to calculate.

Big question here was: What the boundox should look like?
For selection it is best, if it encapsulates the text itself along with its
effects like shadow, blur or box. However for snapping and pivot range
it seems, that encapsulating only the text without any effects applied is
the best solution. This was discussed with UI module and we agreed,
that encapsulating only the text would provide better usability.

The implementation:
Most of the features are on "preview side", where all dimensions are
related to scene render size. Temporary `TextVarsRuntime` is created to
calculate apparent text strip image size. This allows boundbox of
correct size to be drawn.

However to draw boundbox and do transformations correctly, it is
necessary to remap origin point to the subset of image defined by the
boundbox. Since recalculated origin is relative, this function is used
for image transformation during rendering as well.

Main drawback of this method is, that boundbox and origin point
calculation may be needed from multiple places, and `TextVarsRuntime`
may be recalculated about 10x on redraw. `text_effect_calc_runtime`
function can be executed from ~5us for single character to 0.5ms with
512 characters with default font(not sure if that matters).

Drawing origin only during transformation would help with general UI
responsiveness. During playback, these overlays are not drawn, so
there should be no change in performance.

Pull Request: https://projects.blender.org/blender/blender/pulls/140420
2025-06-20 20:06:11 +02:00
Habib Gahbiche
d88d4cc8ce Compositor: remove "Use Nodes"
Part of simplifying the compositor workflow:
https://projects.blender.org/blender/blender/issues/134214

The option "Use Nodes" is removed from the UI and marked deprecated.
It will get fully removed in 6.0.

"Use Nodes" is effectively replaced by the existing "Compositing"
option in the post-processing panel

Pull Request: https://projects.blender.org/blender/blender/pulls/138560
2025-06-18 18:39:02 +02:00
Aras Pranckevicius
05185c65dc Merge branch 'blender-v4.5-release' 2025-06-16 12:14:01 +03:00
Aras Pranckevicius
81a1993614 Fix #140427: VSE crash with scene strips and prefetch on
Other call sites were guarding against null prefetch job, one was not
2025-06-16 12:13:14 +03:00
Richard Antalik
1fbd83f72e Fix: VSE function has inverted logic
`seq_need_scale_to_render_size` returned true, when scaling was not
needed. The code that used this function worked correctly, so the logic
was inverted in both places.
2025-06-15 06:49:46 +02:00
Aras Pranckevicius
d9ef240311 Merge branch 'blender-v4.5-release' 2025-06-14 22:15:36 +03:00
Aras Pranckevicius
6251f7f0b0 Fix #140336: VSE scene strips with sequencer in them are not playing
The intra-frame cache was not notified of the current frame number
when rendering VSE through a scene strip.
2025-06-14 21:11:54 +03:00
Sebastian Parborg
a75fcd5d4a VSE: Make cache eviction a bit smarter when wrapping.
Also fix some minor cache and prefetch bugs that became more noticeable
with these changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/139635
2025-06-13 11:12:41 +02:00
Sebastian Parborg
5bd03f3618 VSE: Move the seq prefetch setting to the cache tab and turn on per default 2025-06-13 11:12:34 +02:00
Sebastian Parborg
c0c03005e5 VSE: Clear out caches when toggling them off
We wouldn't clear the cache we disabled leading to end users needing to
trigger cache refreshes to eventually clear out the cache that they
disabled.

This also fixes a minor issue where the prefetch would try to prefetch
even if there were no caches enabled.
2025-06-13 11:12:34 +02:00
Sebastian Parborg
3192186485 VSE: Fix endless prefetch loops
Sometimes we could get into scenarios where the prefetch would stop and
restart endlessly. Now we only stop the prefetch job when we don't want
to continue to prefetch anymore. Before we would exit when there is
currently no more prefetch work to do.
2025-06-13 11:12:34 +02:00