Mercurial > hg > audiodb
changeset 451:ef9ef130e27b api-inversion
Miscellaneous trivial de-audioDB::ifications
dbfid, trackTable, sequenceHop, and dbH are all easy; queryPoint and
usingQueryPoint only marginally less so.
author | mas01cr |
---|---|
date | Wed, 24 Dec 2008 10:57:05 +0000 |
parents | 0c1c8726a79b |
children | 25ee0b77f8ca |
files | audioDB.h query.cpp |
diffstat | 2 files changed, 20 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/audioDB.h Wed Dec 24 10:57:01 2008 +0000 +++ b/audioDB.h Wed Dec 24 10:57:05 2008 +0000 @@ -325,7 +325,7 @@ void error(const char* a, const char* b = "", const char *sysFunc = 0); void insertTimeStamps(unsigned n, std::ifstream* timesFile, double* timesdata); - void query_loop(adb_query_spec_t *spec, Uns32T queryIndex); + void query_loop(adb_t *adb, adb_query_spec_t *spec, Uns32T queryIndex); void query_loop_points(adb_query_spec_t *spec, double* query, adb_qpointers_internal_t *qpointers); void initRNG(); void initDBHeader(const char *dbName);
--- a/query.cpp Wed Dec 24 10:57:01 2008 +0000 +++ b/query.cpp Wed Dec 24 10:57:05 2008 +0000 @@ -205,7 +205,7 @@ } else{ VERB_LOG(1, "Calling brute-force query on database %s\n", dbName); - query_loop(&qspec, query_from_key_index); + query_loop(adb, &qspec, query_from_key_index); } adb_query_results_t *rs = accumulator->get_points(); @@ -652,7 +652,7 @@ Uns32T sPos = trackIndexOffset+pp.spos; // index into l2norm table // Test power thresholds before computing distance if( ( (!power_refine) || audiodb_powers_acceptable(&spec->refine, qpointers->power[qPos], dbpointers.power[sPos])) && - ( qPos<qpointers->nvectors-sequence_length+1 && pp.spos<trackTable[pp.trackID]-sequence_length+1 ) ){ + ( qPos<qpointers->nvectors-sequence_length+1 && pp.spos<(*adb->track_lengths)[pp.trackID]-sequence_length+1 ) ){ // Non-large ADB track data is loaded inside power test for efficiency if( !(dbH->flags & O2_FLAG_LARGE_ADB) && (currentTrack!=pp.trackID) ){ // On currentTrack change, allocate and load track data @@ -690,14 +690,14 @@ SAFE_DELETE_ARRAY(dbpointers.mean_duration); } -void audioDB::query_loop(adb_query_spec_t *spec, Uns32T queryIndex) { +void audioDB::query_loop(adb_t *adb, adb_query_spec_t *spec, Uns32T queryIndex) { double *query, *query_data; adb_qpointers_internal_t qpointers = {0}, dbpointers = {0}; bool power_refine = spec->refine.flags & (ADB_REFINE_ABSOLUTE_THRESHOLD|ADB_REFINE_RELATIVE_THRESHOLD); - if( dbH->flags & O2_FLAG_LARGE_ADB ) + if( adb->header->flags & O2_FLAG_LARGE_ADB ) error("error: LARGE_ADB requires indexed query"); if(audiodb_query_spec_qpointers(adb, spec, &query_data, &query, &qpointers)) { @@ -708,7 +708,7 @@ error("failed to set up db"); } - unsigned j,k,track,trackOffset=0, HOP_SIZE=sequenceHop; + unsigned j,k,track,trackOffset=0, HOP_SIZE = spec->refine.hopsize; unsigned wL = spec->qid.sequence_length; double **D = 0; // Differences query and target double **DD = 0; // Matched filter distance @@ -723,9 +723,9 @@ // Track loop size_t data_buffer_size = 0; double *data_buffer = 0; - lseek(dbfid, dbH->dataOffset, SEEK_SET); + lseek(adb->fd, adb->header->dataOffset, SEEK_SET); - for(processedTracks=0, track=0 ; processedTracks < dbH->numFiles ; track++, processedTracks++) { + for(processedTracks=0, track=0 ; processedTracks < adb->header->numFiles ; track++, processedTracks++) { trackOffset = (*adb->track_offsets)[track]; @@ -738,7 +738,7 @@ error("key not found", nextKey); } trackOffset = (*adb->track_offsets)[track]; - lseek(dbfid, dbH->dataOffset + trackOffset, SEEK_SET); + lseek(adb->fd, adb->header->dataOffset + trackOffset, SEEK_SET); } else { break; } @@ -746,21 +746,21 @@ // skip identity on query_from_key if( query_from_key && (track == queryIndex) ) { - if(queryIndex!=dbH->numFiles-1){ + if(queryIndex!=adb->header->numFiles-1){ track++; trackOffset = (*adb->track_offsets)[track]; - lseek(dbfid, dbH->dataOffset + trackOffset, SEEK_SET); + lseek(adb->fd, adb->header->dataOffset + trackOffset, SEEK_SET); } else{ break; } } - trackIndexOffset = trackOffset / (dbH->dim * sizeof(double)); // dbpointers.nvectors offset + trackIndexOffset = trackOffset / (adb->header->dim * sizeof(double)); // dbpointers.nvectors offset - if(audiodb_read_data(adb, dbfid, track, &data_buffer, &data_buffer_size)) + if(audiodb_read_data(adb, adb->fd, track, &data_buffer, &data_buffer_size)) error("failed to read data"); - if(wL <= trackTable[track]) { // test for short sequences + if(wL <= (*adb->track_lengths)[track]) { // test for short sequences audiodb_initialize_arrays(adb, spec, track, qpointers.nvectors, query, data_buffer, D, DD); @@ -769,7 +769,7 @@ // Search for minimum distance by shingles (concatenated vectors) for(j = 0; j <= qpointers.nvectors - wL; j += HOP_SIZE) { - for(k = 0; k <= trackTable[track] - wL; k += HOP_SIZE) { + for(k = 0; k <= (*adb->track_lengths)[track] - wL; k += HOP_SIZE) { double thisDist = 0; double qn = qpointers.l2norm[j]; double sn = dbpointers.l2norm[trackIndexOffset + k]; @@ -792,7 +792,11 @@ adb_result_t r; r.key = fileTable + track * O2_FILETABLE_ENTRY_SIZE; r.dist = thisDist; - r.qpos = usingQueryPoint ? queryPoint : j; + if(spec->qid.flags & ADB_QUERY_ID_FLAG_EXHAUSTIVE) { + r.qpos = j; + } else { + r.qpos = spec->qid.sequence_start; + } r.ipos = k; accumulator->add_point(&r); }