blob: e03d1a3f6edb0a53fc3de4ce47fa9aa334f3af34 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <assert.h>
#include "qbufsplit.h"
void qbuf_float_split(struct qbuf* sq, struct qbuf* dq1, struct qbuf*dq2) {
float *sp, *dp1, *dp2;
size_t sl, dl1, dl2;
size_t c = 0;
assert(sq && dq1 && dq2);
sp = qbuf_pull(sq, &sl);
dp1 = qbuf_push(dq1, &dl1);
dp2 = qbuf_push(dq2, &dl2);
assert(sp && dp1 && dp2);
while (sl >= 2*sizeof(float) && dl1 >= sizeof(float) && dl2 >= sizeof(float)) {
*(dp1++) = *(sp++);
*(dp2++) = *(sp++);
sl -= 2*sizeof(float);
dl1 -= sizeof(float);
dl2 -= sizeof(float);
c += sizeof(float);
}
qbuf_pull_invalidate(sq, c*2);
qbuf_push_validate(dq1, c);
qbuf_push_validate(dq2, c);
}
|