diff --git a/arch/sim/src/sim/posix/sim_alsa.c b/arch/sim/src/sim/posix/sim_alsa.c index 71b67ea3133..6b088fef6bc 100644 --- a/arch/sim/src/sim/posix/sim_alsa.c +++ b/arch/sim/src/sim/posix/sim_alsa.c @@ -82,6 +82,7 @@ struct sim_audio_s sq_entry_t link; bool playback; + bool offload; uint32_t frame_size; uint32_t nbuffers; uint32_t buffer_size; @@ -396,8 +397,14 @@ static int sim_audio_getcaps(struct audio_lowerhalf_s *dev, int type, AUDIO_TYPE_INPUT) | AUDIO_TYPE_FEATURE | AUDIO_TYPE_PROCESSING; - caps->ac_format.hw = (1 << (AUDIO_FMT_PCM - 1)) | - (1 << (AUDIO_FMT_MP3 - 1)); + if (priv->offload) + { + caps->ac_format.hw = (1 << (AUDIO_FMT_MP3 - 1)); + } + else + { + caps->ac_format.hw = (1 << (AUDIO_FMT_PCM - 1)); + } break; case AUDIO_FMT_MP3: caps->ac_controls.b[0] = AUDIO_SUBFMT_PCM_MP3; @@ -1014,7 +1021,7 @@ void sim_audio_loop(void) } } -struct audio_lowerhalf_s *sim_audio_initialize(bool playback) +struct audio_lowerhalf_s *sim_audio_initialize(bool playback, bool offload) { struct sim_audio_s *priv; int ret; @@ -1026,6 +1033,7 @@ struct audio_lowerhalf_s *sim_audio_initialize(bool playback) } priv->playback = playback; + priv->offload = offload; priv->dev.ops = &g_sim_audio_ops; ret = sim_mixer_open(priv); diff --git a/arch/sim/src/sim/sim_initialize.c b/arch/sim/src/sim/sim_initialize.c index 5b6a267ff46..ade385e3e8c 100644 --- a/arch/sim/src/sim/sim_initialize.c +++ b/arch/sim/src/sim/sim_initialize.c @@ -282,8 +282,15 @@ void up_initialize(void) #endif #ifdef CONFIG_SIM_SOUND - audio_register("pcm0p", sim_audio_initialize(true)); - audio_register("pcm0c", sim_audio_initialize(false)); + /* Register audio normal device */ + + audio_register("pcm0p", sim_audio_initialize(true, false)); + audio_register("pcm0c", sim_audio_initialize(false, false)); + + /* Register audio compress device */ + + audio_register("pcm1p", sim_audio_initialize(true, true)); + audio_register("pcm1c", sim_audio_initialize(false, true)); #endif kthread_create("loop_task", SCHED_PRIORITY_MAX, diff --git a/arch/sim/src/sim/sim_internal.h b/arch/sim/src/sim/sim_internal.h index db383871733..13d7ec07a48 100644 --- a/arch/sim/src/sim/sim_internal.h +++ b/arch/sim/src/sim/sim_internal.h @@ -354,7 +354,7 @@ int sim_bthcisock_loop(void); /* sim_audio.c **************************************************************/ #ifdef CONFIG_SIM_SOUND -struct audio_lowerhalf_s *sim_audio_initialize(bool playback); +struct audio_lowerhalf_s *sim_audio_initialize(bool playback, bool offload); void sim_audio_loop(void); #endif