4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>,YeJin Cho <cho.yejin@samsung.com>, YoungHwan An <younghwan_.an@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 #include "mm_player_utils.h"
24 #include "mm_player_audioeffect.h"
25 #include "mm_player_ini.h"
26 #include "mm_player_priv.h"
31 mm_player_get_foreach_present_supported_effect_type(MMHandleType hplayer, MMAudioEffectType effect_type, mmplayer_supported_audio_effect_cb foreach_cb, void *user_data)
33 mm_player_t *player = NULL;
34 int result = MM_ERROR_NONE;
35 mm_sound_device_in device_in = MM_SOUND_DEVICE_IN_NONE;
36 mm_sound_device_out device_out = MM_SOUND_DEVICE_OUT_NONE;
41 return_val_if_fail ( hplayer, MM_ERROR_PLAYER_NOT_INITIALIZED );
43 player = MM_PLAYER_CAST(hplayer);
45 /* get status if speaker is activated */
46 result = mm_sound_get_active_device(&device_in, &device_out);
49 debug_error("mm_sound_get_active_device() failed [%x]!!", result);
54 if (effect_type == MM_AUDIO_EFFECT_TYPE_PRESET)
56 for ( i = 0; i < MM_AUDIO_EFFECT_PRESET_NUM; i++ )
58 if (player->ini.audio_effect_preset_list[i] )
60 if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER &&
61 player->ini.audio_effect_preset_earphone_only_list[i])
65 if (!foreach_cb(effect_type,i, user_data))
73 else if (effect_type == MM_AUDIO_EFFECT_TYPE_CUSTOM)
75 for ( i = 0; i < MM_AUDIO_EFFECT_CUSTOM_NUM; i++ )
77 if (player->ini.audio_effect_custom_list[i] )
79 if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER &&
80 player->ini.audio_effect_custom_earphone_only_list[i])
84 if (!foreach_cb(effect_type,i, user_data))
93 debug_error("invalid effect type(%d)", effect_type);
94 result = MM_ERROR_INVALID_ARGUMENT;
102 debug_error("foreach callback returned error");
104 return MM_ERROR_PLAYER_INTERNAL;
109 __mmplayer_set_harmony_effect(mm_player_t *player, GstElement *audio_effect_element)
111 gint *ext_effect_level_list = NULL;
112 int count = 1; /* start from 1, because of excepting eq index */
113 int ext_level_index = 0;
114 int result = MM_ERROR_NONE;
118 return_val_if_fail ( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
119 return_val_if_fail ( audio_effect_element, MM_ERROR_INVALID_ARGUMENT );
122 if( player->ini.audio_effect_custom_eq_band_num )
124 debug_log("pass custom EQ level list to audio effect plugin");
125 /* set custom-equalizer level list */
126 g_object_set(audio_effect_element, "custom-eq", player->audio_effect_info.custom_eq_level, NULL);
130 debug_warning("no custom EQ");
133 /* Custom Extension effects */
134 if( player->ini.audio_effect_custom_ext_num )
136 debug_log("pass custom extension level list to audio effect plugin");
137 ext_effect_level_list = player->audio_effect_info.custom_ext_level_for_plugin;
138 if (!ext_effect_level_list) {
139 ext_effect_level_list = (gint*) malloc (sizeof(gint)*player->ini.audio_effect_custom_ext_num);
140 if (!ext_effect_level_list)
142 debug_error("memory allocation for extension effect list failed");
143 return MM_ERROR_OUT_OF_MEMORY;
147 memset (ext_effect_level_list, 0, player->ini.audio_effect_custom_ext_num);
149 /* associate it to player handle */
150 player->audio_effect_info.custom_ext_level_for_plugin = ext_effect_level_list;
154 while ( count < MM_AUDIO_EFFECT_CUSTOM_NUM )
156 if ( player->ini.audio_effect_custom_list[count] )
158 ext_effect_level_list[ext_level_index] = player->audio_effect_info.custom_ext_level[count-1];
160 if (ext_level_index == player->ini.audio_effect_custom_ext_num)
168 /* set custom-extension effects level list */
169 g_object_set(audio_effect_element, "custom-ext", ext_effect_level_list, NULL);
173 debug_warning("no custom extension effect");
176 /* order action to audio effect plugin */
177 g_object_set(audio_effect_element, "filter-action", MM_AUDIO_EFFECT_TYPE_CUSTOM, NULL);
178 debug_log("filter-action = %d", MM_AUDIO_EFFECT_TYPE_CUSTOM);
187 __mmplayer_is_earphone_only_effect_type(mm_player_t *player, MMAudioEffectType effect_type, int effect)
189 gboolean result = FALSE;
194 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
197 if (effect_type == MM_AUDIO_EFFECT_TYPE_PRESET)
199 if (player->ini.audio_effect_preset_earphone_only_list[effect])
201 debug_msg("this preset effect(%d) is only available with earphone", effect);
206 else if (effect_type == MM_AUDIO_EFFECT_TYPE_CUSTOM)
208 for (i = 1; i < MM_AUDIO_EFFECT_CUSTOM_NUM; i++) /* it starts from 1(except testing for EQ) */
210 if (player->ini.audio_effect_custom_earphone_only_list[i])
212 /* check if the earphone only custom effect was set */
213 if (player->audio_effect_info.custom_ext_level[i-1])
215 debug_msg("this custom effect(%d) is only available with earphone", i);
223 debug_error("invalid effect type(%d)", effect_type);
232 __mmplayer_audio_set_output_type (mm_player_t *player, MMAudioEffectType effect_type, int effect)
234 GstElement *audio_effect_element = NULL;
235 mm_sound_device_in device_in = MM_SOUND_DEVICE_IN_NONE;
236 mm_sound_device_out device_out = MM_SOUND_DEVICE_OUT_NONE;
238 int result = MM_ERROR_NONE;
242 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
244 audio_effect_element = player->pipeline->audiobin[MMPLAYER_A_FILTER].gst;
246 result = mm_sound_get_active_device(&device_in, &device_out);
249 debug_error("mm_sound_get_active_device() failed [%x]!!", result);
255 if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER)
257 if ( MM_AUDIO_EFFECT_TYPE_SQUARE != effect_type ) {
258 if (__mmplayer_is_earphone_only_effect_type(player, effect_type, effect))
260 debug_error("earphone is not equipped, this filter will not be applied");
262 return MM_ERROR_PLAYER_SOUND_EFFECT_INVALID_STATUS;
266 output_type = MM_AUDIO_EFFECT_OUTPUT_SPK;
268 // else if (device_out == MM_SOUND_DEVICE_OUT_MIRRORING)
270 // output_type = MM_AUDIO_EFFECT_OUTPUT_OTHERS;
272 else if (device_out == MM_SOUND_DEVICE_OUT_HDMI)
274 output_type = MM_AUDIO_EFFECT_OUTPUT_HDMI;
276 else if(device_out == MM_SOUND_DEVICE_OUT_BT_A2DP)
278 output_type = MM_AUDIO_EFFECT_OUTPUT_BT;
280 // else if(device_out == MM_SOUND_DEVICE_OUT_DOCK)
282 // output_type = MM_AUDIO_EFFECT_OUTPUT_DOCK;
284 // else if(device_out == MM_SOUND_DEVICE_OUT_MULTIMEDIA_DOCK)
286 // output_type = MM_AUDIO_EFFECT_OUTPUT_MULTIMEDIA_DOCK;
288 else if(device_out == MM_SOUND_DEVICE_OUT_USB_AUDIO)
290 output_type = MM_AUDIO_EFFECT_OUTPUT_USB_AUDIO;
292 /* Other case, include WIRED_ACCESSORY */
295 output_type = MM_AUDIO_EFFECT_OUTPUT_EAR;
297 debug_warning("output_type = %d (0:spk,1:ear,2:others)", output_type);
299 /* set filter output mode */
300 g_object_set(audio_effect_element, "filter-output-mode", output_type, NULL);
306 _mmplayer_is_supported_effect_type(mm_player_t* player, MMAudioEffectType effect_type, int effect)
308 gboolean result = TRUE;
309 mm_sound_device_in device_in = MM_SOUND_DEVICE_IN_NONE;
310 mm_sound_device_out device_out = MM_SOUND_DEVICE_OUT_NONE;
311 int ret = MM_ERROR_NONE;
315 /* get status if speaker is activated */
316 ret = mm_sound_get_active_device(&device_in, &device_out);
319 debug_error("mm_sound_get_active_device() failed [%x]!!", ret);
325 if (effect_type == MM_AUDIO_EFFECT_TYPE_PRESET)
327 if ( effect < MM_AUDIO_EFFECT_PRESET_AUTO || effect >= MM_AUDIO_EFFECT_PRESET_NUM )
329 debug_error("out of range, preset effect(%d)", effect);
334 if (!player->ini.audio_effect_preset_list[effect])
336 debug_error("this effect(%d) is not supported", effect);
341 if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER &&
342 player->ini.audio_effect_preset_earphone_only_list[effect])
350 else if (effect_type == MM_AUDIO_EFFECT_TYPE_CUSTOM)
352 if ( effect < MM_AUDIO_EFFECT_CUSTOM_EQ || effect >= MM_AUDIO_EFFECT_CUSTOM_NUM )
354 debug_error("out of range, custom effect(%d)", effect);
359 if (!player->ini.audio_effect_custom_list[effect])
361 debug_error("this custom effect(%d) is not supported", effect);
366 if (device_out == MM_SOUND_DEVICE_OUT_SPEAKER &&
367 player->ini.audio_effect_custom_earphone_only_list[effect])
374 else if (effect_type == MM_AUDIO_EFFECT_TYPE_SQUARE)
376 if (!player->ini.use_audio_effect_custom)
378 debug_error("Square effect is not supported");
384 debug_error("invalid effect type(%d)", effect_type);
395 _mmplayer_audio_effect_custom_apply(mm_player_t *player)
397 GstElement *audio_effect_element = NULL;
398 int result = MM_ERROR_NONE;
402 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
404 /* Music Player can set audio effect value before Audiobin is created. */
405 if ( !player->pipeline || !player->pipeline->audiobin || !player->pipeline->audiobin[MMPLAYER_A_FILTER].gst )
407 debug_warning("effect element is not created yet.");
409 player->bypass_audio_effect = FALSE;
411 /* store audio effect setting in order to apply it when audio effect plugin is created */
412 player->audio_effect_info.effect_type = MM_AUDIO_EFFECT_TYPE_CUSTOM;
416 audio_effect_element = player->pipeline->audiobin[MMPLAYER_A_FILTER].gst;
418 /* get status if speaker is activated */
419 result = __mmplayer_audio_set_output_type(player, MM_AUDIO_EFFECT_TYPE_CUSTOM, 0);
421 if ( result != MM_ERROR_NONE) {
422 debug_error("failed to set output mode");
427 result = __mmplayer_set_harmony_effect(player, audio_effect_element);
430 debug_error("_set_harmony_effect() failed(%x)", result);
435 player->set_mode.rich_audio = TRUE;
443 _mmplayer_audio_effect_custom_update_level(mm_player_t *player)
445 GstElement *audio_effect_element = NULL;
446 int result = MM_ERROR_NONE;
447 int ext_level_index = 0;
450 gint *custom_eq = NULL;
451 gint *custom_ext_effect_level_list = NULL;
455 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
457 audio_effect_element = player->pipeline->audiobin[MMPLAYER_A_FILTER].gst;
459 /* get custom eq effect */
460 g_object_get(audio_effect_element, "custom-eq", &custom_eq, NULL);
462 memcpy(player->audio_effect_info.custom_eq_level, custom_eq, sizeof(gint) * player->ini.audio_effect_custom_eq_band_num);
464 for (i=0; i<player->ini.audio_effect_custom_eq_band_num;i++)
466 debug_log("updated custom-eq [%d] = %d", i, player->audio_effect_info.custom_eq_level[i]);
469 /* get custom ext effect */
471 g_object_get(audio_effect_element, "custom-ext", &custom_ext_effect_level_list, NULL);
473 while ( count < MM_AUDIO_EFFECT_CUSTOM_NUM )
475 if ( player->ini.audio_effect_custom_list[count] )
477 player->audio_effect_info.custom_ext_level[count-1]
478 = custom_ext_effect_level_list[ext_level_index];
479 debug_log("updated custom-ext [%d] = %d", count, player->audio_effect_info.custom_ext_level[count-1]);
492 mm_player_audio_effect_custom_clear_eq_all(MMHandleType hplayer)
494 int result = MM_ERROR_NONE;
495 mm_player_t* player = (mm_player_t*)hplayer;
499 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
501 /* clear EQ custom effect */
502 memset(player->audio_effect_info.custom_eq_level, MM_AUDIO_EFFECT_CUSTOM_LEVEL_INIT, sizeof(int)*MM_AUDIO_EFFECT_EQ_BAND_NUM_MAX);
504 debug_msg("All the EQ bands clearing success");
513 mm_player_audio_effect_custom_clear_ext_all(MMHandleType hplayer)
516 int result = MM_ERROR_NONE;
517 mm_player_t* player = (mm_player_t*)hplayer;
521 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
523 /* clear ALL custom effects, except EQ */
524 for ( i = 0 ; i < MM_AUDIO_EFFECT_CUSTOM_NUM - 1 ; i++ )
526 player->audio_effect_info.custom_ext_level[i] = MM_AUDIO_EFFECT_CUSTOM_LEVEL_INIT;
529 debug_msg("All the extension effects clearing success");
538 mm_player_is_supported_preset_effect_type(MMHandleType hplayer, MMAudioEffectPresetType effect)
540 mm_player_t* player = (mm_player_t*)hplayer;
541 int result = MM_ERROR_NONE;
545 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
547 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_PRESET, effect ) )
549 result = MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
559 mm_player_is_supported_custom_effect_type(MMHandleType hplayer, MMAudioEffectCustomType effect)
561 mm_player_t* player = (mm_player_t*)hplayer;
562 int result = MM_ERROR_NONE;
566 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
568 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, effect ) )
570 result = MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
579 mm_player_audio_effect_custom_apply(MMHandleType hplayer)
581 mm_player_t* player = (mm_player_t*)hplayer;
582 int result = MM_ERROR_NONE;
586 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
588 if (!player->ini.use_audio_effect_custom)
590 debug_error("audio effect(custom) is not supported");
592 return MM_ERROR_NOT_SUPPORT_API;
595 result = _mmplayer_audio_effect_custom_apply(player);
604 mm_player_audio_effect_bypass (MMHandleType hplayer)
606 mm_player_t* player = (mm_player_t*)hplayer;
607 int result = MM_ERROR_NONE;
608 GstElement *audio_effect_element = NULL;
612 return_val_if_fail(player, MM_ERROR_PLAYER_NOT_INITIALIZED);
614 if ( !player->ini.use_audio_effect_preset && !player->ini.use_audio_effect_custom )
616 debug_error("audio effect(preset/custom) is not supported");
618 return MM_ERROR_NOT_SUPPORT_API;
620 if ( !player->pipeline || !player->pipeline->audiobin || !player->pipeline->audiobin[MMPLAYER_A_FILTER].gst )
622 debug_warning("effect element is not created yet.");
626 audio_effect_element = player->pipeline->audiobin[MMPLAYER_A_FILTER].gst;
628 /* order action to audio effect plugin */
629 g_object_set(audio_effect_element, "filter-action", MM_AUDIO_EFFECT_TYPE_NONE, NULL);
630 debug_log("filter-action = %d", MM_AUDIO_EFFECT_TYPE_NONE);
640 _mmplayer_audio_effect_custom_set_level_ext(mm_player_t *player, MMAudioEffectCustomType custom_effect_type, int level)
642 int effect_level_max = 0;
643 int effect_level_min = 0;
644 int count = 1; /* start from 1, because of excepting eq index */
645 int ext_level_index = 1; /* start from 1, because of excepting eq index */
646 int result = MM_ERROR_NONE;
650 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
652 /* check if EQ is supported */
653 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, custom_effect_type ) )
656 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
659 while ( count < MM_AUDIO_EFFECT_CUSTOM_NUM )
661 if ( player->ini.audio_effect_custom_list[count] )
663 if ( count == custom_effect_type )
665 effect_level_min = player->ini.audio_effect_custom_min_level_list[ext_level_index];
666 effect_level_max = player->ini.audio_effect_custom_max_level_list[ext_level_index];
667 debug_msg("level min value(%d), level max value(%d)", effect_level_min, effect_level_max);
671 if (ext_level_index == player->ini.audio_effect_custom_ext_num + 1)
673 debug_error("could not find min, max value. maybe effect information in ini file is not proper for audio effect plugin");
680 if ( level < effect_level_min || level > effect_level_max )
682 debug_error("out of range, level(%d)", level);
683 result = MM_ERROR_INVALID_ARGUMENT;
687 player->audio_effect_info.custom_ext_level[custom_effect_type-1] = level;
688 debug_msg("set ext[%d] = %d", custom_effect_type-1, level);
698 _mmplayer_audio_effect_custom_set_level_eq(mm_player_t *player, int index, int level)
700 gint eq_level_max = 0;
701 gint eq_level_min = 0;
702 int result = MM_ERROR_NONE;
706 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
708 /* check if EQ is supported */
709 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, MM_AUDIO_EFFECT_CUSTOM_EQ ) )
712 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
715 if ( index < 0 || index > player->ini.audio_effect_custom_eq_band_num - 1 )
717 debug_error("out of range, index(%d)", index);
718 result = MM_ERROR_INVALID_ARGUMENT;
722 eq_level_min = player->ini.audio_effect_custom_min_level_list[MM_AUDIO_EFFECT_CUSTOM_EQ];
723 eq_level_max = player->ini.audio_effect_custom_max_level_list[MM_AUDIO_EFFECT_CUSTOM_EQ];
724 debug_msg("EQ level min value(%d), EQ level max value(%d)", eq_level_min, eq_level_max);
726 if ( level < eq_level_min || level > eq_level_max )
728 debug_error("out of range, EQ level(%d)", level);
729 result = MM_ERROR_INVALID_ARGUMENT;
733 player->audio_effect_info.custom_eq_level[index] = level;
734 debug_msg("set EQ[%d] = %d", index, level);
744 /* NOTE : parameter eq_index is only used for _set_eq_level() */
746 mm_player_audio_effect_custom_set_level(MMHandleType hplayer, MMAudioEffectCustomType effect_custom_type, int eq_index, int level)
748 mm_player_t* player = (mm_player_t*)hplayer;
749 int result = MM_ERROR_NONE;
753 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
755 /* check if this effect type is supported */
756 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, effect_custom_type ) )
758 result = MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
762 if (effect_custom_type == MM_AUDIO_EFFECT_CUSTOM_EQ)
764 result = _mmplayer_audio_effect_custom_set_level_eq(player, eq_index, level);
766 else if (effect_custom_type > MM_AUDIO_EFFECT_CUSTOM_EQ && effect_custom_type < MM_AUDIO_EFFECT_CUSTOM_NUM)
768 result = _mmplayer_audio_effect_custom_set_level_ext(player, effect_custom_type, level);
772 debug_error("out of range, effect type(%d)", effect_custom_type);
773 result = MM_ERROR_INVALID_ARGUMENT;
784 mm_player_audio_effect_custom_get_eq_bands_number(MMHandleType hplayer, int *bands)
786 mm_player_t* player = (mm_player_t*)hplayer;
787 int result = MM_ERROR_NONE;
791 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
793 /* check if EQ is supported */
794 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, MM_AUDIO_EFFECT_CUSTOM_EQ ) )
797 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
800 *bands = player->ini.audio_effect_custom_eq_band_num;
801 debug_log("number of custom EQ band = %d", *bands);
810 mm_player_audio_effect_custom_get_eq_bands_width(MMHandleType hplayer, int band_idx, int *width)
812 mm_player_t* player = (mm_player_t*)hplayer;
813 int result = MM_ERROR_NONE;
814 unsigned int eq_num = 0;
818 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
820 /* check if EQ is supported */
821 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, MM_AUDIO_EFFECT_CUSTOM_EQ ) )
824 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
827 eq_num = player->ini.audio_effect_custom_eq_band_num;
828 if (band_idx < 0 || band_idx > eq_num-1)
830 debug_error("out of range, invalid band_idx(%d)", band_idx);
831 result = MM_ERROR_INVALID_ARGUMENT;
835 /* set the width of EQ band */
836 *width = player->ini.audio_effect_custom_eq_band_width[band_idx];
837 debug_log("width of band_idx(%d) = %dHz", band_idx, *width);
847 mm_player_audio_effect_custom_get_eq_bands_freq(MMHandleType hplayer, int band_idx, int *freq)
849 mm_player_t* player = (mm_player_t*)hplayer;
850 int result = MM_ERROR_NONE;
851 unsigned int eq_num = 0;
855 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
857 /* check if EQ is supported */
858 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, MM_AUDIO_EFFECT_CUSTOM_EQ ) )
861 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
864 eq_num = player->ini.audio_effect_custom_eq_band_num;
865 if (band_idx < 0 || band_idx > eq_num-1)
867 debug_error("out of range, invalid band_idx(%d)", band_idx);
868 result = MM_ERROR_INVALID_ARGUMENT;
872 /* set the frequency of EQ band */
873 *freq = player->ini.audio_effect_custom_eq_band_freq[band_idx];
874 debug_log("frequency of band_idx(%d) = %dHz", band_idx, *freq);
884 mm_player_audio_effect_custom_get_level(MMHandleType hplayer, MMAudioEffectCustomType type, int eq_index, int *level)
886 mm_player_t* player = (mm_player_t*)hplayer;
887 int result = MM_ERROR_NONE;
891 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
892 return_val_if_fail( level, MM_ERROR_PLAYER_NOT_INITIALIZED );
894 /* check if this effect type is supported */
895 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, type ) )
898 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
901 if (type == MM_AUDIO_EFFECT_CUSTOM_EQ)
903 if ( eq_index < 0 || eq_index > player->ini.audio_effect_custom_eq_band_num - 1 )
905 debug_error("out of range, EQ index(%d)", eq_index);
906 result = MM_ERROR_INVALID_ARGUMENT;
910 *level = player->audio_effect_info.custom_eq_level[eq_index];
911 debug_log("EQ index = %d, level = %d", eq_index, *level);
914 else if ( type > MM_AUDIO_EFFECT_CUSTOM_EQ && type < MM_AUDIO_EFFECT_CUSTOM_NUM )
916 *level = player->audio_effect_info.custom_ext_level[type-1];
917 debug_log("extension effect index = %d, level = %d", type, *level);
921 debug_error("out of range, type(%d)", type);
922 result = MM_ERROR_INVALID_ARGUMENT;
932 mm_player_audio_effect_custom_get_level_range(MMHandleType hplayer, MMAudioEffectCustomType type, int *min, int *max)
934 mm_player_t* player = (mm_player_t*)hplayer;
935 int result = MM_ERROR_NONE;
936 int count = 1; /* start from 1, because of excepting eq index */
937 int ext_level_index = 1; /* start from 1, because of excepting eq index */
941 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
942 return_val_if_fail( min, MM_ERROR_PLAYER_NOT_INITIALIZED );
943 return_val_if_fail( max, MM_ERROR_PLAYER_NOT_INITIALIZED );
945 /* check if this effect type is supported */
946 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, type ) )
949 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
952 if ( type == MM_AUDIO_EFFECT_CUSTOM_EQ )
954 *min = player->ini.audio_effect_custom_min_level_list[MM_AUDIO_EFFECT_CUSTOM_EQ];
955 *max = player->ini.audio_effect_custom_max_level_list[MM_AUDIO_EFFECT_CUSTOM_EQ];
956 debug_log("EQ min level = %d, max level = %d", *min, *max);
960 while ( count < MM_AUDIO_EFFECT_CUSTOM_NUM )
962 if ( player->ini.audio_effect_custom_list[count] )
966 *min = player->ini.audio_effect_custom_min_level_list[ext_level_index];
967 *max = player->ini.audio_effect_custom_max_level_list[ext_level_index];
968 debug_msg("Extension effect(%d) min level = %d, max level = %d", count, *min, *max);
972 if ( ext_level_index == player->ini.audio_effect_custom_ext_num + 1 )
974 debug_error("could not find min, max value. maybe effect information in ini file is not proper for audio effect plugin");
989 mm_player_audio_effect_custom_set_level_eq_from_list(MMHandleType hplayer, int *level_list, int size)
991 mm_player_t *player = (mm_player_t*)hplayer;
993 gint eq_level_min = 0;
994 gint eq_level_max = 0;
995 int result = MM_ERROR_NONE;
999 return_val_if_fail( player, MM_ERROR_PLAYER_NOT_INITIALIZED );
1001 /* check if EQ is supported */
1002 if ( !_mmplayer_is_supported_effect_type( player, MM_AUDIO_EFFECT_TYPE_CUSTOM, MM_AUDIO_EFFECT_CUSTOM_EQ ) )
1005 return MM_ERROR_PLAYER_SOUND_EFFECT_NOT_SUPPORTED_FILTER;
1008 if ( size != player->ini.audio_effect_custom_eq_band_num )
1010 debug_error("input size variable(%d) does not match with number of eq band(%d)", size, player->ini.audio_effect_custom_eq_band_num);
1011 result = MM_ERROR_INVALID_ARGUMENT;
1015 eq_level_min = player->ini.audio_effect_custom_min_level_list[MM_AUDIO_EFFECT_CUSTOM_EQ];
1016 eq_level_max = player->ini.audio_effect_custom_max_level_list[MM_AUDIO_EFFECT_CUSTOM_EQ];
1018 for ( i = 0 ; i < size ; i++ )
1020 if ( level_list[i] < eq_level_min || level_list[i] > eq_level_max)
1022 debug_error("out of range, level[%d]=%d", i, level_list[i]);
1023 result = MM_ERROR_INVALID_ARGUMENT;
1026 player->audio_effect_info.custom_eq_level[i] = level_list[i];