Skip to content

Commit c1c3187

Browse files
committed
Apply suggestions
1 parent 91a1c7f commit c1c3187

File tree

1 file changed

+97
-100
lines changed

1 file changed

+97
-100
lines changed

virtio-snd.c

Lines changed: 97 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ enum {
3333
VSND_FEATURES_1,
3434
};
3535

36+
/* supported control messages */
3637
enum {
3738
/* jack control requests types */
3839
VIRTIO_SND_R_JACK_INFO = 1,
@@ -65,38 +66,30 @@ enum {
6566

6667
/* supported PCM frame rates */
6768
enum {
68-
VIRTIO_SND_PCM_RATE_5512 = 0, /* 5512 Hz */
69-
VIRTIO_SND_PCM_RATE_8000, /* 8000 Hz */
70-
VIRTIO_SND_PCM_RATE_11025, /* 11025 Hz */
71-
VIRTIO_SND_PCM_RATE_16000, /* 16000 Hz */
72-
VIRTIO_SND_PCM_RATE_22050, /* 22050 Hz */
73-
VIRTIO_SND_PCM_RATE_32000, /* 32000 Hz */
74-
VIRTIO_SND_PCM_RATE_44100, /* 44100 Hz */
75-
VIRTIO_SND_PCM_RATE_48000, /* 48000 Hz */
76-
VIRTIO_SND_PCM_RATE_64000, /* 64000 Hz */
77-
VIRTIO_SND_PCM_RATE_88200, /* 88200 Hz */
78-
VIRTIO_SND_PCM_RATE_96000, /* 96000 Hz */
79-
VIRTIO_SND_PCM_RATE_176400, /* 176400 Hz */
80-
VIRTIO_SND_PCM_RATE_192000, /* 192000 Hz */
81-
VIRTIO_SND_PCM_RATE_384000, /* 384000 Hz */
69+
#define _(rate) VIRTIO_SND_PCM_RATE_##rate
70+
_(5512) = 0, /* 5512 Hz */
71+
_(8000), /* 8000 Hz */
72+
_(11025), /* 11025 Hz */
73+
_(16000), /* 16000 Hz */
74+
_(22050), /* 22050 Hz */
75+
_(32000), /* 32000 Hz */
76+
_(44100), /* 44100 Hz */
77+
_(48000), /* 48000 Hz */
78+
_(64000), /* 64000 Hz */
79+
_(88200), /* 88200 Hz */
80+
_(96000), /* 96000 Hz */
81+
_(176400), /* 176400 Hz */
82+
_(192000), /* 192000 Hz */
83+
_(384000), /* 384000 Hz */
84+
#undef _
8285
};
8386

8487
/* supported PCM frames rates mapping */
8588
int pcm_rate_tbl[] = {
86-
[VIRTIO_SND_PCM_RATE_5512] = 5512,
87-
[VIRTIO_SND_PCM_RATE_8000] = 8000,
88-
[VIRTIO_SND_PCM_RATE_11025] = 11025,
89-
[VIRTIO_SND_PCM_RATE_16000] = 16000,
90-
[VIRTIO_SND_PCM_RATE_22050] = 22050,
91-
[VIRTIO_SND_PCM_RATE_32000] = 32000,
92-
[VIRTIO_SND_PCM_RATE_44100] = 44100,
93-
[VIRTIO_SND_PCM_RATE_48000] = 48000,
94-
[VIRTIO_SND_PCM_RATE_64000] = 64000,
95-
[VIRTIO_SND_PCM_RATE_88200] = 88200,
96-
[VIRTIO_SND_PCM_RATE_96000] = 96000,
97-
[VIRTIO_SND_PCM_RATE_176400] = 176400,
98-
[VIRTIO_SND_PCM_RATE_192000] = 192000,
99-
[VIRTIO_SND_PCM_RATE_384000] = 384000,
89+
#define _(rate) [VIRTIO_SND_PCM_RATE_##rate] = rate
90+
_(5512), _(8000), _(11025), _(16000), _(22050), _(32000), _(44100),
91+
_(48000), _(64000), _(88200), _(96000), _(176400), _(192000), _(384000),
92+
#undef _
10093
};
10194

10295
/* supported PCM stream features */
@@ -106,74 +99,78 @@ enum {
10699

107100
/* supported PCM sample formats */
108101
enum {
109-
/* analog formats (width / physical width) */
110-
VIRTIO_SND_PCM_FMT_IMA_ADPCM = 0, /* 4 / 4 bits */
111-
VIRTIO_SND_PCM_FMT_MU_LAW, /* 8 / 8 bits */
112-
VIRTIO_SND_PCM_FMT_A_LAW, /* 8 / 8 bits */
113-
VIRTIO_SND_PCM_FMT_S8, /* 8 / 8 bits */
114-
VIRTIO_SND_PCM_FMT_U8, /* 8 / 8 bits */
115-
VIRTIO_SND_PCM_FMT_S16, /* 16 / 16 bits */
116-
VIRTIO_SND_PCM_FMT_U16, /* 16 / 16 bits */
117-
VIRTIO_SND_PCM_FMT_S18_3, /* 18 / 24 bits */
118-
VIRTIO_SND_PCM_FMT_U18_3, /* 18 / 24 bits */
119-
VIRTIO_SND_PCM_FMT_S20_3, /* 20 / 24 bits */
120-
VIRTIO_SND_PCM_FMT_U20_3, /* 20 / 24 bits */
121-
VIRTIO_SND_PCM_FMT_S24_3, /* 24 / 24 bits */
122-
VIRTIO_SND_PCM_FMT_U24_3, /* 24 / 24 bits */
123-
VIRTIO_SND_PCM_FMT_S20, /* 20 / 32 bits */
124-
VIRTIO_SND_PCM_FMT_U20, /* 20 / 32 bits */
125-
VIRTIO_SND_PCM_FMT_S24, /* 24 / 32 bits */
126-
VIRTIO_SND_PCM_FMT_U24, /* 24 / 32 bits */
127-
VIRTIO_SND_PCM_FMT_S32, /* 32 / 32 bits */
128-
VIRTIO_SND_PCM_FMT_U32, /* 32 / 32 bits */
129-
VIRTIO_SND_PCM_FMT_FLOAT, /* 32 / 32 bits */
130-
VIRTIO_SND_PCM_FMT_FLOAT64, /* 64 / 64 bits */
102+
/* analog formats (width / physical width) */
103+
#define _(samp_fmt) VIRTIO_SND_PCM_FMT_##samp_fmt
104+
_(IMA_ADPCM) = 0, /* 4 / 4 bits */
105+
_(MU_LAW), /* 8 / 8 bits */
106+
_(A_LAW), /* 8 / 8 bits */
107+
_(S8), /* 8 / 8 bits */
108+
_(U8), /* 8 / 8 bits */
109+
_(S16), /* 16 / 16 bits */
110+
_(U16), /* 16 / 16 bits */
111+
_(S18_3), /* 18 / 24 bits */
112+
_(U18_3), /* 18 / 24 bits */
113+
_(S20_3), /* 20 / 24 bits */
114+
_(U20_3), /* 20 / 24 bits */
115+
_(S24_3), /* 24 / 24 bits */
116+
_(U24_3), /* 24 / 24 bits */
117+
_(S20), /* 20 / 32 bits */
118+
_(U20), /* 20 / 32 bits */
119+
_(S24), /* 24 / 32 bits */
120+
_(U24), /* 24 / 32 bits */
121+
_(S32), /* 32 / 32 bits */
122+
_(U32), /* 32 / 32 bits */
123+
_(FLOAT), /* 32 / 32 bits */
124+
_(FLOAT64), /* 64 / 64 bits */
131125
/* digital formats (width / physical width) */
132-
VIRTIO_SND_PCM_FMT_DSD_U8, /* 8 / 8 bits */
133-
VIRTIO_SND_PCM_FMT_DSD_U16, /* 16 / 16 bits */
134-
VIRTIO_SND_PCM_FMT_DSD_U32, /* 32 / 32 bits */
135-
VIRTIO_SND_PCM_FMT_IEC958_SUBFRAME, /* 32 / 32 bits */
126+
_(DSD_U8), /* 8 / 8 bits */
127+
_(DSD_U16), /* 16 / 16 bits */
128+
_(DSD_U32), /* 32 / 32 bits */
129+
_(IEC958_SUBFRAME), /* 32 / 32 bits */
130+
#undef _
136131
};
137132

138133
/* standard channel position definition */
139134
enum {
140-
VIRTIO_SND_CHMAP_NONE = 0, /* undefined */
141-
VIRTIO_SND_CHMAP_NA, /* silent */
142-
VIRTIO_SND_CHMAP_MONO, /* mono stream */
143-
VIRTIO_SND_CHMAP_FL, /* front left */
144-
VIRTIO_SND_CHMAP_FR, /* front right */
145-
VIRTIO_SND_CHMAP_RL, /* rear left */
146-
VIRTIO_SND_CHMAP_RR, /* rear right */
147-
VIRTIO_SND_CHMAP_FC, /* front center */
148-
VIRTIO_SND_CHMAP_LFE, /* low frequency (LFE) */
149-
VIRTIO_SND_CHMAP_SL, /* side left */
150-
VIRTIO_SND_CHMAP_SR, /* side right */
151-
VIRTIO_SND_CHMAP_RC, /* rear center */
152-
VIRTIO_SND_CHMAP_FLC, /* front left center */
153-
VIRTIO_SND_CHMAP_FRC, /* front right center */
154-
VIRTIO_SND_CHMAP_RLC, /* rear left center */
155-
VIRTIO_SND_CHMAP_RRC, /* rear right center */
156-
VIRTIO_SND_CHMAP_FLW, /* front left wide */
157-
VIRTIO_SND_CHMAP_FRW, /* front right wide */
158-
VIRTIO_SND_CHMAP_FLH, /* front left high */
159-
VIRTIO_SND_CHMAP_FCH, /* front center high */
160-
VIRTIO_SND_CHMAP_FRH, /* front right high */
161-
VIRTIO_SND_CHMAP_TC, /* top center */
162-
VIRTIO_SND_CHMAP_TFL, /* top front left */
163-
VIRTIO_SND_CHMAP_TFR, /* top front right */
164-
VIRTIO_SND_CHMAP_TFC, /* top front center */
165-
VIRTIO_SND_CHMAP_TRL, /* top rear left */
166-
VIRTIO_SND_CHMAP_TRR, /* top rear right */
167-
VIRTIO_SND_CHMAP_TRC, /* top rear center */
168-
VIRTIO_SND_CHMAP_TFLC, /* top front left center */
169-
VIRTIO_SND_CHMAP_TFRC, /* top front right center */
170-
VIRTIO_SND_CHMAP_TSL, /* top side left */
171-
VIRTIO_SND_CHMAP_TSR, /* top side right */
172-
VIRTIO_SND_CHMAP_LLFE, /* left LFE */
173-
VIRTIO_SND_CHMAP_RLFE, /* right LFE */
174-
VIRTIO_SND_CHMAP_BC, /* bottom center */
175-
VIRTIO_SND_CHMAP_BLC, /* bottom left center */
176-
VIRTIO_SND_CHMAP_BRC, /* bottom right center */
135+
#define _(chmap_pos) VIRTIO_SND_CHMAP_##chmap_pos
136+
_(NONE) = 0, /* undefined */
137+
_(NA), /* silent */
138+
_(MONO), /* mono stream */
139+
_(FL), /* front left */
140+
_(FR), /* front right */
141+
_(RL), /* rear left */
142+
_(RR), /* rear right */
143+
_(FC), /* front center */
144+
_(LFE), /* low frequency (LFE) */
145+
_(SL), /* side left */
146+
_(SR), /* side right */
147+
_(RC), /* rear center */
148+
_(FLC), /* front left center */
149+
_(FRC), /* front right center */
150+
_(RLC), /* rear left center */
151+
_(RRC), /* rear right center */
152+
_(FLW), /* front left wide */
153+
_(FRW), /* front right wide */
154+
_(FLH), /* front left high */
155+
_(FCH), /* front center high */
156+
_(FRH), /* front right high */
157+
_(TC), /* top center */
158+
_(TFL), /* top front left */
159+
_(TFR), /* top front right */
160+
_(TFC), /* top front center */
161+
_(TRL), /* top rear left */
162+
_(TRR), /* top rear right */
163+
_(TRC), /* top rear center */
164+
_(TFLC), /* top front left center */
165+
_(TFRC), /* top front right center */
166+
_(TSL), /* top side left */
167+
_(TSR), /* top side right */
168+
_(LLFE), /* left LFE */
169+
_(RLFE), /* right LFE */
170+
_(BC), /* bottom center */
171+
_(BLC), /* bottom left center */
172+
_(BRC), /* bottom right center */
173+
#undef _
177174
};
178175

179176
/* audio data flow direction */
@@ -265,7 +262,7 @@ typedef struct {
265262
/* Adapted from DPDK ring buffer. */
266263
/* https://github.com/scylladb/dpdk/blob/master/lib/librte_ring/rte_ring.h#L147
267264
*/
268-
#define VSND_RING_SZ_MASK (uint32_t)(0x0fffffff) /* ring size mask */
265+
#define VSND_RING_SZ_MASK 0x0FFFFFFFULL /* ring size mask */
269266
typedef struct {
270267
void *buffer;
271268
struct prod {
@@ -578,7 +575,7 @@ static void virtio_snd_read_pcm_release(const virtio_snd_pcm_hdr_t *query,
578575
double omega = 0.0;
579576
int totalframesp = 0;
580577
int totalframesr = 0;
581-
static void __virtio_snd_frame_dequeue(void **out,
578+
static void __virtio_snd_frame_dequeue(void *out,
582579
uint32_t n,
583580
uint32_t stream_id)
584581
{
@@ -605,10 +602,10 @@ static void __virtio_snd_frame_dequeue(void **out,
605602
uint32_t size = props->pp.buffer_bytes;
606603
uint32_t idx = cons_head & mask;
607604
if (idx + n < size) {
608-
memcpy(*out, props->ring.buffer + idx, n);
605+
memcpy(out, props->ring.buffer + idx, n);
609606
} else {
610-
memcpy(*out, props->ring.buffer + idx, size - idx);
611-
memcpy(*out + (size - idx), props->ring.buffer, n - (size - idx));
607+
memcpy(out, props->ring.buffer + idx, size - idx);
608+
memcpy(out + (size - idx), props->ring.buffer, n - (size - idx));
612609
}
613610
asm("" ::: "memory");
614611

@@ -635,18 +632,18 @@ static void virtio_snd_cb(struct CNFADriver *dev,
635632
totalframesr += framesr;
636633
totalframesp += framesp;
637634

638-
fprintf(stderr, "start to play\n");
639635
int channels = dev->channelsPlay;
640636
uint32_t id = v_ptr->stream_id;
641637
uint32_t out_buf_sz = framesp * channels;
638+
fprintf(stderr, "start to play with out_buf_sz %" PRIu32 "\n", out_buf_sz);
642639

643640
/*if (!(playing)) {
644641
memset(out, 0, sizeof(short) * out_buf_sz);
645642
return;
646643
}*/
647644

648645
/* TODO: add single consumer */
649-
__virtio_snd_frame_dequeue((void **) &out, out_buf_sz, id);
646+
__virtio_snd_frame_dequeue(out, out_buf_sz, id);
650647
#if 0
651648
for (int i = 0; i < framesp; i++) {
652649
// Shift phase, so we run at 440 Hz (A4)
@@ -772,9 +769,9 @@ static void __virtio_snd_frame_enqueue(void *payload,
772769
* prod_head > cons_tail). So 'free_entries' is always between 0
773770
* and size(ring)-1. */
774771
free_entries = mask + cons_tail - prod_head;
775-
fprintf(stderr,
772+
/*fprintf(stderr,
776773
"mask %" PRIu32 " cons_tail %" PRIu32 " prod_head %" PRIu32 "\n",
777-
mask, cons_tail, prod_head);
774+
mask, cons_tail, prod_head);*/
778775

779776
/* Move prod_head. */
780777
if (n > free_entries)

0 commit comments

Comments
 (0)