GF_Err gf_isom_datamap_new(const char *location, const char *parentPath, u8 mode, GF_DataMap **outDataMap) { Bool extern_file; char *sPath; *outDataMap = NULL; //if nothing specified, this is a MEMORY data map if (!location) { //not supported yet return GF_NOT_SUPPORTED; } //we need a temp file ... if (!strcmp(location, "mp4_tmp_edit")) { #ifndef GPAC_DISABLE_ISOM_WRITE *outDataMap = gf_isom_fdm_new_temp(parentPath); if (! (*outDataMap)) return GF_IO_ERR; return GF_OK; #else return GF_NOT_SUPPORTED; #endif } extern_file = !gf_url_is_local(location); if (mode == GF_ISOM_DATA_MAP_EDIT) { //we need a local file for edition!!! if (extern_file) return GF_ISOM_INVALID_MODE; //OK, switch back to READ mode mode = GF_ISOM_DATA_MAP_READ; } //TEMP: however, only support for file right now (we'd have to add some callback functions at some point) if (extern_file) return GF_NOT_SUPPORTED; sPath = gf_url_get_absolute_path(location, parentPath); if (sPath == NULL) return GF_URL_ERROR; if (mode == GF_ISOM_DATA_MAP_READ_ONLY) { mode = GF_ISOM_DATA_MAP_READ; /*It seems win32 file mapping is reported in prog mem usage -> large increases of occupancy. Should not be a pb but unless you want mapping, only regular IO will be used...*/ #if 0 if (IsLargeFile(sPath)) { *outDataMap = gf_isom_fdm_new(sPath, mode); } else { *outDataMap = gf_isom_fmo_new(sPath, mode); } #else *outDataMap = gf_isom_fdm_new(sPath, mode); #endif } else { *outDataMap = gf_isom_fdm_new(sPath, mode); } gf_free(sPath); if (! (*outDataMap)) return GF_URL_ERROR; return GF_OK; }
GF_DataMap *gf_isom_fmo_new(const char *sPath, u8 mode) { return gf_isom_fdm_new(sPath, mode); }