From 88a62513130637383cc6e9b132c2b18d90caf16b Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Fri, 9 Apr 2021 13:37:43 +0900 Subject: [PATCH] Improve GPS parsing function Change-Id: Ib2ccf89906e72d5daaf1bf62f0d204e9617fc9d1 Signed-off-by: Minje Ahn --- packaging/libmedia-service.spec | 4 +-- src/common/media-svc-util.c | 54 ++++++++++------------------------------- 2 files changed, 15 insertions(+), 43 deletions(-) diff --git a/packaging/libmedia-service.spec b/packaging/libmedia-service.spec index a0879ac..5964907 100644 --- a/packaging/libmedia-service.spec +++ b/packaging/libmedia-service.spec @@ -1,11 +1,11 @@ Name: libmedia-service Summary: Media information service library for multimedia applications -Version: 0.4.17 +Version: 0.4.18 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 and PD Source0: %{name}-%{version}.tar.gz -Source1001: libmedia-service.manifest +Source1001: libmedia-service.manifest Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig diff --git a/src/common/media-svc-util.c b/src/common/media-svc-util.c index 9c873bd..5c08dd9 100644 --- a/src/common/media-svc-util.c +++ b/src/common/media-svc-util.c @@ -160,51 +160,14 @@ RETRY_GEN: return g_strdup(uuid_unparsed); } -static int __media_svc_split_to_double(char *input, double *arr) -{ - char tmp_arr[255] = {0, }; - int len = 0, idx = 0, arr_idx = 0, str_idx = 0; - - if (!STRING_VALID(input)) { - media_svc_error("Invalid parameter"); - return MS_MEDIA_ERR_INVALID_PARAMETER; - } - memset(tmp_arr, 0x0, sizeof(tmp_arr)); - - /*media_svc_debug("input: [%s]", input); */ - - len = strlen(input); - - for (idx = 0; idx < (len + 1); idx++) { - if (input[idx] == ' ') { - continue; - } else if ((input[idx] == ',') || (idx == len)) { - arr[arr_idx] = atof(tmp_arr); - arr_idx++; - str_idx = 0; - /*media_svc_debug("idx=[%d] arr_idx=[%d] tmp_attr[%s] atof(tmp_arr)=[%f]", idx, arr_idx, tmp_arr, atof(tmp_arr)); */ - memset(tmp_arr, 0x0, sizeof(tmp_arr)); - } else { - tmp_arr[str_idx] = input[idx]; - str_idx++; - } - } - - if (arr_idx != 3) { - media_svc_debug("Error when parsing GPS [%d]", arr_idx); - return MS_MEDIA_ERR_INTERNAL; - } - - return MS_MEDIA_ERR_NONE; -} - /* GPS information is not ExifTag member */ static int __media_svc_get_exif_gps_double(ExifData *ed, double *value, long tagtype) { - int ret = MS_MEDIA_ERR_NONE; ExifEntry *entry; char gps_buf[MEDIA_SVC_METADATA_LEN_MAX + 1] = {0, }; double tmp_arr[3] = { 0.0, 0.0, 0.0 }; + int i = 0; + char **tmp_split = NULL; media_svc_retv_if(!ed, MS_MEDIA_ERR_INVALID_PARAMETER); media_svc_retv_if(!value, MS_MEDIA_ERR_INVALID_PARAMETER); @@ -215,8 +178,17 @@ static int __media_svc_get_exif_gps_double(ExifData *ed, double *value, long tag exif_entry_get_value(entry, gps_buf, sizeof(gps_buf)); gps_buf[strlen(gps_buf)] = '\0'; - ret = __media_svc_split_to_double(gps_buf, tmp_arr); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); + tmp_split = g_strsplit(gps_buf, ",", -1); + if (g_strv_length(tmp_split) != 3) { + g_strfreev(tmp_split); + media_svc_error("Wrong GPS format"); + return MS_MEDIA_ERR_INTERNAL; + } + + for (i = 0; i < 3; i++) + tmp_arr[i] = g_strtod(tmp_split[i], NULL); + + g_strfreev(tmp_split); *value = tmp_arr[0] + tmp_arr[1] / 60 + tmp_arr[2] / 3600; -- 2.7.4