191 lines
5.1 KiB
C
191 lines
5.1 KiB
C
/* SPDX-FileCopyrightText: 2011 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DNA_ID.h"
|
|
#include "DNA_color_types.h" /* for color management */
|
|
#include "DNA_tracking_types.h" /* for #MovieTracking */
|
|
|
|
struct AnimData;
|
|
struct ImBuf;
|
|
struct ImBufAnim;
|
|
struct MovieClipProxy;
|
|
struct MovieTrackingMarker;
|
|
struct MovieTrackingTrack;
|
|
struct bGPdata;
|
|
|
|
typedef struct MovieClipUser {
|
|
/** Current frame number. */
|
|
int framenr;
|
|
/** Proxy render size. */
|
|
short render_size, render_flag;
|
|
} MovieClipUser;
|
|
|
|
typedef struct MovieClipProxy {
|
|
/** 768=FILE_MAXDIR custom directory for index and proxy files (defaults to BL_proxy). */
|
|
char dir[768];
|
|
|
|
/** Time code in use. */
|
|
short tc;
|
|
/** Proxy build quality. */
|
|
short quality;
|
|
/** Size flags (see below) of all proxies to build. */
|
|
short build_size_flag;
|
|
/** Time code flags (see below) of all tc indices to build. */
|
|
short build_tc_flag;
|
|
} MovieClipProxy;
|
|
|
|
typedef struct MovieClip_RuntimeGPUTexture {
|
|
void *next, *prev;
|
|
MovieClipUser user;
|
|
/** Not written in file 3 = TEXTARGET_COUNT. */
|
|
struct GPUTexture *gputexture[3];
|
|
} MovieClip_RuntimeGPUTexture;
|
|
|
|
typedef struct MovieClip_Runtime {
|
|
struct ListBase gputextures;
|
|
} MovieClip_Runtime;
|
|
|
|
typedef struct MovieClip {
|
|
ID id;
|
|
/** Animation data (must be immediately after id for utilities to use it). */
|
|
struct AnimData *adt;
|
|
/**
|
|
* Engines draw data, must be immediately after AnimData. See IdDdtTemplate and
|
|
* DRW_drawdatalist_from_id to understand this requirement.
|
|
*/
|
|
DrawDataList drawdata;
|
|
|
|
/** File path, 1024 = FILE_MAX. */
|
|
char filepath[1024];
|
|
|
|
/** Sequence or movie. */
|
|
int source;
|
|
int _pad;
|
|
/** Size of last accessed frame. */
|
|
int lastsize[2];
|
|
|
|
/** Display aspect. */
|
|
float aspx, aspy;
|
|
|
|
/** Movie source data. */
|
|
struct ImBufAnim *anim;
|
|
/** Cache for different stuff, not in file. */
|
|
struct MovieClipCache *cache;
|
|
/** Grease pencil data. */
|
|
struct bGPdata *gpd;
|
|
|
|
/** Data for SfM tracking. */
|
|
struct MovieTracking tracking;
|
|
/**
|
|
* Context of tracking job used to synchronize data
|
|
* like frame-number in SpaceClip clip user.
|
|
*/
|
|
void *tracking_context;
|
|
|
|
/** Proxy to clip data. */
|
|
struct MovieClipProxy proxy;
|
|
int flag;
|
|
|
|
/** Length of movie. */
|
|
int len;
|
|
|
|
/**
|
|
* Scene frame number footage starts playing at affects all data
|
|
* which is associated with a clip such as motion tracking,
|
|
* camera Reconstruction and so.
|
|
*/
|
|
int start_frame;
|
|
/**
|
|
* Offset which is adding to a file number when reading frame from a file.
|
|
* affects only a way how scene frame is mapping to a file name and not
|
|
* touches other data associated with a clip. */
|
|
int frame_offset;
|
|
|
|
/* color management */
|
|
ColorManagedColorspaceSettings colorspace_settings;
|
|
|
|
struct MovieClip_Runtime runtime;
|
|
} MovieClip;
|
|
|
|
typedef struct MovieClipScopes {
|
|
/** 1 means scopes are ok and recalculation is unneeded. */
|
|
short ok;
|
|
/** Whether track's mask should be applied on preview. */
|
|
short use_track_mask;
|
|
/** Height of track preview widget. */
|
|
int track_preview_height;
|
|
/** Width and height of frame for which scopes are calculated. */
|
|
int frame_width, frame_height;
|
|
/** Undistorted position of marker used for pattern sampling. */
|
|
struct MovieTrackingMarker undist_marker;
|
|
/** Search area of a track. */
|
|
struct ImBuf *track_search;
|
|
/** #ImBuf displayed in track preview. */
|
|
struct ImBuf *track_preview;
|
|
/** Sub-pixel position of marker in track ImBuf. */
|
|
float track_pos[2];
|
|
/** Active track is disabled, special notifier should be drawn. */
|
|
short track_disabled;
|
|
/** Active track is locked, no transformation should be allowed. */
|
|
short track_locked;
|
|
/** Frame number scopes are created for (measured in scene frames). */
|
|
int scene_framenr;
|
|
/** Track scopes are created for. */
|
|
struct MovieTrackingTrack *track;
|
|
/** Marker scopes are created for. */
|
|
struct MovieTrackingMarker *marker;
|
|
/** Scale used for sliding from preview area. */
|
|
float slide_scale[2];
|
|
} MovieClipScopes;
|
|
|
|
/** #MovieClipProxy.build_size_flag */
|
|
enum {
|
|
MCLIP_PROXY_SIZE_25 = (1 << 0),
|
|
MCLIP_PROXY_SIZE_50 = (1 << 1),
|
|
MCLIP_PROXY_SIZE_75 = (1 << 2),
|
|
MCLIP_PROXY_SIZE_100 = (1 << 3),
|
|
MCLIP_PROXY_UNDISTORTED_SIZE_25 = (1 << 4),
|
|
MCLIP_PROXY_UNDISTORTED_SIZE_50 = (1 << 5),
|
|
MCLIP_PROXY_UNDISTORTED_SIZE_75 = (1 << 6),
|
|
MCLIP_PROXY_UNDISTORTED_SIZE_100 = (1 << 7),
|
|
};
|
|
|
|
/** #MovieClip.source */
|
|
enum {
|
|
MCLIP_SRC_SEQUENCE = 1,
|
|
MCLIP_SRC_MOVIE = 2,
|
|
};
|
|
|
|
/** #MovieClip.flag */
|
|
enum {
|
|
MCLIP_USE_PROXY = (1 << 0),
|
|
MCLIP_USE_PROXY_CUSTOM_DIR = (1 << 1),
|
|
/* MCLIP_CUSTOM_START_FRAME = (1 << 2), */ /* UNUSED */
|
|
MCLIP_DATA_EXPAND = (1 << 3),
|
|
|
|
MCLIP_TIMECODE_FLAGS = (MCLIP_USE_PROXY | MCLIP_USE_PROXY_CUSTOM_DIR),
|
|
};
|
|
|
|
/** #MovieClip.render_size */
|
|
enum {
|
|
MCLIP_PROXY_RENDER_SIZE_FULL = 0,
|
|
MCLIP_PROXY_RENDER_SIZE_25 = 1,
|
|
MCLIP_PROXY_RENDER_SIZE_50 = 2,
|
|
MCLIP_PROXY_RENDER_SIZE_75 = 3,
|
|
MCLIP_PROXY_RENDER_SIZE_100 = 4,
|
|
};
|
|
|
|
/** #MovieClip.render_flag */
|
|
enum {
|
|
MCLIP_PROXY_RENDER_UNDISTORT = 1,
|
|
/** Use original, if proxy is not found. */
|
|
MCLIP_PROXY_RENDER_USE_FALLBACK_RENDER = 2,
|
|
};
|