Blender V4.3
IMB_indexer.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#ifdef WIN32
12# include <io.h>
13#endif
14
15#include "IMB_anim.hh"
16#include <stdio.h>
17#include <stdlib.h>
18/*
19 * separate animation index files to solve the following problems:
20 *
21 * a) different time-codes within one file (like DTS/PTS, Time-code-Track,
22 * "implicit" time-codes within DV-files and HDV-files etc.)
23 * b) seeking difficulties within FFMPEG for files with timestamp holes
24 * c) broken files that miss several frames / have varying frame-rates
25 * d) use proxies accordingly
26 *
27 * ... we need index files, that provide us with
28 *
29 * the binary(!) position, where we have to seek into the file *and*
30 * the continuous frame number (ignoring the holes) starting from the
31 * beginning of the file, so that we know, which proxy frame to serve.
32 *
33 * This index has to be only built once for a file and is written into
34 * the BL_proxy directory structure for later reuse in different blender files.
35 */
36
44
51
53
55 FILE *fp;
58
60
63 unsigned char *buffer,
64 int data_size,
65 anim_index_entry *entry);
66};
67
68anim_index_builder *IMB_index_builder_create(const char *filepath);
70 int frameno,
71 uint64_t seek_pos,
72 uint64_t seek_pos_pts,
73 uint64_t seek_pos_dts,
74 uint64_t pts);
75
77 unsigned char *buffer,
78 int data_size,
79 int frameno,
80 uint64_t seek_pos,
81 uint64_t seek_pos_pts,
82 uint64_t seek_pos_dts,
83 uint64_t pts);
84
85void IMB_index_builder_finish(anim_index_builder *fp, int rollback);
86
87ImBufAnimIndex *IMB_indexer_open(const char *name);
91
92int IMB_indexer_get_frame_index(ImBufAnimIndex *idx, int frameno);
93uint64_t IMB_indexer_get_pts(ImBufAnimIndex *idx, int frame_index);
95
96int IMB_indexer_can_scan(ImBufAnimIndex *idx, int old_frame_index, int new_frame_index);
97
99
100void IMB_free_indices(ImBufAnim *anim);
101
104
#define FILE_MAX
IMB_Proxy_Size
IMB_Timecode_Type
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.cc:105
uint64_t IMB_indexer_get_seek_pos(ImBufAnimIndex *idx, int frame_index)
Definition indexer.cc:229
void IMB_indexer_close(ImBufAnimIndex *idx)
Definition indexer.cc:324
anim_index_builder * IMB_index_builder_create(const char *filepath)
Definition indexer.cc:57
int IMB_indexer_get_frame_index(ImBufAnimIndex *idx, int frameno)
Definition indexer.cc:264
int IMB_indexer_get_duration(ImBufAnimIndex *idx)
Definition indexer.cc:307
ImBufAnimIndex * IMB_anim_open_index(ImBufAnim *anim, IMB_Timecode_Type tc)
Definition indexer.cc:1373
int IMB_timecode_to_array_index(IMB_Timecode_Type tc)
Definition indexer.cc:349
uint64_t IMB_indexer_get_seek_pos_pts(ImBufAnimIndex *idx, int frame_index)
Definition indexer.cc:242
ImBufAnim * IMB_anim_open_proxy(ImBufAnim *anim, IMB_Proxy_Size preview_size)
Definition indexer.cc:1346
uint64_t IMB_indexer_get_seek_pos_dts(ImBufAnimIndex *idx, int frame_index)
Definition indexer.cc:253
uint64_t IMB_indexer_get_pts(ImBufAnimIndex *idx, int frame_index)
Definition indexer.cc:296
void IMB_index_builder_finish(anim_index_builder *fp, int rollback)
Definition indexer.cc:129
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.cc:91
ImBufAnimIndex * IMB_indexer_open(const char *name)
Definition indexer.cc:148
int IMB_indexer_can_scan(ImBufAnimIndex *idx, int old_frame_index, int new_frame_index)
Definition indexer.cc:315
int IMB_proxy_size_to_array_index(IMB_Proxy_Size pr_size)
Definition indexer.cc:330
void IMB_free_indices(ImBufAnim *anim)
Definition indexer.cc:1312
unsigned __int64 uint64_t
Definition stdint.h:90
char filepath[1024]
anim_index_entry * entries
void(* proc_frame)(anim_index_builder *idx, unsigned char *buffer, int data_size, anim_index_entry *entry)
char filepath_temp[FILE_MAX]
char filepath[FILE_MAX]
void(* delete_priv_data)(anim_index_builder *idx)
uint64_t pts
uint64_t seek_pos
uint64_t seek_pos_pts
int frameno
uint64_t seek_pos_dts