]> code.delx.au - pulseaudio/blob - src/sample.c
esound protocol
[pulseaudio] / src / sample.c
1 #include <assert.h>
2
3 #include "sample.h"
4
5 size_t pa_sample_size(struct pa_sample_spec *spec) {
6 assert(spec);
7 size_t b = 1;
8
9 switch (spec->format) {
10 case PA_SAMPLE_U8:
11 case PA_SAMPLE_ULAW:
12 case PA_SAMPLE_ALAW:
13 b = 1;
14 break;
15 case PA_SAMPLE_S16LE:
16 case PA_SAMPLE_S16BE:
17 b = 2;
18 break;
19 case PA_SAMPLE_FLOAT32:
20 b = 4;
21 break;
22 default:
23 assert(0);
24 }
25
26 return b * spec->channels;
27 }
28
29 size_t pa_bytes_per_second(struct pa_sample_spec *spec) {
30 assert(spec);
31 return spec->rate*pa_sample_size(spec);
32 }
33
34
35 uint32_t pa_samples_usec(size_t length, struct pa_sample_spec *spec) {
36 assert(spec);
37
38 return (uint32_t) (((double) length /pa_sample_size(spec))/spec->rate*1000000);
39 }
40
41 int pa_sample_spec_valid(struct pa_sample_spec *spec) {
42 assert(spec);
43
44 if (!spec->rate || !spec->channels)
45 return 0;
46
47 if (spec->format <= 0 || spec->format >= PA_SAMPLE_MAX)
48 return 0;
49
50 return 1;
51 }