summaryrefslogtreecommitdiffstats
path: root/mpvcore/mplayer.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-09-20 13:48:36 +0200
committerwm4 <wm4@nowhere>2013-09-20 13:48:36 +0200
commit3e5b632559a9198c0ede739622529d8df7909ca7 (patch)
tree0b66c871c6b670313da1dcedb9582db2a856cf51 /mpvcore/mplayer.c
parented2d67b6d7585a5db5411f230fc8dcd27f9e85fc (diff)
parent542086dd4537b852b61974f9bee4eabebde8505f (diff)
downloadmpv-3e5b632559a9198c0ede739622529d8df7909ca7.tar.bz2
mpv-3e5b632559a9198c0ede739622529d8df7909ca7.tar.xz
Merge branch 'volume_restore'
Diffstat (limited to 'mpvcore/mplayer.c')
-rw-r--r--mpvcore/mplayer.c50
1 files changed, 9 insertions, 41 deletions
diff --git a/mpvcore/mplayer.c b/mpvcore/mplayer.c
index e4566c56ff..f4bf6c9316 100644
--- a/mpvcore/mplayer.c
+++ b/mpvcore/mplayer.c
@@ -443,18 +443,16 @@ static void uninit_subs(struct demuxer *demuxer)
void uninit_player(struct MPContext *mpctx, unsigned int mask)
{
- struct MPOpts *opts = mpctx->opts;
-
mask &= mpctx->initialized_flags;
mp_msg(MSGT_CPLAYER, MSGL_DBG2, "\n*** uninit(0x%X)\n", mask);
if (mask & INITIALIZED_ACODEC) {
mpctx->initialized_flags &= ~INITIALIZED_ACODEC;
+ mixer_uninit_audio(mpctx->mixer);
if (mpctx->sh_audio)
uninit_audio(mpctx->sh_audio);
cleanup_demux_stream(mpctx, STREAM_AUDIO);
- mpctx->mixer.afilter = NULL;
}
if (mask & INITIALIZED_SUB) {
@@ -526,24 +524,8 @@ void uninit_player(struct MPContext *mpctx, unsigned int mask)
getch2_disable();
}
- if (mask & INITIALIZED_VOL) {
- mpctx->initialized_flags &= ~INITIALIZED_VOL;
- if (mpctx->mixer.ao) {
- // Normally the mixer remembers volume, but do it even if the
- // volume is set explicitly with --volume=... (so that the same
- // volume is restored on reinit)
- if (opts->mixer_init_volume >= 0 && mpctx->mixer.user_set_volume)
- mixer_getbothvolume(&mpctx->mixer, &opts->mixer_init_volume);
- if (opts->mixer_init_mute >= 0 && mpctx->mixer.user_set_mute)
- opts->mixer_init_mute = mixer_getmute(&mpctx->mixer);
- }
- }
-
if (mask & INITIALIZED_AO) {
mpctx->initialized_flags &= ~INITIALIZED_AO;
- if (mpctx->mixer.ao)
- mixer_uninit(&mpctx->mixer);
- mpctx->mixer.ao = NULL;
if (mpctx->ao)
ao_uninit(mpctx->ao, mpctx->stop_play != AT_END_OF_FILE);
mpctx->ao = NULL;
@@ -827,8 +809,7 @@ static const char *backup_properties[] = {
"speed",
"edition",
"pause",
- //"volume",
- //"mute",
+ "volume-restore-data",
"audio-delay",
//"balance",
"fullscreen",
@@ -1618,7 +1599,6 @@ static int build_afilter_chain(struct MPContext *mpctx)
static int recreate_audio_filters(struct MPContext *mpctx)
{
- struct MPOpts *opts = mpctx->opts;
assert(mpctx->sh_audio);
// init audio filters:
@@ -1628,20 +1608,7 @@ static int recreate_audio_filters(struct MPContext *mpctx)
return -1;
}
- mpctx->mixer.afilter = mpctx->sh_audio->afilter;
- mpctx->mixer.volstep = opts->volstep;
- mpctx->mixer.softvol = opts->softvol;
- mpctx->mixer.softvol_max = opts->softvol_max;
- mixer_reinit(&mpctx->mixer, mpctx->ao);
- if (!(mpctx->initialized_flags & INITIALIZED_VOL)) {
- if (opts->mixer_init_volume >= 0) {
- mixer_setvolume(&mpctx->mixer, opts->mixer_init_volume,
- opts->mixer_init_volume);
- }
- if (opts->mixer_init_mute >= 0)
- mixer_setmute(&mpctx->mixer, opts->mixer_init_mute);
- mpctx->initialized_flags |= INITIALIZED_VOL;
- }
+ mixer_reinit_audio(mpctx->mixer, mpctx->ao, mpctx->sh_audio->afilter);
return 0;
}
@@ -1666,7 +1633,7 @@ void reinit_audio_chain(struct MPContext *mpctx)
struct MPOpts *opts = mpctx->opts;
init_demux_stream(mpctx, STREAM_AUDIO);
if (!mpctx->sh_audio) {
- uninit_player(mpctx, INITIALIZED_VOL | INITIALIZED_AO);
+ uninit_player(mpctx, INITIALIZED_AO);
goto no_audio;
}
@@ -1737,7 +1704,7 @@ void reinit_audio_chain(struct MPContext *mpctx)
return;
init_error:
- uninit_player(mpctx, INITIALIZED_ACODEC | INITIALIZED_AO | INITIALIZED_VOL);
+ uninit_player(mpctx, INITIALIZED_ACODEC | INITIALIZED_AO);
cleanup_demux_stream(mpctx, STREAM_AUDIO);
no_audio:
mpctx->current_track[STREAM_AUDIO] = NULL;
@@ -2044,7 +2011,7 @@ void mp_switch_track(struct MPContext *mpctx, enum stream_type type,
uninit_player(mpctx, INITIALIZED_VCODEC |
(mpctx->opts->fixed_vo && track ? 0 : INITIALIZED_VO));
} else if (type == STREAM_AUDIO) {
- uninit_player(mpctx, INITIALIZED_AO | INITIALIZED_ACODEC | INITIALIZED_VOL);
+ uninit_player(mpctx, INITIALIZED_AO | INITIALIZED_ACODEC);
} else if (type == STREAM_SUB) {
uninit_player(mpctx, INITIALIZED_SUB);
}
@@ -2284,7 +2251,7 @@ static int fill_audio_out_buffers(struct MPContext *mpctx, double endpts)
* while displaying video, then doing the output format switch.
*/
if (!mpctx->opts->gapless_audio)
- uninit_player(mpctx, INITIALIZED_AO | INITIALIZED_VOL);
+ uninit_player(mpctx, INITIALIZED_AO);
reinit_audio_chain(mpctx);
return -1;
} else if (res == ASYNC_PLAY_DONE)
@@ -2913,7 +2880,7 @@ static bool timeline_set_part(struct MPContext *mpctx, int i, bool force)
enum stop_play_reason orig_stop_play = mpctx->stop_play;
if (!mpctx->sh_video && mpctx->stop_play == KEEP_PLAYING)
mpctx->stop_play = AT_END_OF_FILE; // let audio uninit drain data
- uninit_player(mpctx, INITIALIZED_VCODEC | (mpctx->opts->fixed_vo ? 0 : INITIALIZED_VO) | (mpctx->opts->gapless_audio ? 0 : INITIALIZED_AO) | INITIALIZED_VOL | INITIALIZED_ACODEC | INITIALIZED_SUB);
+ uninit_player(mpctx, INITIALIZED_VCODEC | (mpctx->opts->fixed_vo ? 0 : INITIALIZED_VO) | (mpctx->opts->gapless_audio ? 0 : INITIALIZED_AO) | INITIALIZED_ACODEC | INITIALIZED_SUB);
mpctx->stop_play = orig_stop_play;
mpctx->demuxer = n->source;
@@ -4859,6 +4826,7 @@ static int mpv_main(int argc, char *argv[])
init_libav();
GetCpuCaps(&gCpuCaps);
screenshot_init(mpctx);
+ mpctx->mixer = mixer_init(mpctx, opts);
// Preparse the command line
m_config_preparse_command_line(mpctx->mconfig, argc, argv);