mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-02 09:01:46 -05:00
packet: Make pa_packet_new() create fixed-size packets
if length exceeds maximum appended size, create a packet of type dynamic instead of type appended this is a preparation to use a separate free-list for packets document semantics of pa_packet_new_*() functions Signed-off-by: Peter Meerwald <pmeerw@pmeerw.net>
This commit is contained in:
parent
5a2c41e5bf
commit
c1a7f0e326
2 changed files with 18 additions and 3 deletions
|
|
@ -29,11 +29,16 @@
|
||||||
|
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
|
|
||||||
|
#define MAX_APPENDED_SIZE 128
|
||||||
|
|
||||||
typedef struct pa_packet {
|
typedef struct pa_packet {
|
||||||
PA_REFCNT_DECLARE;
|
PA_REFCNT_DECLARE;
|
||||||
enum { PA_PACKET_APPENDED, PA_PACKET_DYNAMIC } type;
|
enum { PA_PACKET_APPENDED, PA_PACKET_DYNAMIC } type;
|
||||||
size_t length;
|
size_t length;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
|
union {
|
||||||
|
uint8_t appended[MAX_APPENDED_SIZE];
|
||||||
|
} per_type;
|
||||||
} pa_packet;
|
} pa_packet;
|
||||||
|
|
||||||
pa_packet* pa_packet_new(size_t length) {
|
pa_packet* pa_packet_new(size_t length) {
|
||||||
|
|
@ -41,11 +46,16 @@ pa_packet* pa_packet_new(size_t length) {
|
||||||
|
|
||||||
pa_assert(length > 0);
|
pa_assert(length > 0);
|
||||||
|
|
||||||
p = pa_xmalloc(PA_ALIGN(sizeof(pa_packet)) + length);
|
p = pa_xnew(pa_packet, 1);
|
||||||
PA_REFCNT_INIT(p);
|
PA_REFCNT_INIT(p);
|
||||||
p->length = length;
|
p->length = length;
|
||||||
p->data = (uint8_t*) p + PA_ALIGN(sizeof(pa_packet));
|
if (length > MAX_APPENDED_SIZE) {
|
||||||
|
p->data = pa_xmalloc(length);
|
||||||
|
p->type = PA_PACKET_DYNAMIC;
|
||||||
|
} else {
|
||||||
|
p->data = p->per_type.appended;
|
||||||
p->type = PA_PACKET_APPENDED;
|
p->type = PA_PACKET_APPENDED;
|
||||||
|
}
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,12 @@
|
||||||
|
|
||||||
typedef struct pa_packet pa_packet;
|
typedef struct pa_packet pa_packet;
|
||||||
|
|
||||||
|
/* create empty packet (either of type appended or dynamic depending
|
||||||
|
* on length) */
|
||||||
pa_packet* pa_packet_new(size_t length);
|
pa_packet* pa_packet_new(size_t length);
|
||||||
|
|
||||||
|
/* data must have been malloc()ed; the packet takes ownership of the memory,
|
||||||
|
* i.e. memory is free()d with the packet */
|
||||||
pa_packet* pa_packet_new_dynamic(void* data, size_t length);
|
pa_packet* pa_packet_new_dynamic(void* data, size_t length);
|
||||||
|
|
||||||
const void* pa_packet_data(pa_packet *p, size_t *l);
|
const void* pa_packet_data(pa_packet *p, size_t *l);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue