diff options
author | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-11-19 23:16:15 +0000 |
---|---|---|
committer | nicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-11-19 23:16:15 +0000 |
commit | a1fc33994e91c4690c1bfefc7e1548a6d9de6283 (patch) | |
tree | 03a00b8721f6bd63999be42189cf9983c4b5d342 /mplayer.c | |
parent | f12bae62c086e565ba72f534495a55f75159ee6d (diff) | |
download | mpv-a1fc33994e91c4690c1bfefc7e1548a6d9de6283.tar.bz2 mpv-a1fc33994e91c4690c1bfefc7e1548a6d9de6283.tar.xz |
in mp_property_{video,audio} permit uniniting of the corresponding chain
by setting *arg to -2
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21084 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r-- | mplayer.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -1797,14 +1797,14 @@ static int mp_property_channels(m_option_t* prop,int action,void* arg) { static int mp_property_audio(m_option_t* prop,int action,void* arg) { int current_id = -1, tmp; - if(!sh_audio) return M_PROPERTY_UNAVAILABLE; - switch(action) { case M_PROPERTY_GET: + if(!sh_audio) return M_PROPERTY_UNAVAILABLE; if(!arg) return M_PROPERTY_ERROR; *(int*)arg = audio_id; return M_PROPERTY_OK; case M_PROPERTY_PRINT: + if(!sh_audio) return M_PROPERTY_UNAVAILABLE; if(!arg) return M_PROPERTY_ERROR; if (audio_id < 0) @@ -1836,9 +1836,10 @@ static int mp_property_audio(m_option_t* prop,int action,void* arg) { tmp = -1; current_id = demuxer->audio->id; audio_id = demuxer_switch_audio(demuxer, tmp); + if(audio_id == -2 || (audio_id > -1 && demuxer->audio->id != current_id && current_id != -2)) + uninit_player(INITED_AO | INITED_ACODEC); if(audio_id > -1 && demuxer->audio->id != current_id) { sh_audio_t *sh2; - uninit_player(INITED_AO | INITED_ACODEC); sh2 = demuxer->a_streams[demuxer->audio->id]; if(sh2) { sh2->ds = demuxer->audio; @@ -1859,14 +1860,14 @@ static int reinit_video_chain(void); static int mp_property_video(m_option_t* prop,int action,void* arg) { int current_id = -1, tmp; - if(!sh_video) return M_PROPERTY_UNAVAILABLE; - switch(action) { case M_PROPERTY_GET: + if(!sh_video) return M_PROPERTY_UNAVAILABLE; if(!arg) return M_PROPERTY_ERROR; *(int*)arg = video_id; return M_PROPERTY_OK; case M_PROPERTY_PRINT: + if(!sh_video) return M_PROPERTY_UNAVAILABLE; if(!arg) return M_PROPERTY_ERROR; if (video_id < 0) @@ -1886,9 +1887,10 @@ static int mp_property_video(m_option_t* prop,int action,void* arg) { else tmp = -1; video_id = demuxer_switch_video(demuxer, tmp); + if(video_id == -2 || (video_id > -1 && demuxer->video->id != current_id && current_id != -2)) + uninit_player(INITED_VCODEC | (fixed_vo && video_id != -2 ? 0 : INITED_VO)); if(video_id > -1 && demuxer->video->id != current_id) { sh_video_t *sh2; - uninit_player(INITED_VCODEC | (fixed_vo ? 0 : INITED_VO)); sh2 = demuxer->v_streams[demuxer->video->id]; if(sh2) { sh2->ds = demuxer->video; |