Blender  V3.3
IMB_indexer.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
9 #ifdef WIN32
10 # include <io.h>
11 #endif
12 
13 #include "IMB_anim.h"
14 #include <stdio.h>
15 #include <stdlib.h>
16 /*
17  * separate animation index files to solve the following problems:
18  *
19  * a) different time-codes within one file (like DTS/PTS, Time-code-Track,
20  * "implicit" time-codes within DV-files and HDV-files etc.)
21  * b) seeking difficulties within FFMPEG for files with timestamp holes
22  * c) broken files that miss several frames / have varying frame-rates
23  * d) use proxies accordingly
24  *
25  * ... we need index files, that provide us with
26  *
27  * the binary(!) position, where we have to seek into the file *and*
28  * the continuous frame number (ignoring the holes) starting from the
29  * beginning of the file, so that we know, which proxy frame to serve.
30  *
31  * This index has to be only built once for a file and is written into
32  * the BL_proxy directory structure for later reuse in different blender files.
33  */
34 
35 typedef struct anim_index_entry {
36  int frameno;
42 
43 struct anim_index {
44  char name[1024];
45 
48 };
49 
50 struct anim_index_builder;
51 
52 typedef struct anim_index_builder {
53  FILE *fp;
54  char name[FILE_MAX];
56 
57  void *private_data;
58 
61  unsigned char *buffer,
62  int data_size,
63  struct anim_index_entry *entry);
65 
68  int frameno,
72  uint64_t pts);
73 
75  unsigned char *buffer,
76  int data_size,
77  int frameno,
81  uint64_t pts);
82 
83 void IMB_index_builder_finish(anim_index_builder *fp, int rollback);
84 
85 struct anim_index *IMB_indexer_open(const char *name);
86 uint64_t IMB_indexer_get_seek_pos(struct anim_index *idx, int frame_index);
87 uint64_t IMB_indexer_get_seek_pos_pts(struct anim_index *idx, int frame_index);
88 uint64_t IMB_indexer_get_seek_pos_dts(struct anim_index *idx, int frame_index);
89 
90 int IMB_indexer_get_frame_index(struct anim_index *idx, int frameno);
91 uint64_t IMB_indexer_get_pts(struct anim_index *idx, int frame_index);
92 int IMB_indexer_get_duration(struct anim_index *idx);
93 
94 int IMB_indexer_can_scan(struct anim_index *idx, int old_frame_index, int new_frame_index);
95 
96 void IMB_indexer_close(struct anim_index *idx);
97 
98 void IMB_free_indices(struct anim *anim);
99 
100 struct anim *IMB_anim_open_proxy(struct anim *anim, IMB_Proxy_Size preview_size);
102 
#define FILE_MAX
IMB_Proxy_Size
Definition: IMB_imbuf.h:340
IMB_Timecode_Type
Definition: IMB_imbuf.h:316
void IMB_index_builder_proc_frame(anim_index_builder *fp, unsigned char *buffer, int data_size, int frameno, uint64_t seek_pos, uint64_t seek_pos_pts, uint64_t seek_pos_dts, uint64_t pts)
Definition: indexer.c:109
anim_index_builder * IMB_index_builder_create(const char *name)
Definition: indexer.c:61
struct anim_index_entry anim_index_entry
uint64_t IMB_indexer_get_seek_pos(struct anim_index *idx, int frame_index)
Definition: indexer.c:233
uint64_t IMB_indexer_get_seek_pos_pts(struct anim_index *idx, int frame_index)
Definition: indexer.c:246
int IMB_timecode_to_array_index(IMB_Timecode_Type tc)
Definition: indexer.c:353
struct anim_index * IMB_anim_open_index(struct anim *anim, IMB_Timecode_Type tc)
Definition: indexer.c:1564
void IMB_index_builder_finish(anim_index_builder *fp, int rollback)
Definition: indexer.c:133
void IMB_indexer_close(struct anim_index *idx)
Definition: indexer.c:328
void IMB_index_builder_add_entry(anim_index_builder *fp, int frameno, uint64_t seek_pos, uint64_t seek_pos_pts, uint64_t seek_pos_dts, uint64_t pts)
Definition: indexer.c:95
uint64_t IMB_indexer_get_seek_pos_dts(struct anim_index *idx, int frame_index)
Definition: indexer.c:257
void IMB_free_indices(struct anim *anim)
Definition: indexer.c:1505
int IMB_indexer_get_duration(struct anim_index *idx)
Definition: indexer.c:311
struct anim * IMB_anim_open_proxy(struct anim *anim, IMB_Proxy_Size preview_size)
Definition: indexer.c:1537
int IMB_indexer_can_scan(struct anim_index *idx, int old_frame_index, int new_frame_index)
Definition: indexer.c:319
uint64_t IMB_indexer_get_pts(struct anim_index *idx, int frame_index)
Definition: indexer.c:300
struct anim_index * IMB_indexer_open(const char *name)
Definition: indexer.c:152
int IMB_proxy_size_to_array_index(IMB_Proxy_Size pr_size)
Definition: indexer.c:334
int IMB_indexer_get_frame_index(struct anim_index *idx, int frameno)
Definition: indexer.c:268
struct anim_index_builder anim_index_builder
SyclQueue void void size_t num_bytes void
ccl_global float * buffer
unsigned __int64 uint64_t
Definition: stdint.h:90
void(* proc_frame)(struct anim_index_builder *idx, unsigned char *buffer, int data_size, struct anim_index_entry *entry)
Definition: IMB_indexer.h:60
char name[FILE_MAX]
Definition: IMB_indexer.h:54
void(* delete_priv_data)(struct anim_index_builder *idx)
Definition: IMB_indexer.h:59
char temp_name[FILE_MAX]
Definition: IMB_indexer.h:55
Definition: IMB_indexer.h:35
uint64_t pts
Definition: IMB_indexer.h:40
uint64_t seek_pos
Definition: IMB_indexer.h:37
uint64_t seek_pos_pts
Definition: IMB_indexer.h:38
int frameno
Definition: IMB_indexer.h:36
uint64_t seek_pos_dts
Definition: IMB_indexer.h:39
int num_entries
Definition: IMB_indexer.h:46
struct anim_index_entry * entries
Definition: IMB_indexer.h:47
char name[1024]
Definition: IMB_indexer.h:44
Definition: IMB_anim.h:71