mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-02 09:01:46 -05:00
pa_memblock statistics pa_default_sample_spec git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@70 fefdeb5f-60dc-0310-8127-8f9354f1896f
88 lines
1.9 KiB
C
88 lines
1.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include <string.h>
|
|
|
|
#include "memblock.h"
|
|
|
|
static unsigned memblock_count = 0, memblock_total = 0;
|
|
|
|
struct pa_memblock *pa_memblock_new(size_t length) {
|
|
struct pa_memblock *b = malloc(sizeof(struct pa_memblock)+length);
|
|
b->type = PA_MEMBLOCK_APPENDED;
|
|
b->ref = 1;
|
|
b->length = length;
|
|
b->data = b+1;
|
|
memblock_count++;
|
|
memblock_total += length;
|
|
return b;
|
|
}
|
|
|
|
struct pa_memblock *pa_memblock_new_fixed(void *d, size_t length) {
|
|
struct pa_memblock *b = malloc(sizeof(struct pa_memblock));
|
|
b->type = PA_MEMBLOCK_FIXED;
|
|
b->ref = 1;
|
|
b->length = length;
|
|
b->data = d;
|
|
memblock_count++;
|
|
memblock_total += length;
|
|
return b;
|
|
}
|
|
|
|
struct pa_memblock *pa_memblock_new_dynamic(void *d, size_t length) {
|
|
struct pa_memblock *b = malloc(sizeof(struct pa_memblock));
|
|
b->type = PA_MEMBLOCK_DYNAMIC;
|
|
b->ref = 1;
|
|
b->length = length;
|
|
b->data = d;
|
|
memblock_count++;
|
|
memblock_total += length;
|
|
return b;
|
|
}
|
|
|
|
struct pa_memblock* pa_memblock_ref(struct pa_memblock*b) {
|
|
assert(b && b->ref >= 1);
|
|
b->ref++;
|
|
return b;
|
|
}
|
|
|
|
void pa_memblock_unref(struct pa_memblock*b) {
|
|
assert(b && b->ref >= 1);
|
|
b->ref--;
|
|
|
|
if (b->ref == 0) {
|
|
if (b->type == PA_MEMBLOCK_DYNAMIC)
|
|
free(b->data);
|
|
|
|
memblock_count--;
|
|
memblock_total -= b->length;
|
|
|
|
free(b);
|
|
}
|
|
}
|
|
|
|
void pa_memblock_unref_fixed(struct pa_memblock *b) {
|
|
void *d;
|
|
|
|
assert(b && b->ref >= 1);
|
|
|
|
if (b->ref == 1) {
|
|
pa_memblock_unref(b);
|
|
return;
|
|
} else {
|
|
d = malloc(b->length);
|
|
assert(d);
|
|
memcpy(d, b->data, b->length);
|
|
b->data = d;
|
|
b->type = PA_MEMBLOCK_DYNAMIC;
|
|
b->ref--;
|
|
}
|
|
}
|
|
|
|
unsigned pa_memblock_get_count(void) {
|
|
return memblock_count;
|
|
}
|
|
|
|
unsigned pa_memblock_get_total(void) {
|
|
return memblock_total;
|
|
}
|