int pdb_item_destroy(pdb_t *p, uint32_t id) { void *item_get; pdb_entry_t *item; if (btree_remove(p->db, id, &item_get) == FALSE) { debug_msg("Cannot delete item because it does not exist!\n"); return FALSE; } item = (pdb_entry_t*)item_get; pdb_item_validate(item); assert(id == item->ssrc); /* clean up elements of item here ************************************/ if (item->render_3D_data != NULL) { render_3D_free(&item->render_3D_data); } if (item->enc_fmt != NULL) { xfree(item->enc_fmt); item->enc_fmt = NULL; } /*********************************************************************/ debug_msg("Removing persistent database entry for SSRC 0x%08lx\n", item->ssrc); xfree(item); p->nelem--; return TRUE; }
int pdb_item_create(pdb_t *p, uint16_t freq, uint32_t id) { pdb_entry_t *item; timestamp_t zero_ts; if (btree_find(p->db, id, (void**)&item)) { debug_msg("Item already exists\n"); return FALSE; } item = (pdb_entry_t*)xmalloc(sizeof(pdb_entry_t)); if (item == NULL) { return FALSE; } /* Initialize elements of item here as necesary **********************/ item->magic = 0xc001babe; item->ssrc = id; item->render_3D_data = NULL; item->enc = -1; item->enc_fmt_len = 2 * (CODEC_LONG_NAME_LEN + 1); item->enc_fmt = xmalloc(item->enc_fmt_len); item->sample_rate = freq; item->gain = 1.0; item->mute = 0; zero_ts = ts_map32(8000, 0); item->last_ui_update = zero_ts; item->first_mix = TRUE; /* Initial jitter estimate (30ms) */ item->jitter = ts_map32(8000, 240); item->transit = zero_ts; item->last_transit = zero_ts; item->last_last_transit = zero_ts; item->avg_transit = zero_ts; item->playout = zero_ts; item->last_arr = zero_ts; item->last_rtt = 0.0; item->avg_rtt = 0.0; /* Packet stats initialization */ item->received = 0; item->duplicates = 0; item->misordered = 0; item->jit_toged = 0; item->spike_toged = 0; item->spike_events = 0; pdb_item_validate(item); /*********************************************************************/ if (btree_add(p->db, id, (void*)item) == FALSE) { debug_msg("failed to add item to persistent database!\n"); return FALSE; } p->nelem++; return TRUE; }
int pdb_item_get(pdb_t *p, uint32_t id, pdb_entry_t **item) { void *v; if (btree_find(p->db, id, &v) == FALSE) { *item = NULL; return FALSE; } assert(v != NULL); *item = (pdb_entry_t*)v; pdb_item_validate(*item); return TRUE; }