/*resize buffers (blocking)*/ void gf_cm_resize(GF_CompositionMemory *cb, u32 newCapacity) { GF_CMUnit *cu; if (!newCapacity) return; /*lock buffer*/ gf_odm_lock(cb->odm, 1); cu = cb->input; cb->UnitSize = newCapacity; if (!cb->no_allocation) { my_large_gf_free(cu->data); cu->data = (char*) my_large_alloc(newCapacity); } else { cu->data = NULL; if (cu->dataLength && cb->odm->raw_frame_sema) { cu->dataLength = 0; gf_sema_notify(cb->odm->raw_frame_sema, 1); } } cu = cu->next; while (cu != cb->input) { if (!cb->no_allocation) { my_large_gf_free(cu->data); cu->data = (char*) my_large_alloc(newCapacity); } else { cu->data = NULL; } cu = cu->next; } gf_odm_lock(cb->odm, 0); }
static void gf_cm_unit_del(GF_CMUnit *cb, Bool no_data_allocation) { if (!cb) return; if (cb->next) gf_cm_unit_del(cb->next, no_data_allocation); cb->next = NULL; if (cb->data) { if (!no_data_allocation) { my_large_gf_free(cb->data); } cb->data = NULL; } gf_free(cb); }