From 8dc978b5828752425faab5a2a7d36e6893f170db Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Thu, 8 Mar 2018 19:24:00 +0900 Subject: [PATCH] [0.6.101] Add new functions to use replaygain volume Change-Id: Ie2854babd3ce8e07a4903939c8f644f71ae54eb3 --- packaging/libmm-player.spec | 2 +- src/include/mm_player.h | 5 +++ src/include/mm_player_priv.h | 4 +++ src/mm_player.c | 31 +++++++++++++++++ src/mm_player_priv.c | 79 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 120 insertions(+), 1 deletion(-) diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index b00325a..2da992b 100644 --- a/packaging/libmm-player.spec +++ b/packaging/libmm-player.spec @@ -1,6 +1,6 @@ Name: libmm-player Summary: Multimedia Framework Player Library -Version: 0.6.100 +Version: 0.6.101 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/include/mm_player.h b/src/include/mm_player.h index 7638534..3735e1b 100644 --- a/src/include/mm_player.h +++ b/src/include/mm_player.h @@ -2155,6 +2155,11 @@ int mm_player_360_get_field_of_view(MMHandleType player, int *horizontal_degrees int mm_player_set_codec_type(MMHandleType player, MMPlayerStreamType stream_type, MMPlayerVideoCodecType codec_type); /** + * These functions are to apply the replaygain + */ +int mm_player_set_replaygain_enabled(MMHandleType player, bool enabled); +int mm_player_is_replaygain_enabled(MMHandleType player, bool *enabled); +/** @} */ diff --git a/src/include/mm_player_priv.h b/src/include/mm_player_priv.h index 7e7a64e..c602cbb 100644 --- a/src/include/mm_player_priv.h +++ b/src/include/mm_player_priv.h @@ -233,6 +233,7 @@ enum AudioElementID { MMPLAYER_A_SINK, MMPLAYER_A_RESAMPLER, MMPLAYER_A_DEINTERLEAVE, + MMPLAYER_A_RGVOL, MMPLAYER_A_NUM }; @@ -404,6 +405,7 @@ typedef struct { int mute; int bluetooth; /* enable/disable */ int focus_id; + bool rg_enable; } MMPlayerSoundInfo; typedef struct { @@ -976,6 +978,8 @@ int _mmplayer_get_audio_only(MMHandleType hplayer, bool *paudio_only); int _mmplayer_set_streaming_buffering_time(MMHandleType hplayer, int buffer_ms, int rebuffer_ms); int _mmplayer_get_streaming_buffering_time(MMHandleType hplayer, int *buffer_ms, int *rebuffer_ms); int _mmplayer_set_codec_type(MMHandleType hplayer, MMPlayerStreamType stream_type, MMPlayerVideoCodecType codec_type); +int _mmplayer_set_replaygain_enabled(MMHandleType hplayer, bool enabled); +int _mmplayer_is_replaygain_enabled(MMHandleType hplayer, bool *enabled); #ifdef __cplusplus } diff --git a/src/mm_player.c b/src/mm_player.c index beb2564..311e4a3 100644 --- a/src/mm_player.c +++ b/src/mm_player.c @@ -1464,3 +1464,34 @@ int mm_player_set_codec_type(MMHandleType player, MMPlayerStreamType stream_type return result; } + +int mm_player_set_replaygain_enabled(MMHandleType player, bool enabled) +{ + int result = MM_ERROR_NONE; + + MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + + MMPLAYER_CMD_LOCK(player); + + result = _mmplayer_set_replaygain_enabled(player, enabled); + + MMPLAYER_CMD_UNLOCK(player); + + return result; +} + +int mm_player_is_replaygain_enabled(MMHandleType player, bool *enabled) +{ + int result = MM_ERROR_NONE; + + MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + MMPLAYER_RETURN_VAL_IF_FAIL(enabled, MM_ERROR_INVALID_ARGUMENT); + + MMPLAYER_CMD_LOCK(player); + + result = _mmplayer_is_replaygain_enabled(player, enabled); + + MMPLAYER_CMD_UNLOCK(player); + + return result; +} diff --git a/src/mm_player_priv.c b/src/mm_player_priv.c index 0456581..f850611 100755 --- a/src/mm_player_priv.c +++ b/src/mm_player_priv.c @@ -4590,6 +4590,13 @@ __mmplayer_gst_create_audio_pipeline(mm_player_t* player) /* converter */ MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_CONV, "audioconvert", "audio converter", TRUE, player); + /* replaygain volume */ + MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_RGVOL, "rgvolume", "audio rgvolume", TRUE, player); + if (player->sound.rg_enable) + g_object_set(G_OBJECT(audiobin[MMPLAYER_A_RGVOL].gst), "enable-rgvolume", TRUE, NULL); + else + g_object_set(G_OBJECT(audiobin[MMPLAYER_A_RGVOL].gst), "enable-rgvolume", FALSE, NULL); + /* resampler */ MMPLAYER_CREATE_ELEMENT(audiobin, MMPLAYER_A_RESAMPLER, player->ini.audioresampler_element, "audio resampler", TRUE, player); @@ -8419,6 +8426,7 @@ _mmplayer_create_player(MMHandleType handle) /* give default value of audio effect setting */ player->sound.volume = MM_VOLUME_FACTOR_DEFAULT; + player->sound.rg_enable = false; player->playback_rate = DEFAULT_PLAYBACK_RATE; player->play_subtitle = FALSE; @@ -11686,6 +11694,8 @@ __mmplayer_release_misc(mm_player_t* player) player->video360_horizontal_fov = 0; player->video360_vertical_fov = 0; + player->sound.rg_enable = false; + MMPLAYER_FLEAVE(); } @@ -13997,3 +14007,72 @@ int _mmplayer_set_codec_type(MMHandleType hplayer, MMPlayerStreamType stream_typ MMPLAYER_FLEAVE(); return MM_ERROR_NONE; } + +int +_mmplayer_set_replaygain_enabled(MMHandleType hplayer, bool enabled) +{ + mm_player_t* player = (mm_player_t*) hplayer; + GstElement* rg_vol_element = NULL; + + MMPLAYER_FENTER(); + + MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + + player->sound.rg_enable = enabled; + + /* just hold rgvolume enable value if pipeline is not ready */ + if (!player->pipeline || !player->pipeline->audiobin) { + LOGD("pipeline is not ready. holding rgvolume enable value\n"); + return MM_ERROR_NONE; + } + + rg_vol_element = player->pipeline->audiobin[MMPLAYER_A_RGVOL].gst; + + if (!rg_vol_element) { + LOGD("rgvolume element is not created"); + return MM_ERROR_PLAYER_INTERNAL; + } + + if (enabled) + g_object_set(rg_vol_element, "enable-rgvolume", TRUE, NULL); + else + g_object_set(rg_vol_element, "enable-rgvolume", FALSE, NULL); + + MMPLAYER_FLEAVE(); + + return MM_ERROR_NONE; +} + +int +_mmplayer_is_replaygain_enabled(MMHandleType hplayer, bool *enabled) +{ + mm_player_t* player = (mm_player_t*) hplayer; + GstElement* rg_vol_element = NULL; + gboolean enable = FALSE; + + MMPLAYER_FENTER(); + + MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + MMPLAYER_RETURN_VAL_IF_FAIL(enabled, MM_ERROR_INVALID_ARGUMENT); + + /* just hold enable_rg value if pipeline is not ready */ + if (!player->pipeline || !player->pipeline->audiobin) { + LOGD("pipeline is not ready. holding rgvolume value (%d)\n", player->sound.rg_enable); + *enabled = player->sound.rg_enable; + return MM_ERROR_NONE; + } + + rg_vol_element = player->pipeline->audiobin[MMPLAYER_A_RGVOL].gst; + + if (!rg_vol_element) { + LOGD("rgvolume element is not created"); + return MM_ERROR_PLAYER_INTERNAL; + } + + g_object_get(rg_vol_element, "enable-rgvolume", &enable, NULL); + *enabled = enable; + + MMPLAYER_FLEAVE(); + + return MM_ERROR_NONE; +} -- 2.7.4