Avoid enumerating the same HRTF file twice

This commit is contained in:
Chris Robinson
2016-02-21 04:46:14 -08:00
parent e6f120df23
commit bd233c8cdb
+46 -47
View File
@@ -511,8 +511,11 @@ static struct Hrtf *LoadHrtf01(FILE *f, const_al_string filename)
static void AddFileEntry(vector_HrtfEntry *list, al_string *filename)
{
HrtfEntry entry = { AL_STRING_INIT_STATIC(), NULL };
HrtfEntry *iter;
struct Hrtf *hrtf = NULL;
const HrtfEntry *iter;
const char *name;
ALchar magic[8];
FILE *f;
int i;
name = strrchr(al_string_get_cstr(*filename), '/');
@@ -524,56 +527,52 @@ static void AddFileEntry(vector_HrtfEntry *list, al_string *filename)
while(entry.hrtf)
{
if(al_string_cmp_cstr(*filename, entry.hrtf->filename) == 0)
break;
{
TRACE("Skipping duplicate file entry %s\n", al_string_get_cstr(*filename));
goto done;
}
entry.hrtf = entry.hrtf->next;
}
if(!entry.hrtf)
TRACE("Loading %s...\n", al_string_get_cstr(*filename));
f = al_fopen(al_string_get_cstr(*filename), "rb");
if(f == NULL)
{
struct Hrtf *hrtf = NULL;
ALchar magic[8];
FILE *f;
TRACE("Loading %s...\n", al_string_get_cstr(*filename));
f = al_fopen(al_string_get_cstr(*filename), "rb");
if(f == NULL)
{
ERR("Could not open %s\n", al_string_get_cstr(*filename));
goto error;
}
if(fread(magic, 1, sizeof(magic), f) != sizeof(magic))
ERR("Failed to read header from %s\n", al_string_get_cstr(*filename));
else
{
if(memcmp(magic, magicMarker00, sizeof(magicMarker00)) == 0)
{
TRACE("Detected data set format v0\n");
hrtf = LoadHrtf00(f, *filename);
}
else if(memcmp(magic, magicMarker01, sizeof(magicMarker01)) == 0)
{
TRACE("Detected data set format v1\n");
hrtf = LoadHrtf01(f, *filename);
}
else
ERR("Invalid header in %s: \"%.8s\"\n", al_string_get_cstr(*filename), magic);
}
fclose(f);
if(!hrtf)
{
ERR("Failed to load %s\n", al_string_get_cstr(*filename));
goto error;
}
hrtf->next = LoadedHrtfs;
LoadedHrtfs = hrtf;
TRACE("Loaded HRTF support for format: %s %uhz\n",
DevFmtChannelsString(DevFmtStereo), hrtf->sampleRate);
entry.hrtf = hrtf;
ERR("Could not open %s\n", al_string_get_cstr(*filename));
goto done;
}
if(fread(magic, 1, sizeof(magic), f) != sizeof(magic))
ERR("Failed to read header from %s\n", al_string_get_cstr(*filename));
else
{
if(memcmp(magic, magicMarker00, sizeof(magicMarker00)) == 0)
{
TRACE("Detected data set format v0\n");
hrtf = LoadHrtf00(f, *filename);
}
else if(memcmp(magic, magicMarker01, sizeof(magicMarker01)) == 0)
{
TRACE("Detected data set format v1\n");
hrtf = LoadHrtf01(f, *filename);
}
else
ERR("Invalid header in %s: \"%.8s\"\n", al_string_get_cstr(*filename), magic);
}
fclose(f);
if(!hrtf)
{
ERR("Failed to load %s\n", al_string_get_cstr(*filename));
goto done;
}
hrtf->next = LoadedHrtfs;
LoadedHrtfs = hrtf;
TRACE("Loaded HRTF support for format: %s %uhz\n",
DevFmtChannelsString(DevFmtStereo), hrtf->sampleRate);
entry.hrtf = hrtf;
/* TODO: Get a human-readable name from the HRTF data (possibly coming in a
* format update). */
@@ -589,7 +588,7 @@ static void AddFileEntry(vector_HrtfEntry *list, al_string *filename)
++i;
#define MATCH_NAME(i) (al_string_cmp(entry.name, (i)->name) == 0)
VECTOR_FIND_IF(iter, HrtfEntry, *list, MATCH_NAME);
VECTOR_FIND_IF(iter, const HrtfEntry, *list, MATCH_NAME);
#undef MATCH_NAME
} while(iter != VECTOR_ITER_END(*list));
@@ -597,7 +596,7 @@ static void AddFileEntry(vector_HrtfEntry *list, al_string *filename)
al_string_get_cstr(*filename));
VECTOR_PUSH_BACK(*list, entry);
error:
done:
al_string_deinit(filename);
}