void quicktime_atom_write_footer(quicktime_t *file, quicktime_atom_t *atom) { atom->end = quicktime_position(file); if(file->use_avi) { quicktime_set_position(file, atom->start - 4); quicktime_write_int32_le(file, atom->end - atom->start); atom->size = atom->end - atom->start; } else { // We should calculate atom->size here also... it is used in trak.c FIXME // I don't know internals of the quicktime to know what is proper calculation - with or wirhout header? if(atom->use_64) { quicktime_set_position(file, atom->start + 8); //printf("quicktime_atom_write_footer %llx %llx %llx %llx\n", file->total_length, file->file_position, atom->start, atom->end); quicktime_write_int64(file, atom->end - atom->start); } else { quicktime_set_position(file, atom->start); quicktime_write_int32(file, atom->end - atom->start); } } quicktime_set_position(file, atom->end); }
int quicktime_write_nump(quicktime_t *file, quicktime_nump_t *nump) { quicktime_atom_t atom; quicktime_atom_write_header(file, &atom, "nump"); quicktime_write_int64(file, nump->numPackets); quicktime_atom_write_footer(file, &atom); }
int quicktime_write_dimm(quicktime_t *file, quicktime_dimm_t *dimm) { quicktime_atom_t atom; quicktime_atom_write_header(file, &atom, "dimm"); quicktime_write_int64(file, dimm->numBytes); quicktime_atom_write_footer(file, &atom); }
int quicktime_atom_write_header64(quicktime_t *file, quicktime_atom_t *atom, char *text) { int result = 0; atom->start = quicktime_position(file); result = !quicktime_write_int32(file, 1); if(!result) result = !quicktime_write_char32(file, text); if(!result) result = !quicktime_write_int64(file, 0); atom->use_64 = 1; return result; }