emotion/libvlc: fix video/audio/spu mute

This commit is contained in:
Thomas Guillem 2016-03-25 09:05:34 +01:00 committed by Jean-Philippe Andre
parent f04903119c
commit 941ccc4324
1 changed files with 27 additions and 22 deletions

View File

@ -69,6 +69,7 @@ struct _Emotion_LibVLC
/* options */
int video_mute;
int audio_mute;
int spu_mute;
int audio_vol;
Emotion_Vis vis;
@ -701,7 +702,6 @@ em_add(const Emotion_Engine *api EINA_UNUSED,
eina_lock_new(&ev->lock);
eina_condition_new(&ev->wait, &ev->lock);
ev->ref_count = 1;
ev->audio_mute = -1;
ev->audio_vol = -1;
return ev;
@ -752,12 +752,15 @@ em_file_open(void *video,
ev->m = libvlc_media_new_path(libvlc, file);
EINA_SAFETY_ON_NULL_GOTO(ev->m, error);
if (ev->opt.no_audio)
if (ev->opt.no_audio || ev->audio_mute)
libvlc_media_add_option(ev->m, ":no-audio");
if (ev->opt.no_video)
if (ev->opt.no_video || ev->video_mute)
libvlc_media_add_option(ev->m, ":no-video");
if (ev->spu_mute)
libvlc_media_add_option(ev->m, ":no-spu");
/* Create libvlc_media_player */
ev->mp = libvlc_media_player_new_from_media(ev->m);
EINA_SAFETY_ON_NULL_GOTO(ev->mp, error);
@ -770,16 +773,11 @@ em_file_open(void *video,
libvlc_position_disable, 0);
/* Set sink callbacks */
if (!ev->opt.no_video)
{
libvlc_video_set_format_callbacks(ev->mp, libvlc_video_on_format, NULL);
libvlc_video_set_callbacks(ev->mp, libvlc_video_on_lock,
libvlc_video_on_unlock,
libvlc_video_on_display, ev);
}
libvlc_video_set_format_callbacks(ev->mp, libvlc_video_on_format, NULL);
libvlc_video_set_callbacks(ev->mp, libvlc_video_on_lock,
libvlc_video_on_unlock,
libvlc_video_on_display, ev);
if (ev->audio_mute != -1)
libvlc_audio_set_mute(ev->mp, 1);
if (ev->audio_vol != -1)
libvlc_audio_set_volume(ev->mp, ev->audio_vol);
@ -1268,6 +1266,9 @@ em_video_channel_mute_set(void *video,
Emotion_LibVLC *ev = video;
ev->video_mute = mute;
if (libvlc_mp_is_ready(ev))
em_video_channel_set(video, mute ? -1 : 0);
}
static int
@ -1351,9 +1352,8 @@ em_audio_channel_mute_set(void *video,
ev->audio_mute = mute;
if (!libvlc_mp_is_ready(ev)) return;
libvlc_audio_set_mute(ev->mp, mute);
if (libvlc_mp_is_ready(ev))
em_audio_channel_set(video, mute ? -1 : 0);
}
static int
@ -1361,10 +1361,7 @@ em_audio_channel_mute_get(void *video)
{
Emotion_LibVLC *ev = video;
if (!libvlc_mp_is_ready(ev))
return ev->audio_mute;
return libvlc_audio_get_mute(ev->mp);
return ev->audio_mute;
}
static void
@ -1454,14 +1451,22 @@ em_spu_channel_name_get(void *video,
}
static void
em_spu_channel_mute_set(void *video EINA_UNUSED, int mute EINA_UNUSED)
em_spu_channel_mute_set(void *video, int mute)
{
Emotion_LibVLC *ev = video;
ev->spu_mute = mute;
if (libvlc_mp_is_ready(ev))
em_spu_channel_set(video, mute ? -1 : 0);
}
static int
em_spu_channel_mute_get(void *video EINA_UNUSED)
em_spu_channel_mute_get(void *video)
{
return 0;
Emotion_LibVLC *ev = video;
return ev->spu_mute;
}
static int