Blender V4.3
COM_MovieClipOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7#include "BKE_image.hh"
8#include "BKE_movieclip.h"
9
10#include "IMB_imbuf.hh"
11#include "IMB_interp.hh"
12
13namespace blender::compositor {
14
24
26{
27 if (movie_clip_) {
29 ImBuf *ibuf;
30
31 if (cache_frame_) {
33 }
34 else {
37 }
38
39 if (ibuf) {
40 movie_clip_buffer_ = ibuf;
41 if (ibuf->float_buffer.data == nullptr || ibuf->userflags & IB_RECT_INVALID) {
43 ibuf->userflags &= ~IB_RECT_INVALID;
44 }
45 }
46 }
47}
48
57
58void MovieClipBaseOperation::determine_canvas(const rcti & /*preferred_area*/, rcti &r_area)
59{
60 r_area = COM_AREA_NONE;
61 if (movie_clip_) {
62 int width, height;
64 BLI_rcti_init(&r_area, 0, width, 0, height);
65 }
66}
67
69 const rcti &area,
70 Span<MemoryBuffer *> /*inputs*/)
71{
73 output->copy_from(movie_clip_buffer_, area);
74 }
75 else {
76 output->fill(area, COM_COLOR_TRANSPARENT);
77 }
78}
79
84
89
91 const rcti &area,
92 Span<MemoryBuffer *> /*inputs*/)
93{
95 output->copy_from(movie_clip_buffer_, area, 3, COM_DATA_TYPE_VALUE_CHANNELS, 0);
96 }
97 else {
98 output->fill(area, COM_VALUE_ZERO);
99 }
100}
101
102} // namespace blender::compositor
#define MOVIECLIP_CACHE_SKIP
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr)
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
struct ImBuf * BKE_movieclip_get_ibuf(struct MovieClip *clip, const struct MovieClipUser *user)
struct ImBuf * BKE_movieclip_get_ibuf_flag(struct MovieClip *clip, const struct MovieClipUser *user, int flag, int cache_flag)
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
Definition rct.c:418
void IMB_float_from_rect(ImBuf *ibuf)
Definition divers.cc:802
@ IB_RECT_INVALID
a MemoryBuffer contains access to the data
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void add_output_socket(DataType datatype)
void IMB_freeImBuf(ImBuf *)
constexpr int COM_DATA_TYPE_VALUE_CHANNELS
Definition COM_defines.h:55
constexpr float COM_VALUE_ZERO[1]
Definition COM_defines.h:64
constexpr rcti COM_AREA_NONE
Definition COM_defines.h:89
constexpr float COM_COLOR_TRANSPARENT[4]
Definition COM_defines.h:60
ImBufFloatBuffer float_buffer