diff options
-rw-r--r-- | audio/mixer.c | 5 | ||||
-rw-r--r-- | audio/mixer.h | 1 | ||||
-rw-r--r-- | mpvcore/command.c | 6 |
3 files changed, 12 insertions, 0 deletions
diff --git a/audio/mixer.c b/audio/mixer.c index 07ce229f73..f3e9d959aa 100644 --- a/audio/mixer.c +++ b/audio/mixer.c @@ -59,6 +59,11 @@ struct mixer *mixer_init(void *talloc_ctx, struct MPOpts *opts) return mixer; } +bool mixer_audio_initialized(struct mixer *mixer) +{ + return !!mixer->ao; +} + static void checkvolume(struct mixer *mixer) { if (!mixer->ao) diff --git a/audio/mixer.h b/audio/mixer.h index 9fbb4bcdca..e2e574c22e 100644 --- a/audio/mixer.h +++ b/audio/mixer.h @@ -36,6 +36,7 @@ struct mixer; struct mixer *mixer_init(void *talloc_ctx, struct MPOpts *opts); void mixer_reinit_audio(struct mixer *mixer, struct ao *ao, struct af_stream *af); void mixer_uninit_audio(struct mixer *mixer); +bool mixer_audio_initialized(struct mixer *mixer); void mixer_getvolume(struct mixer *mixer, float *l, float *r); void mixer_setvolume(struct mixer *mixer, float l, float r); void mixer_incvolume(struct mixer *mixer); diff --git a/mpvcore/command.c b/mpvcore/command.c index f16d171bf4..c9eb21dd0b 100644 --- a/mpvcore/command.c +++ b/mpvcore/command.c @@ -768,9 +768,13 @@ static int mp_property_volume(m_option_t *prop, int action, void *arg, mixer_getbothvolume(mpctx->mixer, arg); return M_PROPERTY_OK; case M_PROPERTY_SET: + if (!mixer_audio_initialized(mpctx->mixer)) + return M_PROPERTY_ERROR; mixer_setvolume(mpctx->mixer, *(float *) arg, *(float *) arg); return M_PROPERTY_OK; case M_PROPERTY_SWITCH: { + if (!mixer_audio_initialized(mpctx->mixer)) + return M_PROPERTY_ERROR; struct m_property_switch_arg *sarg = arg; if (sarg->inc <= 0) mixer_decvolume(mpctx->mixer); @@ -788,6 +792,8 @@ static int mp_property_mute(m_option_t *prop, int action, void *arg, { switch (action) { case M_PROPERTY_SET: + if (!mixer_audio_initialized(mpctx->mixer)) + return M_PROPERTY_ERROR; mixer_setmute(mpctx->mixer, *(int *) arg); return M_PROPERTY_OK; case M_PROPERTY_GET: |