Draw thumbnails as strip overlay. This works for movie and image strips. To draw thumbnails, this overlay has to be enabled and strips must be tall enough. The thumbnails are loaded from source file using separate thread and stored in cache. Drawing code uses only images stored in cache, and if any is missing, background rendering job is started. If job can not render thumbnail, to prevent endless loop of creating job for missing image it sets `SEQ_FLAG_SKIP_THUMBNAILS` bit of `Sequence` flag. To prevent visual glitches during timeline panning and zooming, `View2D` flag `V2D_IS_NAVIGATING` is implemented. If bit is set, drawing code will look for set of evenly distributed thumbnails that should be guaranteed to exist and also set of previously displayed thumbnails. Due to volatile nature of cache these thumbnails can be missing anyway, in which case no new thumbnails will be drawn for particular strip. Cache capacity is limited to 5000 thumbnails and performs cleanup of non visible images when limit is reached. ref T89143 Reviewed By: ISS Differential Revision: https://developer.blender.org/D12266
109 lines
3.8 KiB
C++
109 lines
3.8 KiB
C++
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2004 Blender Foundation.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
/** \file
|
|
* \ingroup sequencer
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define SEQ_RENDER_THUMB_SIZE 256
|
|
|
|
struct ListBase;
|
|
struct Main;
|
|
struct Scene;
|
|
struct Sequence;
|
|
|
|
typedef enum eSeqTaskId {
|
|
SEQ_TASK_MAIN_RENDER,
|
|
SEQ_TASK_PREFETCH_RENDER,
|
|
} eSeqTaskId;
|
|
|
|
typedef struct SeqRenderData {
|
|
struct Main *bmain;
|
|
struct Depsgraph *depsgraph;
|
|
struct Scene *scene;
|
|
int rectx;
|
|
int recty;
|
|
int preview_render_size;
|
|
bool use_proxies;
|
|
int for_render;
|
|
int motion_blur_samples;
|
|
float motion_blur_shutter;
|
|
bool skip_cache;
|
|
bool is_proxy_render;
|
|
bool is_prefetch_render;
|
|
int view_id;
|
|
/* ID of task for assigning temp cache entries to particular task(thread, etc.) */
|
|
eSeqTaskId task_id;
|
|
|
|
/* special case for OpenGL render */
|
|
struct GPUOffScreen *gpu_offscreen;
|
|
// int gpu_samples;
|
|
// bool gpu_full_samples;
|
|
} SeqRenderData;
|
|
|
|
struct ImBuf *SEQ_render_give_ibuf(const SeqRenderData *context,
|
|
float timeline_frame,
|
|
int chanshown);
|
|
struct ImBuf *SEQ_render_give_ibuf_direct(const SeqRenderData *context,
|
|
float timeline_frame,
|
|
struct Sequence *seq);
|
|
void SEQ_render_thumbnails(const struct SeqRenderData *context,
|
|
struct Sequence *seq,
|
|
struct Sequence *seq_orig,
|
|
float start_frame,
|
|
float frame_step,
|
|
rctf *view_area,
|
|
short *stop);
|
|
struct ImBuf *SEQ_get_thumbnail(const struct SeqRenderData *context,
|
|
struct Sequence *seq,
|
|
float timeline_frame,
|
|
rcti *crop,
|
|
bool clipped);
|
|
int SEQ_render_thumbnails_guaranteed_set_frame_step_get(const struct Sequence *seq);
|
|
void SEQ_render_thumbnails_base_set(const struct SeqRenderData *context,
|
|
struct Sequence *seq,
|
|
struct Sequence *seq_orig,
|
|
rctf *view_area,
|
|
short *stop);
|
|
|
|
void SEQ_render_init_colorspace(struct Sequence *seq);
|
|
void SEQ_render_new_render_data(struct Main *bmain,
|
|
struct Depsgraph *depsgraph,
|
|
struct Scene *scene,
|
|
int rectx,
|
|
int recty,
|
|
int preview_render_size,
|
|
int for_render,
|
|
SeqRenderData *r_context);
|
|
int SEQ_render_evaluate_frame(struct ListBase *seqbase, int timeline_frame);
|
|
struct StripElem *SEQ_render_give_stripelem(struct Sequence *seq, int timeline_frame);
|
|
|
|
void SEQ_render_imbuf_from_sequencer_space(struct Scene *scene, struct ImBuf *ibuf);
|
|
void SEQ_render_pixel_from_sequencer_space_v4(struct Scene *scene, float pixel[4]);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|