[0.6.101] Add new functions to use replaygain volume 84/171984/8 accepted/tizen/unified/20180409.060402 submit/tizen/20180406.011125
authorGilbok Lee <gilbok.lee@samsung.com>
Thu, 8 Mar 2018 10:24:00 +0000 (19:24 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Thu, 5 Apr 2018 05:18:16 +0000 (14:18 +0900)
Change-Id: Ie2854babd3ce8e07a4903939c8f644f71ae54eb3

packaging/libmm-player.spec
src/include/mm_player.h
src/include/mm_player_priv.h
src/mm_player.c
src/mm_player_priv.c

index b00325a..2da992b 100644 (file)
@@ -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
index 7638534..3735e1b 100644 (file)
@@ -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);
+/**
        @}
  */
 
index 7e7a64e..c602cbb 100644 (file)
@@ -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
        }
index beb2564..311e4a3 100644 (file)
@@ -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;
+}
index 0456581..f850611 100755 (executable)
@@ -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;
+}