1 // cvirtual.h
2 // LiVES
3 // (c) G. Finch 2008 - 2018 <salsaman+lives@gmail.com>
4 // released under the GNU GPL 3 or later
5 // see file ../COPYING or www.gnu.org for licensing details
6 
7 // functions for handling "virtual" clips (CLIP_TYPE_FILE)
8 
9 #ifndef HAS_LIVES_CVIRTUAL_H
10 #define HAS_LIVES_CVIRTUAL_H
11 
12 #define FRAME_INDEX_FNAME "file_index"
13 
14 boolean create_frame_index(int fileno, boolean init, frames_t start_offset, frames_t nframes);
15 boolean save_frame_index(int fileno);
16 frames_t load_frame_index(int fileno) WARN_UNUSED;
17 boolean check_clip_integrity(int fileno, const lives_clip_data_t *cdata, frames_t maxframe);
18 lives_img_type_t resolve_img_type(lives_clip_t *);
19 
20 frames_t virtual_to_images(int sfileno, frames_t sframe, frames_t eframe, boolean update_progress, LiVESPixbuf **pbr);
21 void delete_frames_from_virtual(int sfileno, frames_t start, frames_t end);
22 void insert_images_in_virtual(int sfileno, frames_t where, frames_t frames, frames_t *frame_index, frames_t start);
23 void del_frame_index(lives_clip_t *);
24 void reverse_frame_index(int sfileno);
25 
26 boolean realize_all_frames(int clipno, const char *msg, boolean enough);
27 
28 /*
29    @brief remove rendered (real) frames from region oldsframe -> oldframes, when they are virtual in current frame_index
30 */
31 void clean_images_from_virtual(lives_clip_t *, frames_t oldsframe, frames_t oldframes);
32 int *frame_index_copy(frames_t *findex, frames_t nframes, frames_t offset);
33 
34 frames_t first_virtual_frame(int fileno, frames_t start, frames_t end);
35 boolean check_if_non_virtual(int fileno, frames_t start, frames_t end);
36 
37 void restore_frame_index_back(int sfileno);
38 
39 boolean is_virtual_frame(int sfileno, frames_t frame);
40 
41 frames_t count_virtual_frames(frames_t *findex, frames_t start, frames_t end);
42 
43 void insert_blank_frames(int sfileno, frames_t nframes, frames_t after, int palette);
44 
45 boolean pull_frame_idle(livespointer data); // decode frames in an idle func
46 
47 #define get_indexed_frame(clip, frame) (IS_VALID_CLIP(clip) ? mainw->files[clip]->frame_index ? \
48 					mainw->files[clip]->frame_index[frame - 1] == -1 ? -frame : \
49 					mainw->files[clip]->frame_index[frame - 1] : \
50 					frame : 0)
51 
52 #endif
53