int quicktime_read_mdia(quicktime_t *file, quicktime_mdia_t *mdia, quicktime_atom_t *trak_atom) { quicktime_atom_t leaf_atom; do { quicktime_atom_read_header(file, &leaf_atom); /* mandatory */ if(quicktime_atom_is(&leaf_atom, "mdhd")) { quicktime_read_mdhd(file, &(mdia->mdhd)); } else if(quicktime_atom_is(&leaf_atom, "hdlr")) { quicktime_read_hdlr(file, &(mdia->hdlr)); /* Main Actor doesn't write component name */ quicktime_atom_skip(file, &leaf_atom); /*printf("quicktime_read_mdia %ld\n", quicktime_position(file)); */ } else if(quicktime_atom_is(&leaf_atom, "minf")) { quicktime_read_minf(file, &(mdia->minf), &leaf_atom); } else quicktime_atom_skip(file, &leaf_atom); }while(quicktime_position(file) < trak_atom->end); return 0; }
int quicktime_read_minf(quicktime_t *file, quicktime_minf_t *minf, quicktime_atom_t *parent_atom) { quicktime_atom_t leaf_atom; long pos = quicktime_position(file); do { quicktime_atom_read_header(file, &leaf_atom); /* mandatory */ if(quicktime_atom_is(&leaf_atom, "vmhd")) { minf->is_video = 1; quicktime_read_vmhd(file, &(minf->vmhd)); } else if(quicktime_atom_is(&leaf_atom, "smhd")) { minf->is_audio = 1; quicktime_read_smhd(file, &(minf->smhd)); } else if(quicktime_atom_is(&leaf_atom, "gmhd")) { minf->is_hint = 1; quicktime_read_gmhd(file, &(minf->gmhd), &leaf_atom); } else if(quicktime_atom_is(&leaf_atom, "hmhd")) { minf->is_hint = 1; quicktime_read_hmhd(file, &(minf->hmhd), &leaf_atom); } else if(quicktime_atom_is(&leaf_atom, "hdlr")) { quicktime_read_hdlr(file, &(minf->hdlr)); /* Main Actor doesn't write component name */ quicktime_atom_skip(file, &leaf_atom); } else if(quicktime_atom_is(&leaf_atom, "dinf")) { quicktime_read_dinf(file, &(minf->dinf), &leaf_atom); } else quicktime_atom_skip(file, &leaf_atom); }while(quicktime_position(file) < parent_atom->end); quicktime_set_position(file, pos); do { quicktime_atom_read_header(file, &leaf_atom); if(quicktime_atom_is(&leaf_atom, "stbl")) { quicktime_read_stbl(file, minf, &(minf->stbl), &leaf_atom); } else { quicktime_atom_skip(file, &leaf_atom); } } while(quicktime_position(file) < parent_atom->end); return 0; }