@@ -81,6 +81,24 @@ enum {
8181 VIRTIO_SND_PCM_RATE_384000 , /* 384000 Hz */
8282};
8383
84+ /* supported PCM frames rates mapping */
85+ 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 ,
100+ };
101+
84102/* supported PCM stream features */
85103enum {
86104 VIRTIO_SND_PCM_F_SHMEM_HOST = 0 ,
@@ -449,10 +467,10 @@ static void virtio_snd_read_pcm_prepare(const virtio_snd_pcm_hdr_t *query,
449467 // pthread_mutex_unlock(&virtio_snd_mutex);
450468 vsnd_props [stream_id ].pp .hdr .hdr .code = VIRTIO_SND_R_PCM_PREPARE ;
451469 uint32_t buffer_bytes = vsnd_props [stream_id ].pp .buffer_bytes ;
452- vsnd_props [stream_id ].audio_host =
453- CNFAInit ( NULL , "semu-virtio-snd" , virtio_snd_cb , 44100 , 0 , 1 , 0 ,
454- buffer_bytes , NULL , NULL , & v );
455- vsnd_props [stream_id ].buffer = (void * )malloc (sizeof (void ) * buffer_bytes );
470+ vsnd_props [stream_id ].audio_host = CNFAInit (
471+ NULL , "semu-virtio-snd" , virtio_snd_cb , vsnd_props [ stream_id ]. pp . rate ,
472+ 0 , 1 , 0 , buffer_bytes , NULL , NULL , & v );
473+ vsnd_props [stream_id ].buffer = (void * ) malloc (sizeof (void ) * buffer_bytes );
456474
457475 * plen = 0 ;
458476 fprintf (stderr , "virtio_snd_read_pcm_prepare\n" );
0 commit comments