int quicktime_close(quicktime_t *file) { int result; if(file->wr) { quicktime_write_mdat(file, &(file->mdat)); quicktime_write_moov(file, &(file->moov)); } result = fclose(file->stream); quicktime_delete(file); free(file); return result; }
int quicktime_close(quicktime_t *file) { int result = 0; if(file->wr) { quicktime_codecs_flush(file); // Reenable buffer for quick header writing. quicktime_set_presave(file, 1); if(file->use_avi) { quicktime_atom_t junk_atom; int i; // Finalize last header quicktime_finalize_riff(file, file->riff[file->total_riffs - 1]); int64_t position = quicktime_position(file); // Finalize the odml header quicktime_finalize_odml(file, &file->riff[0]->hdrl); // Finalize super indexes quicktime_finalize_indx(file); // Pad ending quicktime_set_position(file, position); quicktime_atom_write_header(file, &junk_atom, "JUNK"); for(i = 0; i < 0x406; i++) quicktime_write_int32_le(file, 0); quicktime_atom_write_footer(file, &junk_atom); } else { // Atoms are only written here if(file->stream) { quicktime_write_moov(file, &(file->moov)); quicktime_atom_write_footer(file, &file->mdat.atom); } } } quicktime_file_close(file); quicktime_delete(file); free(file); return result; }
int quicktime_check_sig(char *path) { quicktime_t file; quicktime_atom_t leaf_atom; int result = 0, result1 = 0, result2 = 0; char avi_test[12]; quicktime_init(&file); result = quicktime_file_open(&file, path, 1, 0); if(!result) { // Check for Microsoft AVI quicktime_read_data(&file, avi_test, 12); quicktime_set_position(&file, 0); if(quicktime_match_32(avi_test, "RIFF") && quicktime_match_32(avi_test + 8, "AVI ")) { result2 = 1; } else { do { result1 = quicktime_atom_read_header(&file, &leaf_atom); if(!result1) { /* just want the "moov" atom */ if(quicktime_atom_is(&leaf_atom, "moov")) { result2 = 1; } else quicktime_atom_skip(&file, &leaf_atom); } }while(!result1 && !result2 && quicktime_position(&file) < file.total_length); } } //printf(__FUNCTION__ " 2 %d\n", result2); quicktime_file_close(&file); quicktime_delete(&file); return result2; }
int quicktime_check_sig(const char *path) { quicktime_t file; quicktime_atom_t leaf_atom; int result1 = 0, result2 = 0; quicktime_init(&file); if(!(file.stream = fopen(path, "rb"))) { perror("quicktime_check_sig"); return 0; } fseek(file.stream, 0, SEEK_END); file.total_length = ftell(file.stream); fseek(file.stream, 0, SEEK_SET); do { result1 = quicktime_atom_read_header(&file, &leaf_atom); if(!result1) { /* just want the "moov" atom */ if(quicktime_atom_is(&leaf_atom, "moov")) { result2 = 1; } else quicktime_atom_skip(&file, &leaf_atom); } }while(!result1 && !result2 && quicktime_position(&file) < file.total_length); fclose(file.stream); quicktime_delete(&file); return result2; }
int quicktime_destroy(quicktime_t *file) { quicktime_delete(file); free(file); return 0; }