34 #define DEBUG_PRINT(x) \
36 printf("AVI DEBUG: " x); \
98 for (cur_stream = 0; cur_stream < movie->
header->
Streams; cur_stream++) {
100 if (stream_num == 0) {
120 return 10 * (fccs[0] -
'0') + (fccs[1] -
'0');
132 if (!isdigit(fccs[0]) || !isdigit(fccs[1]) || (!
ELEM(fccs[2],
'd',
'w'))) {
135 if (!
ELEM(fccs[3],
'b',
'c')) {
146 if ((
int)in_error < 0) {
157 printf(
"AVI ERROR: compressed in an unsupported format\n");
160 printf(
"AVI ERROR: could not open file\n");
163 printf(
"AVI ERROR: could not read from file\n");
166 printf(
"AVI ERROR: could not write to file\n");
169 printf(
"AVI ERROR: file is in an illegal or unrecognized format\n");
172 printf(
"AVI ERROR: error encountered while allocating memory\n");
175 printf(
"AVI ERROR: program made illegal request\n");
178 printf(
"AVI ERROR: movie did not contain expected item\n");
193 int movie_tracks = 0;
240 DEBUG_PRINT(
"Number of streams should be in range 1-65536\n");
267 if (fcca ==
FCC(
"DIB ") || fcca ==
FCC(
"RGB ") || fcca ==
FCC(
"rgb ") ||
268 fcca ==
FCC(
"RAW ") || fcca == 0) {
271 else if (fcca ==
FCC(
"mjpg") || fcca ==
FCC(
"MJPG")) {
333 if (fcca ==
FCC(
"DIB ") || fcca ==
FCC(
"RGB ") || fcca ==
FCC(
"rgb ") ||
334 fcca ==
FCC(
"RAW ") || fcca == 0) {
337 else if (fcca ==
FCC(
"mjpg") || fcca ==
FCC(
"MJPG")) {
359 DEBUG_PRINT(
"incorrect size in header or error in AVI\n");
375 return (movie_tracks != 0);
380 int temp, fcca,
size, j;
428 DEBUG_PRINT(
"Number of streams should be in range 1-65536\n");
451 if (fcca ==
FCC(
"DIB ") || fcca ==
FCC(
"RGB ") || fcca ==
FCC(
"rgb ") ||
452 fcca ==
FCC(
"RAW ") || fcca == 0) {
455 else if (fcca ==
FCC(
"mjpg") || fcca ==
FCC(
"MJPG")) {
513 if (fcca ==
FCC(
"DIB ") || fcca ==
FCC(
"RGB ") || fcca ==
FCC(
"rgb ") ||
514 fcca ==
FCC(
"RAW ") || fcca == 0) {
517 else if (fcca ==
FCC(
"mjpg") || fcca ==
FCC(
"MJPG")) {
537 DEBUG_PRINT(
"incorrect size in header or error in AVI\n");
554 if (temp ==
FCC(
"LIST")) {
565 DEBUG_PRINT(
"incorrect size in header or error in AVI\n");
598 printf(
"Index entry %04d: ChunkId:%s Flags:%d Offset:%d Size:%d\n",
625 int cur_frame = -1, i = 0, rewind = 1;
630 while (rewind && frame > -1) {
635 while (cur_frame < frame && i < movie->index_entries) {
638 if ((cur_frame == frame - 1) && (movie->
entries[i].
Size == 0)) {
650 if (cur_frame != frame) {
701 int64_t header_pos1, header_pos2;
702 int64_t stream_pos1, stream_pos2;
716 for (i = 0; i < 1 + streams * 2; i++) {
744 DEBUG_PRINT(
"Number of streams should be in range 0-65536\n");
751 va_start(ap, streams);
844 PUT_FCCN((stream_pos2 - stream_pos1 + 4L), movie->
fp);
851 if (junk_pos < 2024 - 8) {
853 chunk.
size = 2024 - 8 - (int)junk_pos;
857 for (i = 0; i < chunk.
size; i++) {
874 PUT_FCCN((header_pos2 - header_pos1 + 4L), movie->
fp);
917 va_start(ap, frame_num);
919 for (stream = 0; stream < movie->
header->
Streams; stream++) {
920 unsigned int tbuf = 0;
923 buffer = va_arg(ap,
void *);
924 size_t size = va_arg(ap,
int);
991 int temp, movi_size, i;
struct _AviBitmapInfoHeader AviBitmapInfoHeader
#define AVIF_MUSTUSEINDEX
struct _AviIndexEntry AviIndexEntry
File and directory operations.
FILE * BLI_fopen(const char *filepath, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int64_t BLI_ftell(FILE *stream) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BLI_fseek(FILE *stream, int64_t offset, int whence)
Compatibility-like things for windows.
Read Guarded memory(de)allocation.
#define MEM_recallocN(vmemh, len)
unsigned int GET_FCC(FILE *fp)
char * fcc_to_char(unsigned int fcc)
AviError AVI_close(AviMovie *movie)
AviError AVI_open_compress(char *name, AviMovie *movie, int streams,...)
char * tcc_to_char(unsigned int tcc)
AviError AVI_close_compress(AviMovie *movie)
static int fcc_get_stream(int fcc)
static bool fcc_is_data(int fcc)
bool AVI_is_avi(const char *name)
void * AVI_read_frame(AviMovie *movie, AviFormat format, int frame, int stream)
unsigned int GET_TCC(FILE *fp)
AviError AVI_print_error(AviError in_error)
AviError AVI_write_frame(AviMovie *movie, int frame_num,...)
int AVI_get_stream(AviMovie *movie, int avist_type, int stream_num)
AviError AVI_open_movie(const char *name, AviMovie *movie)
int avi_get_format_type(AviFormat format)
int avi_get_format_compression(AviFormat format)
int avi_get_data_id(AviFormat format, int stream)
void * avi_format_convert(AviMovie *movie, int stream, void *buffer, AviFormat from, AviFormat to, size_t *size)
int avi_get_format_fcc(AviFormat format)
void awrite(AviMovie *movie, void *datain, int block, int size, FILE *fp, int type)
#define PUT_FCCN(num, fp)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
ccl_global float * buffer
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static void error(const char *str)