annotate audioDB_API.h @ 770:c54bc2ffbf92 tip

update tags
author convert-repo
date Fri, 16 Dec 2011 11:34:01 +0000
parents b9dbe4611dde
children
rev   line source
mas01cr@498 1 #ifndef AUDIODB_API_H
mas01cr@498 2 #define AUDIODB_API_H
mas01cr@498 3
mas01cr@498 4 #include <stdbool.h>
mas01cr@498 5 #include <stdint.h>
mas01cr@498 6
mas01ik@355 7 /* for API questions contact
mas01ik@355 8 * Christophe Rhodes c.rhodes@gold.ac.uk
mas01ik@355 9 * Ian Knopke mas01ik@gold.ac.uk, ian.knopke@gmail.com */
mas01ik@355 10
mas01cr@498 11 /* Temporary workarounds */
mas01cr@498 12 int acquire_lock(int, bool);
mas01cr@498 13 int divest_lock(int);
mas01cr@498 14
mas01ik@355 15
mas01ik@355 16 /*******************************************************************/
mas01ik@355 17 /* Data types for API */
mas01ik@355 18
mas01cr@498 19 /* FIXME: it might be that "adb_" isn't such a good prefix to use, and
mas01cr@498 20 that we should prefer "audiodb_". Or else maybe we should be
mas01cr@498 21 calling ourselves libadb? */
mas01cr@670 22 typedef struct adb adb_t;
mas01ik@355 23
mas01cr@670 24 typedef struct adb_datum {
mas01cr@498 25 uint32_t nvectors;
mas01cr@498 26 uint32_t dim;
mas01cr@498 27 const char *key;
mas01cr@498 28 double *data;
mas01cr@498 29 double *power;
mas01cr@498 30 double *times;
mas01cr@670 31 } adb_datum_t;
mas01ik@355 32
mas01cr@670 33 typedef struct adb_reference {
mas01cr@498 34 const char *features;
mas01cr@498 35 const char *power;
mas01cr@498 36 const char *key;
mas01cr@498 37 const char *times;
mas01cr@670 38 } adb_reference_t, adb_insert_t;
mas01ik@355 39
mas01ik@355 40 /* struct for returning status results */
mas01cr@670 41 typedef struct adb_status {
mas01ik@355 42 unsigned int numFiles;
mas01ik@355 43 unsigned int dim;
mas01ik@355 44 unsigned int dudCount;
mas01ik@355 45 unsigned int nullCount;
mas01ik@355 46 unsigned int flags;
mas01cr@498 47 uint64_t length;
mas01cr@498 48 uint64_t data_region_size;
mas01cr@670 49 } adb_status_t;
mas01ik@355 50
mas01cr@670 51 typedef struct adb_result {
mas01cr@672 52 const char *qkey;
mas01cr@672 53 const char *ikey;
mas01cr@498 54 uint32_t qpos;
mas01cr@498 55 uint32_t ipos;
mas01cr@672 56 double dist;
mas01cr@498 57 } adb_result_t;
mas01cr@498 58
mas01cr@498 59 #define ADB_REFINE_INCLUDE_KEYLIST 1
mas01cr@498 60 #define ADB_REFINE_EXCLUDE_KEYLIST 2
mas01cr@498 61 #define ADB_REFINE_RADIUS 4
mas01cr@498 62 #define ADB_REFINE_ABSOLUTE_THRESHOLD 8
mas01cr@498 63 #define ADB_REFINE_RELATIVE_THRESHOLD 16
mas01cr@498 64 #define ADB_REFINE_DURATION_RATIO 32
mas01cr@498 65 #define ADB_REFINE_HOP_SIZE 64
mas01cr@498 66
mas01cr@673 67 typedef struct adb_keylist {
mas01cr@498 68 uint32_t nkeys;
mas01cr@498 69 const char **keys;
mas01cr@498 70 } adb_keylist_t;
mas01cr@498 71
mas01cr@673 72 typedef struct adb_query_refine {
mas01cr@498 73 uint32_t flags;
mas01cr@498 74 adb_keylist_t include;
mas01cr@498 75 adb_keylist_t exclude;
mas01cr@498 76 double radius;
mas01cr@498 77 double absolute_threshold;
mas01cr@498 78 double relative_threshold;
mas01cr@498 79 double duration_ratio; /* expandfactor */
mas01cr@675 80 uint32_t qhopsize;
mas01cr@675 81 uint32_t ihopsize;
mas01cr@498 82 } adb_query_refine_t;
mas01cr@498 83
mas01cr@498 84 #define ADB_ACCUMULATION_DB 1
mas01cr@498 85 #define ADB_ACCUMULATION_PER_TRACK 2
mas01cr@498 86 #define ADB_ACCUMULATION_ONE_TO_ONE 3
mas01cr@498 87
mas01cr@498 88 #define ADB_DISTANCE_DOT_PRODUCT 1
mas01cr@498 89 #define ADB_DISTANCE_EUCLIDEAN_NORMED 2
mas01cr@498 90 #define ADB_DISTANCE_EUCLIDEAN 3
mas01mc@768 91 #define ADB_DISTANCE_KULLBACK_LEIBLER_DIVERGENCE 4
mas01cr@498 92
mas01cr@673 93 typedef struct adb_query_parameters {
mas01cr@498 94 uint32_t accumulation;
mas01cr@498 95 uint32_t distance;
mas01cr@498 96 uint32_t npoints;
mas01cr@498 97 uint32_t ntracks;
mas01cr@498 98 } adb_query_parameters_t;
mas01cr@498 99
mas01cr@673 100 typedef struct adb_query_results {
mas01cr@498 101 uint32_t nresults;
mas01cr@498 102 adb_result_t *results;
mas01cr@498 103 } adb_query_results_t;
mas01cr@498 104
mas01cr@498 105 #define ADB_QID_FLAG_EXHAUSTIVE 1
mas01cr@498 106 #define ADB_QID_FLAG_ALLOW_FALSE_POSITIVES 2
mas01cr@498 107
mas01cr@673 108 typedef struct adb_queryid {
mas01cr@498 109 adb_datum_t *datum;
mas01cr@498 110 uint32_t sequence_length;
mas01cr@498 111 uint32_t flags;
mas01cr@498 112 uint32_t sequence_start;
mas01cr@498 113 } adb_query_id_t;
mas01cr@498 114
mas01cr@673 115 typedef struct adb_query_spec {
mas01cr@498 116 adb_query_id_t qid;
mas01cr@498 117 adb_query_parameters_t params;
mas01cr@498 118 adb_query_refine_t refine;
mas01cr@498 119 } adb_query_spec_t;
mas01ik@355 120
mas01cr@673 121 typedef struct adb_track_entry {
mas01cr@548 122 uint32_t nvectors;
mas01cr@548 123 const char *key;
mas01cr@548 124 } adb_track_entry_t;
mas01cr@548 125
mas01cr@673 126 typedef struct adb_liszt_results {
mas01cr@548 127 uint32_t nresults;
mas01cr@548 128 adb_track_entry_t *entries;
mas01cr@548 129 } adb_liszt_results_t;
mas01cr@548 130
mas01ik@355 131 /*******************************************************************/
mas01ik@355 132 /* Function prototypes for API */
mas01ik@355 133
mas01ik@355 134 /* open an existing database */
mas01ik@355 135 /* returns a struct or NULL on failure */
mas01cr@670 136 adb_t *audiodb_open(const char *path, int flags);
mas01ik@355 137
mas01ik@355 138 /* create a new database */
mas01ik@355 139 /* returns a struct or NULL on failure */
mas01cr@670 140 adb_t *audiodb_create(const char *path, unsigned datasize, unsigned ntracks, unsigned datadim);
mas01ik@355 141
mas01ik@355 142 /* close a database */
mas01cr@670 143 void audiodb_close(adb_t *adb);
mas01ik@355 144
mas01ik@355 145 /* You'll need to turn both of these on to do anything useful */
mas01cr@670 146 int audiodb_l2norm(adb_t *adb);
mas01cr@670 147 int audiodb_power(adb_t *adb);
mas01ik@355 148
mas01ik@355 149 /* insert functions */
mas01cr@498 150 int audiodb_insert_datum(adb_t *, const adb_datum_t *);
mas01cr@498 151 int audiodb_insert_reference(adb_t *, const adb_reference_t *);
mas01ik@355 152
mas01ik@355 153 /* query function */
mas01cr@498 154 adb_query_results_t *audiodb_query_spec(adb_t *, const adb_query_spec_t *);
mas01cr@498 155 int audiodb_query_free_results(adb_t *, const adb_query_spec_t *, adb_query_results_t *);
mas01cr@498 156
mas01ik@355 157 /* database status */
mas01cr@670 158 int audiodb_status(adb_t *, adb_status_t *status);
mas01ik@355 159
mas01cr@580 160 /* retrieval of inserted data */
mas01cr@580 161 int audiodb_retrieve_datum(adb_t *, const char *, adb_datum_t *);
mas01cr@580 162 int audiodb_free_datum(adb_t *, adb_datum_t *);
mas01cr@580 163
mas01cr@580 164 /* various dump formats */
mas01cr@670 165 int audiodb_dump(adb_t *, const char *outputdir);
mas01ik@355 166
mas01cr@548 167 /* liszt */
mas01cr@548 168 adb_liszt_results_t *audiodb_liszt(adb_t *);
mas01cr@548 169 int audiodb_liszt_free_results(adb_t *, adb_liszt_results_t *);
mas01cr@548 170
mas01cr@693 171 /* sample */
mas01cr@693 172 adb_query_results_t *audiodb_sample_spec(adb_t *, const adb_query_spec_t *);
mas01cr@693 173
mas01cr@670 174 /* backwards compatibility */
mas01cr@670 175 int audiodb_insert(adb_t *, adb_insert_t *ins);
mas01cr@670 176 int audiodb_batchinsert(adb_t *, adb_insert_t *ins, unsigned int size);
mas01cr@670 177
mas01cr@498 178 #endif