From: Eunhae Choi Date: Mon, 10 Dec 2018 05:09:16 +0000 (+0900) Subject: [0.6.158] add language code error handling X-Git-Tag: submit/tizen/20181218.081409~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=494966c47470ecf5e863d3ee1c844aba6df09bbc;p=platform%2Fcore%2Fmultimedia%2Flibmm-player.git [0.6.158] add language code error handling - release language code memory in libmm-player in case of error which was released at legacy_player. - add language code converting to two letter for api return which was done at legacy_player. - apply minor changes for cleanup Change-Id: I9bc2fd2ebfbcc60d671c124abf9f3f6edfd3cb4c --- diff --git a/packaging/libmm-player.spec b/packaging/libmm-player.spec index dd501c4..f5c607b 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.157 +Version: 0.6.158 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 diff --git a/src/mm_player_tracks.c b/src/mm_player_tracks.c index a92e05f..9664b04 100644 --- a/src/mm_player_tracks.c +++ b/src/mm_player_tracks.c @@ -25,11 +25,12 @@ #include "mm_player_tracks.h" #define INVALID_TRACK_INDEX -1 +#define LANGUAGE_CODE_SIZE (3+1) /* Size of ISO-639-1, and considering the nul-terminator */ /*--------------------------------------------------------------------------------------- | LOCAL FUNCTION PROTOTYPES: | ---------------------------------------------------------------------------------------*/ -static int __mmplayer_track_get_language(mm_player_t* player, MMPlayerTrackType type, gint stream_index, gchar **code); +static int __mmplayer_track_get_language(mm_player_t *player, MMPlayerTrackType type, gint stream_index, gchar **code); /*======================================================================================= @@ -37,15 +38,15 @@ static int __mmplayer_track_get_language(mm_player_t* player, MMPlayerTrackType =======================================================================================*/ int _mmplayer_get_track_count(MMHandleType hplayer, MMPlayerTrackType type, int *count) { - mm_player_t* player = (mm_player_t*) hplayer; - MMHandleType attrs = 0; int ret = MM_ERROR_NONE; + mm_player_t *player = (mm_player_t*) hplayer; + MMHandleType attrs = 0; MMPLAYER_FENTER(); /* check player handle */ MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); - MMPLAYER_RETURN_VAL_IF_FAIL(count, MM_ERROR_COMMON_INVALID_ARGUMENT); + MMPLAYER_RETURN_VAL_IF_FAIL(count, MM_ERROR_INVALID_ARGUMENT); MMPLAYER_RETURN_VAL_IF_FAIL((MMPLAYER_CURRENT_STATE(player) == MM_PLAYER_STATE_PAUSED) || (MMPLAYER_CURRENT_STATE(player) == MM_PLAYER_STATE_PLAYING), MM_ERROR_PLAYER_INVALID_STATE); @@ -67,7 +68,7 @@ int _mmplayer_get_track_count(MMHandleType hplayer, MMPlayerTrackType type, int ret = mm_attrs_get_int_by_name(attrs, "content_text_track_num", count); break; default: - ret = MM_ERROR_COMMON_INVALID_ARGUMENT; + ret = MM_ERROR_INVALID_ARGUMENT; break; } @@ -90,7 +91,7 @@ int _mmplayer_select_track(MMHandleType hplayer, MMPlayerTrackType type, int ind MMPLAYER_SUBTITLE_INFO_LOCK(player); - if (type == MM_PLAYER_TRACK_TYPE_TEXT && player->subtitle_language_list) { + if (type == MM_PLAYER_TRACK_TYPE_TEXT && player->subtitle_language_list) { /* external subtitle */ GstElement *subparse = NULL; MMPlayerLangStruct *temp = NULL; guint num_of_list = 0; @@ -119,7 +120,7 @@ int _mmplayer_select_track(MMHandleType hplayer, MMPlayerTrackType type, int ind _mmplayer_sync_subtitle_pipeline(player); - } else { + } else { /* audio or internal subtitle */ ret = _mmplayer_change_track_language(hplayer, type, index); if (ret != MM_ERROR_NONE) { LOGE("failed to change track"); @@ -161,7 +162,7 @@ int _mmplayer_get_current_track(MMHandleType hplayer, MMPlayerTrackType type, in MMPLAYER_FENTER(); MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); - MMPLAYER_RETURN_VAL_IF_FAIL(index, MM_ERROR_COMMON_INVALID_ARGUMENT); + MMPLAYER_RETURN_VAL_IF_FAIL(index, MM_ERROR_INVALID_ARGUMENT); attrs = MMPLAYER_GET_ATTRS(player); MMPLAYER_RETURN_VAL_IF_FAIL(attrs, MM_ERROR_PLAYER_INTERNAL); @@ -194,7 +195,7 @@ int _mmplayer_get_current_track(MMHandleType hplayer, MMPlayerTrackType type, in break; default: LOGD("invalid input type"); - ret = MM_ERROR_COMMON_INVALID_ARGUMENT; + ret = MM_ERROR_INVALID_ARGUMENT; goto EXIT; } @@ -215,53 +216,54 @@ EXIT: int _mmplayer_get_track_language_code(MMHandleType hplayer, MMPlayerTrackType type, int index, char **code) { int ret = MM_ERROR_NONE; + mm_player_t *player = (mm_player_t*) hplayer; + gchar *lang_code = NULL; - MMPLAYER_RETURN_VAL_IF_FAIL(hplayer, MM_ERROR_PLAYER_NOT_INITIALIZED); - mm_player_t* player = (mm_player_t*) hplayer; MMPLAYER_FENTER(); + MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + MMPLAYER_RETURN_VAL_IF_FAIL(code, MM_ERROR_INVALID_ARGUMENT); MMPLAYER_SUBTITLE_INFO_LOCK(player); - if (type == MM_PLAYER_TRACK_TYPE_TEXT && player->subtitle_language_list) { - int language_code_size = 3;/*Size of ISO-639-1*/ + if (type == MM_PLAYER_TRACK_TYPE_TEXT && player->subtitle_language_list) { /* external subtitle */ MMPlayerLangStruct *language_list = NULL; - *code = (char*)malloc(language_code_size * sizeof(char)); - if (*code == NULL) { - ret = MM_ERROR_PLAYER_INTERNAL; - goto EXIT; - } - memset(*code, 0, language_code_size * sizeof(char)); + lang_code = (gchar*)g_malloc0(LANGUAGE_CODE_SIZE * sizeof(char)); language_list = g_list_nth_data(player->subtitle_language_list, index); if (language_list == NULL) { - LOGD("%d is not a proper index \n", index); + LOGE("invalid index %d", index); + ret = MM_ERROR_INVALID_ARGUMENT; goto EXIT; } - strncpy(*code, language_list->language_code, language_code_size); - } else { + g_strlcpy(lang_code, language_list->language_code, LANGUAGE_CODE_SIZE); + } else { /* audio or internal subtitle */ if (player->selector[type].total_track_num <= 0) { + LOGW("language list is not available. [type:%d]", type); ret = MM_ERROR_PLAYER_NO_OP; - LOGD("language list is not available. [type:%d] \n", type); goto EXIT; } - if (index < 0 || index >= player->selector[type].total_track_num) { - ret = MM_ERROR_INVALID_ARGUMENT; - LOGD("Not a proper index : %d \n", index); - goto EXIT; - } - - ret = __mmplayer_track_get_language(player, type, index, code); + ret = __mmplayer_track_get_language(player, type, index, &lang_code); } EXIT: MMPLAYER_SUBTITLE_INFO_UNLOCK(player); + + *code = NULL; + if (ret == MM_ERROR_NONE) { + if (g_strcmp0(lang_code, "und")) + *code = strndup(lang_code, 2); + else + *code = strndup("und", 3); + } + g_free(lang_code); + MMPLAYER_FLEAVE(); return ret; } -void __mmplayer_track_initialize(mm_player_t* player) +void __mmplayer_track_initialize(mm_player_t *player) { MMPlayerTrackType type = MM_PLAYER_TRACK_TYPE_AUDIO; @@ -276,7 +278,7 @@ void __mmplayer_track_initialize(mm_player_t* player) } } -void __mmplayer_track_destroy(mm_player_t* player) +void __mmplayer_track_destroy(mm_player_t *player) { MMPlayerTrackType type = MM_PLAYER_TRACK_TYPE_AUDIO; MMHandleType attrs = 0; @@ -301,7 +303,7 @@ void __mmplayer_track_destroy(mm_player_t* player) } } -void __mmplayer_track_update_selector_info(mm_player_t* player, MMPlayerTrackType type, GstPad *sinkpad) +void __mmplayer_track_update_selector_info(mm_player_t *player, MMPlayerTrackType type, GstPad *sinkpad) { MMPLAYER_FENTER(); @@ -384,51 +386,39 @@ EXIT: MMPLAYER_FLEAVE(); } -static int __mmplayer_track_get_language(mm_player_t* player, MMPlayerTrackType type, gint stream_index, gchar **code) +static int __mmplayer_track_get_language(mm_player_t *player, MMPlayerTrackType type, gint stream_index, gchar **code) { - int ret = MM_ERROR_NONE; - GstTagList *tag_list = NULL; - gchar* tag = NULL; + gchar *tag = NULL; GstPad *sinkpad = NULL; - gint language_code_size = 3; /*Size of ISO-639-1*/ MMPLAYER_FENTER(); + MMPLAYER_RETURN_VAL_IF_FAIL(player, MM_ERROR_PLAYER_NOT_INITIALIZED); + MMPLAYER_RETURN_VAL_IF_FAIL((code && (stream_index >= 0) && + (stream_index < player->selector[type].total_track_num)), MM_ERROR_INVALID_ARGUMENT); - *code = (char *)malloc(language_code_size*sizeof(char)); - if (*code == NULL) { - ret = MM_ERROR_PLAYER_INTERNAL; - goto EXIT; - } - memset(*code, 0, language_code_size*sizeof(char)); + LOGD("type: %d, track count: %d, intput idx: %d", type, player->selector[type].total_track_num, stream_index); - LOGD("total track num : %d , req idx : %d\n", player->selector[type].total_track_num, stream_index); + *code = (gchar *)g_malloc0(LANGUAGE_CODE_SIZE * sizeof(char)); - if (stream_index < player->selector[type].total_track_num) { - sinkpad = g_ptr_array_index(player->selector[type].channels, stream_index); - } else { - ret = MM_ERROR_INVALID_ARGUMENT; - goto EXIT; - } + sinkpad = g_ptr_array_index(player->selector[type].channels, stream_index); g_object_get(sinkpad, "tags", &tag_list, NULL); - //SECURE_LOGD ("[%s]\n", gst_tag_list_to_string(tag_list)); - - gst_tag_list_get_string(tag_list, GST_TAG_LANGUAGE_CODE, &tag); + if (tag_list) + gst_tag_list_get_string(tag_list, GST_TAG_LANGUAGE_CODE, &tag); - if (!tag) { - LOGD("there is no lang info - und\n"); - strncpy(*code, "und", language_code_size); - } else { - LOGD("language information[%d] code: %s, len: %zu", type, tag, strlen(tag)); - strncpy(*code, tag, /*strlen(tag)*/language_code_size); + if (tag) { + LOGD("language code: %s, len: %zu", tag, strlen(tag)); + g_strlcpy(*code, tag, LANGUAGE_CODE_SIZE); g_free(tag); + } else { + LOGD("no language code info - und"); + g_strlcpy(*code, "und", LANGUAGE_CODE_SIZE); } if (tag_list) gst_tag_list_unref(tag_list); -EXIT: MMPLAYER_FLEAVE(); - return ret; + return MM_ERROR_NONE; }