Files
test/source/blender/sequencer/SEQ_utils.hh
Aras Pranckevicius 31e56797f0 VSE: indicate missing media in timeline/display
Sequencer timeline displays red tint & appropriate icons for strips that are
missing media file (images, movies, audio, or meta strips that contain such).

Sequencer preview and rendering displays missing media strips as magenta,
similar to missing textures elsewhere in Blender. This is on by default,
sequencer view settings have an option to turn it off.

Pull Request: https://projects.blender.org/blender/blender/pulls/116869
2024-04-24 19:54:44 +02:00

93 lines
2.9 KiB
C++

/* SPDX-FileCopyrightText: 2004 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/** \file
* \ingroup sequencer
*/
#include "DNA_scene_types.h"
struct bSound;
struct ListBase;
struct Mask;
struct Scene;
struct Sequence;
struct StripElem;
void SEQ_sequence_base_unique_name_recursive(Scene *scene, ListBase *seqbasep, Sequence *seq);
const char *SEQ_sequence_give_name(const Sequence *seq);
ListBase *SEQ_get_seqbase_from_sequence(Sequence *seq, ListBase **channels, int *r_offset);
const Sequence *SEQ_get_topmost_sequence(const Scene *scene, int frame);
/**
* In cases where we don't know the sequence's listbase.
*/
ListBase *SEQ_get_seqbase_by_seq(const Scene *scene, Sequence *seq);
/**
* Only use as last resort when the StripElem is available but no the Sequence.
* (needed for RNA)
*/
Sequence *SEQ_sequence_from_strip_elem(ListBase *seqbase, StripElem *se);
Sequence *SEQ_get_sequence_by_name(ListBase *seqbase, const char *name, bool recursive);
Mask *SEQ_active_mask_get(Scene *scene);
void SEQ_alpha_mode_from_file_extension(Sequence *seq);
/**
* Check if an input referenced by this strip is valid (e.g. scene for a scene strip).
* Note that this only checks data block references, for missing media referenced
* by paths use #media_presence_is_missing.
*/
bool SEQ_sequence_has_valid_data(const Sequence *seq);
void SEQ_set_scale_to_fit(const Sequence *seq,
int image_width,
int image_height,
int preview_width,
int preview_height,
eSeqImageFitMethod fit_method);
/**
* Ensure, that provided Sequence has unique name. If animation data exists for this Sequence, it
* will be duplicated and mapped onto new name
*
* \param seq: Sequence which name will be ensured to be unique
* \param scene: Scene in which name must be unique
*/
void SEQ_ensure_unique_name(Sequence *seq, Scene *scene);
namespace blender::seq {
/**
* Check whether a sequence strip has missing media.
* Results of the query for this strip will be cached into #MediaPresence cache. The cache
* will be created on demand.
*
* \param scene Scene to query.
* \param seq Sequencer strip.
* \return True if media file is missing.
*/
bool media_presence_is_missing(Scene *scene, const Sequence *seq);
/**
* Set or change the missing media cache value for a given strip.
*/
void media_presence_set_missing(Scene *scene, const Sequence *seq, bool missing);
/**
* Invalidate media presence cache for the given strip.
*/
void media_presence_invalidate_strip(Scene *scene, const Sequence *seq);
/**
* Invalidate media presence cache for the given sound.
*/
void media_presence_invalidate_sound(Scene *scene, const bSound *sound);
/**
* Free media presence cache, if it was created.
*/
void media_presence_free(Scene *scene);
} // namespace blender::seq