diff options
author | Jinkun Jang <jinkun.jang@samsung.com> | 2013-03-13 01:48:53 +0900 |
---|---|---|
committer | Jinkun Jang <jinkun.jang@samsung.com> | 2013-03-13 01:48:53 +0900 |
commit | 785814c493c819a9f94a083a69ad42a63f221386 (patch) | |
tree | 92f024acac4b80e82a1bfe33ce0ec6778ae1a7bb /avsys-audio-ascenario.c | |
parent | b8e758c1624a163a988aa868fbf3da19e2612f6c (diff) | |
download | avsystem-785814c493c819a9f94a083a69ad42a63f221386.tar.gz avsystem-785814c493c819a9f94a083a69ad42a63f221386.tar.bz2 avsystem-785814c493c819a9f94a083a69ad42a63f221386.zip |
Tizen 2.1 base
Diffstat (limited to 'avsys-audio-ascenario.c')
-rw-r--r-- | avsys-audio-ascenario.c | 100 |
1 files changed, 78 insertions, 22 deletions
diff --git a/avsys-audio-ascenario.c b/avsys-audio-ascenario.c index c78f155..0b9f1ac 100644 --- a/avsys-audio-ascenario.c +++ b/avsys-audio-ascenario.c @@ -36,6 +36,8 @@ #define STR_BUFF_MAX 128 #define P_STR_MAX 42 #define O_STR_MAX 44 +#define CARD_NUMBER 0 /* ALSA card number */ + static int __avsys_audio_ascn_make_scenario_str(int input, char *buf, int buf_len) { char fromStr[P_STR_MAX] = { 0, }; @@ -96,7 +98,12 @@ static int __avsys_audio_ascn_make_scenario_str(int input, char *buf, int buf_le if (input & OUTPUT_AP) { strncpy(toStr, "ap", sizeof(toStr) - 1); } - + if (input & OUTPUT_HDMI) { + strncpy(toStr, "hdmi", sizeof(toStr) - 1); + } + if (input & OUTPUT_DOCK) { + strncpy(toStr, "dock", sizeof(toStr) - 1); + } if (input & GAIN_MODE) { strncpy(optStr, "_gain", sizeof(optStr) - 1); } @@ -118,7 +125,8 @@ static int __avsys_audio_ascn_make_scenario_str(int input, char *buf, int buf_le int avsys_audio_ascn_bulk_set(int * bulk, int bulk_cnt, AscnResetType clear) { struct snd_scenario *scn = NULL; - char card_name[STR_BUFF_MAX] = { 0, }; + int card = CARD_NUMBER; + char *name = NULL; char str_buf[STR_BUFF_MAX] = { 0, }; char reset_str[STR_BUFF_MAX] = { 0, }; int err = AVSYS_STATE_SUCCESS; @@ -144,12 +152,31 @@ int avsys_audio_ascn_bulk_set(int * bulk, int bulk_cnt, AscnResetType clear) return AVSYS_STATE_ERR_RANGE_OVER; } - snprintf(card_name, sizeof(card_name) - 1, "default"); + /* Try to get card name from CARD_NUMBER. */ + snd_card_get_name(card, &name); #if defined(TIME_CHECK) gettimeofday(&t_start, NULL); #endif - //avsys_info(AVAUDIO, "snd_scenario_open() with [%s]\n", card_name); - scn = snd_scenario_open(card_name); + if (name == NULL) { + scn = snd_scenario_open("default"); + if (scn == NULL) + { + avsys_error(AVAUDIO, "snd_scenario_open() failed to open with default\n"); + return AVSYS_STATE_ERR_INTERNAL; + } + } else { + scn = snd_scenario_open(name); + free(name); + if (scn == NULL) + { + scn = snd_scenario_open("default"); + if (scn == NULL) + { + avsys_error(AVAUDIO, "snd_scenario_open() failed to open with default\n"); + return AVSYS_STATE_ERR_INTERNAL; + } + } + } #if defined(TIME_CHECK) gettimeofday(&t_stop, NULL); if (t_stop.tv_sec == t_start.tv_sec) @@ -158,12 +185,6 @@ int avsys_audio_ascn_bulk_set(int * bulk, int bulk_cnt, AscnResetType clear) check = (t_stop.tv_sec - t_start.tv_sec) * 1000 + (t_stop.tv_usec - t_start.tv_usec) / 1000; avsys_warning(AVAUDIO, "[snd_scenario_open()] takes %u msec\n", check); #endif - if (scn == NULL) { - avsys_error_r(AVAUDIO, "alsa scenario open failed %s\n", card_name); - return AVSYS_STATE_ERR_INTERNAL; - } - //avsys_info(AVAUDIO, "snd_scenario_open() success\n"); - if (clear != ASCN_RESET_NONE) { switch (clear) { case ASCN_RESET_ALL: @@ -241,33 +262,68 @@ bulk_error: int avsys_audio_ascn_single_set(char * str) { struct snd_scenario *scn = NULL; - char card_name[STR_BUFF_MAX] = { 0, }; + int card = CARD_NUMBER; + char *name = NULL; char cmd_str[STR_BUFF_MAX] = { 0, }; int err = AVSYS_STATE_SUCCESS; +#if defined(TIME_CHECK) + struct timeval t_start, t_stop; + unsigned long check = 0; +#endif if (str == NULL) { avsys_error_r(AVAUDIO, "input str is null\n"); return AVSYS_STATE_ERR_NULL_POINTER; } - snprintf(card_name, sizeof(card_name) - 1, "default"); -// avsys_info(AVAUDIO, "snd_scenario_open() with [%s]\n", card_name); - scn = snd_scenario_open(card_name); - if (scn == NULL) { - avsys_error_r(AVAUDIO, "alsa scenario open failed %s\n", card_name); - return AVSYS_STATE_ERR_INTERNAL; - } -// avsys_info(AVAUDIO, "snd_scenario_open() success\n"); +#if defined(TIME_CHECK) + gettimeofday(&t_start, NULL); +#endif + + /* Try to get card name from CARD_NUMBER. */ + snd_card_get_name(card, &name); + if (name == NULL) { + scn = snd_scenario_open("default"); + if (scn == NULL) + { + avsys_error(AVAUDIO, "snd_scenario_open() failed to open with default\n"); + return AVSYS_STATE_ERR_INTERNAL; + } + } else { + scn = snd_scenario_open(name); + free(name); + if (scn == NULL) + { + scn = snd_scenario_open("default"); + if (scn == NULL) + { + avsys_error(AVAUDIO, "snd_scenario_open() failed to open with default\n"); + return AVSYS_STATE_ERR_INTERNAL; + } + } + } + + /* Set scenario */ strncpy(cmd_str, str, sizeof(cmd_str) - 1); err = snd_scenario_set_scn(scn, str); - avsys_warning(AVAUDIO, "alsa scenario set [%s]\n", str); + avsys_info(AVAUDIO, "alsa scenario set [%s]\n", str); if (err < 0) { - avsys_error_r(AVAUDIO, "snd_scenario_set(%s) failed\n", str); + avsys_error(AVAUDIO, "snd_scenario_set(%s) failed\n", str); } + /* Close scenario manager core */ snd_scenario_close(scn); +#if defined(TIME_CHECK) + gettimeofday(&t_stop, NULL); + if (t_stop.tv_sec == t_start.tv_sec) + check = (t_stop.tv_usec - t_start.tv_usec) / 1000; + else + check = (t_stop.tv_sec - t_start.tv_sec) * 1000 + (t_stop.tv_usec - t_start.tv_usec) / 1000; + avsys_warning(AVAUDIO, "[%s] takes %u msec\n", str, check); +#endif + return err; } |