Code cleanup 46/223546/4
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 30 Jan 2020 23:49:21 +0000 (08:49 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Thu, 6 Feb 2020 00:07:20 +0000 (09:07 +0900)
1. Improve image metadata extraction function
2. Reduce function call related to metadata of integer type
3. Separate GPS metadata extraction function (ExifTag enum set issue)

Change-Id: I664bb02c3b0180abe9145f2a74561e59c159763c
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
src/common/media-svc-util.c

index 86c9473..f1cfa64 100644 (file)
@@ -187,89 +187,94 @@ static int __media_svc_split_to_double(char *input, double *arr)
        return MS_MEDIA_ERR_NONE;
 }
 
-static int __media_svc_get_exif_info(ExifData *ed, char *buf, int *i_value, double *d_value, long tagtype)
+/* 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;
-       ExifTag tag;
-
-       if (ed == NULL)
-               return MS_MEDIA_ERR_INVALID_PARAMETER;
+       char gps_buf[MEDIA_SVC_METADATA_LEN_MAX + 1] = {0, };
+       double tmp_arr[3] = { 0.0, 0.0, 0.0 };
 
-       tag = tagtype;
+       media_svc_retv_if(!ed, MS_MEDIA_ERR_INVALID_PARAMETER);
+       media_svc_retv_if(!value, MS_MEDIA_ERR_INVALID_PARAMETER);
 
-       entry = exif_data_get_entry(ed, tag);
+       entry = exif_data_get_entry(ed, tagtype);
        if (entry) {
-               /* Get the contents of the tag in human-readable form */
-               if (tag == EXIF_TAG_ORIENTATION ||
-                       tag == EXIF_TAG_PIXEL_X_DIMENSION ||
-                       tag == EXIF_TAG_PIXEL_Y_DIMENSION ||
-                       tag == EXIF_TAG_ISO_SPEED_RATINGS) {
-
-                       if (i_value == NULL) {
-                               media_svc_debug("i_value is NULL");
-                               return MS_MEDIA_ERR_INVALID_PARAMETER;
-                       }
-
-                       ExifByteOrder mByteOrder = exif_data_get_byte_order(ed);
-                       short exif_value = exif_get_short(entry->data, mByteOrder);
-                       *i_value = (int)exif_value;
-
-               } else if (tag == EXIF_TAG_GPS_LATITUDE || tag == EXIF_TAG_GPS_LONGITUDE || tag == EXIF_TAG_GPS_ALTITUDE) {
-
-                       if (d_value == NULL) {
-                               media_svc_debug("d_value is NULL");
-                               return MS_MEDIA_ERR_INVALID_PARAMETER;
-                       }
-
-                       /* Get the contents of the tag in human-readable form */
-                       char gps_buf[MEDIA_SVC_METADATA_LEN_MAX + 1] = {0, };
-                       exif_entry_get_value(entry, gps_buf, sizeof(gps_buf));
-                       gps_buf[strlen(gps_buf)] = '\0';
-                       int ret = MS_MEDIA_ERR_NONE;
-
-                       double tmp_arr[3] = { 0.0, 0.0, 0.0 };
+               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);
+               ret = __media_svc_split_to_double(gps_buf, tmp_arr);
+               media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
 
-                       *d_value = tmp_arr[0] + tmp_arr[1] / 60 + tmp_arr[2] / 3600;
-               } else if (tag == EXIF_TAG_EXPOSURE_TIME) {
-
-                       if (buf == NULL) {
-                               media_svc_debug("buf is NULL");
-                               return MS_MEDIA_ERR_INVALID_PARAMETER;
-                       }
-
-                       ExifByteOrder mByteOrder = exif_data_get_byte_order(ed);
-                       ExifRational mRational = exif_get_rational(entry->data, mByteOrder);
-                       long numerator = mRational.numerator;
-                       long denominator = mRational.denominator;
-                       snprintf(buf, MEDIA_SVC_METADATA_LEN_MAX, "%ld/%ld", numerator, denominator);
-
-               } else if (tag == EXIF_TAG_FNUMBER) {
+               *value = tmp_arr[0] + tmp_arr[1] / 60 + tmp_arr[2] / 3600;
+       }
 
-                       if (d_value == NULL) {
-                               media_svc_debug("d_value is NULL");
-                               return MS_MEDIA_ERR_INVALID_PARAMETER;
-                       }
+       return MS_MEDIA_ERR_NONE;
+}
 
-                       ExifByteOrder mByteOrder = exif_data_get_byte_order(ed);
-                       ExifRational mRational = exif_get_rational(entry->data, mByteOrder);
-                       long numerator = mRational.numerator;
-                       long denominator = mRational.denominator;
+static int __media_svc_get_exif_gps_str(ExifData *ed, char *value, long tagtype)
+{
+       ExifEntry *entry;
 
-                       *d_value = ((numerator*1.0)/(denominator*1.0));
+       media_svc_retv_if(!ed, MS_MEDIA_ERR_INVALID_PARAMETER);
+       media_svc_retv_if(!value, MS_MEDIA_ERR_INVALID_PARAMETER);
 
-               } else {
+       entry = exif_data_get_entry(ed, tagtype);
+       if (entry) {
+               exif_entry_get_value(entry, value, MEDIA_SVC_METADATA_LEN_MAX);
+               value[strlen(value)] = '\0';
+       }
 
-                       if (buf == NULL) {
-                               media_svc_debug("buf is NULL");
-                               return MS_MEDIA_ERR_INVALID_PARAMETER;
-                       }
+       return MS_MEDIA_ERR_NONE;
+}
 
-                       exif_entry_get_value(entry, buf, MEDIA_SVC_METADATA_LEN_MAX);
-                       buf[strlen(buf)] = '\0';
-               }
+static int __media_svc_get_exif_info(ExifData *ed, char *buf, int *i_value, double *d_value, ExifTag tagtype)
+{
+       ExifEntry *entry;
+       ExifByteOrder mByteOrder;
+       ExifRational mRational;
+       long numerator, denominator;
+
+       media_svc_retv_if(!ed, MS_MEDIA_ERR_INVALID_PARAMETER);
+
+       entry = exif_data_get_entry(ed, tagtype);
+       media_svc_retv_if(!entry, MS_MEDIA_ERR_NONE);
+
+       switch (tagtype) {
+       case EXIF_TAG_ORIENTATION:
+       case EXIF_TAG_PIXEL_X_DIMENSION:
+       case EXIF_TAG_PIXEL_Y_DIMENSION:
+       case EXIF_TAG_ISO_SPEED_RATINGS:
+               media_svc_retvm_if(!i_value, MS_MEDIA_ERR_INVALID_PARAMETER, "i_value is NULL");
+
+               mByteOrder = exif_data_get_byte_order(ed);
+               short exif_value = exif_get_short(entry->data, mByteOrder);
+               *i_value = (int)exif_value;
+               break;
+       case EXIF_TAG_EXPOSURE_TIME:
+               media_svc_retvm_if(!buf, MS_MEDIA_ERR_INVALID_PARAMETER, "buf is NULL");
+
+               mByteOrder = exif_data_get_byte_order(ed);
+               mRational = exif_get_rational(entry->data, mByteOrder);
+               numerator = mRational.numerator;
+               denominator = mRational.denominator;
+               snprintf(buf, MEDIA_SVC_METADATA_LEN_MAX, "%ld/%ld", numerator, denominator);
+               break;
+       case EXIF_TAG_FNUMBER:
+               media_svc_retvm_if(!d_value, MS_MEDIA_ERR_INVALID_PARAMETER, "d_value is NULL");
+
+               mByteOrder = exif_data_get_byte_order(ed);
+               mRational = exif_get_rational(entry->data, mByteOrder);
+               numerator = mRational.numerator;
+               denominator = mRational.denominator;
+
+               *d_value = ((numerator*1.0)/(denominator*1.0));
+               break;
+       default:
+               media_svc_retvm_if(!buf, MS_MEDIA_ERR_INVALID_PARAMETER, "buf is NULL");
+
+               exif_entry_get_value(entry, buf, MEDIA_SVC_METADATA_LEN_MAX);
+               buf[strlen(buf)] = '\0';
        }
 
        return MS_MEDIA_ERR_NONE;
@@ -997,23 +1002,20 @@ int _media_svc_extract_image_metadata(media_svc_content_info_s *content_info)
        content_info->media_meta.height = 0;
 
        memset(buf, 0x00, sizeof(buf));
-       if (__media_svc_get_exif_info(ed, NULL, NULL, &value, EXIF_TAG_GPS_LATITUDE) == MS_MEDIA_ERR_NONE) {
-               if (__media_svc_get_exif_info(ed, buf, NULL, NULL, EXIF_TAG_GPS_LATITUDE_REF) == MS_MEDIA_ERR_NONE) {
-                       if (strlen(buf) > 0) {
-                               if (strcmp(buf, "S") == 0)
-                                       value = -1 * value;
-                       }
+       if (__media_svc_get_exif_gps_double(ed, &value, EXIF_TAG_GPS_LATITUDE) == MS_MEDIA_ERR_NONE) {
+               if (__media_svc_get_exif_gps_str(ed, buf, EXIF_TAG_GPS_LATITUDE_REF) == MS_MEDIA_ERR_NONE) {
+                       if (!g_strcmp0(buf, "S"))
+                               value *= -1;
                        content_info->media_meta.latitude = value;
                }
        }
 
        memset(buf, 0x00, sizeof(buf));
-       if (__media_svc_get_exif_info(ed, NULL, NULL, &value, EXIF_TAG_GPS_LONGITUDE) == MS_MEDIA_ERR_NONE) {
-               if (__media_svc_get_exif_info(ed, buf, NULL, NULL, EXIF_TAG_GPS_LONGITUDE_REF) == MS_MEDIA_ERR_NONE) {
-                       if (strlen(buf) > 0) {
-                               if (strcmp(buf, "W") == 0)
-                                       value = -1 * value;
-                       }
+       if (__media_svc_get_exif_gps_double(ed, &value, EXIF_TAG_GPS_LONGITUDE) == MS_MEDIA_ERR_NONE) {
+               if (__media_svc_get_exif_gps_str(ed, buf, EXIF_TAG_GPS_LONGITUDE_REF) == MS_MEDIA_ERR_NONE) {
+                       if (!g_strcmp0(buf, "W"))
+                               value *= -1;
+
                        content_info->media_meta.longitude = value;
                }
        }
@@ -1100,7 +1102,8 @@ int _media_svc_extract_image_metadata(media_svc_content_info_s *content_info)
                        content_info->media_meta.height = exif_height;
        }
 
-       if (ed != NULL) exif_data_unref(ed);
+       if (ed)
+               exif_data_unref(ed);
 
 GET_WIDTH_HEIGHT:
 
@@ -1183,9 +1186,7 @@ int _media_svc_extract_music_metadata_for_update(media_svc_content_info_s *conte
        if (mmf_error == FILEINFO_ERROR_NONE && size > 0)
                content_info->media_meta.copyright = g_strdup(p);
 
-       mmf_error = mm_file_destroy_tag_attrs(tag);
-       if (mmf_error != FILEINFO_ERROR_NONE)
-               media_svc_error("fail to free tag attr - err(%x)", mmf_error);
+       mm_file_destroy_tag_attrs(tag);
 
        return MS_MEDIA_ERR_NONE;
 }
@@ -1421,94 +1422,31 @@ int _media_svc_extract_media_metadata(sqlite3 *handle, bool is_direct, media_svc
        else
                mmf_error = mm_file_create_content_attrs_simple(&content, content_info->path);
 
-       if (mmf_error == FILEINFO_ERROR_NONE) {
-               /*Common attribute*/
-               mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_DURATION, &content_info->media_meta.duration, NULL);
-               if (mmf_error != FILEINFO_ERROR_NONE) {
-                       media_svc_debug("fail to get duration attr - err(%x)", mmf_error);
-               } else {
-                       /*media_svc_debug("duration : %d", content_info->media_meta.duration); */
-               }
-
-               /*Sound/Music attribute*/
-               if ((content_info->media_type == MEDIA_SVC_MEDIA_TYPE_SOUND) || (content_info->media_type == MEDIA_SVC_MEDIA_TYPE_MUSIC)) {
-
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_AUDIO_BITRATE, &content_info->media_meta.bitrate, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get audio bitrate attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("bit rate : %d", content_info->media_meta.bitrate); */
-                       }
-
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_AUDIO_SAMPLERATE, &content_info->media_meta.samplerate, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get sample rate attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("sample rate : %d", content_info->media_meta.samplerate); */
-                       }
-
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_AUDIO_CHANNELS, &content_info->media_meta.channel, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get audio channels attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("channel : %d", content_info->media_meta.channel); */
-                       }
-
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_AUDIO_BITPERSAMPLE, &content_info->media_meta.bitpersample, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get audio bit per sample attr - err(%x)", mmf_error);
-                       } else {
-                               media_svc_debug("bitpersample : %d", content_info->media_meta.bitpersample);
-                       }
-               } else if (content_info->media_type == MEDIA_SVC_MEDIA_TYPE_VIDEO)      {       /*Video attribute*/
-                       int audio_bitrate = 0;
-                       int video_bitrate = 0;
-
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_AUDIO_BITRATE, &audio_bitrate, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get audio bitrate attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("audio bit rate : %d", audio_bitrate); */
-                       }
+       media_svc_retvm_if(mmf_error != FILEINFO_ERROR_NONE, MS_MEDIA_ERR_NONE, "mm_file_create_content_attrs failed");
 
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_VIDEO_BITRATE, &video_bitrate, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get audio bitrate attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("video bit rate : %d", video_bitrate); */
-                       }
+       if (content_info->media_type == MEDIA_SVC_MEDIA_TYPE_VIDEO) {
+               int audio_bitrate = 0;
+               int video_bitrate = 0;
 
-                       content_info->media_meta.bitrate = audio_bitrate + video_bitrate;
-
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_VIDEO_WIDTH, &content_info->media_meta.width, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get video width attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("width : %d", content_info->media_meta.width); */
-                       }
+               mm_file_get_attrs(content, MM_FILE_CONTENT_DURATION, &content_info->media_meta.duration,
+                       MM_FILE_CONTENT_AUDIO_BITRATE, &audio_bitrate,
+                       MM_FILE_CONTENT_VIDEO_BITRATE, &video_bitrate,
+                       MM_FILE_CONTENT_VIDEO_WIDTH, &content_info->media_meta.width,
+                       MM_FILE_CONTENT_VIDEO_HEIGHT, &content_info->media_meta.height,
+                       NULL);
 
-                       mmf_error = mm_file_get_attrs(content, MM_FILE_CONTENT_VIDEO_HEIGHT, &content_info->media_meta.height, NULL);
-                       if (mmf_error != FILEINFO_ERROR_NONE) {
-                               media_svc_debug("fail to get video height attr - err(%x)", mmf_error);
-                       } else {
-                               /*media_svc_debug("height : %d", content_info->media_meta.height); */
-                       }
-               } else {
-                       media_svc_error("Not support type");
-                       mmf_error = mm_file_destroy_content_attrs(content);
-                       if (mmf_error != FILEINFO_ERROR_NONE)
-                               media_svc_error("fail to free content attr - err(%x)", mmf_error);
-
-                       return MS_MEDIA_ERR_INVALID_PARAMETER;
-               }
-
-               mmf_error = mm_file_destroy_content_attrs(content);
-               if (mmf_error != FILEINFO_ERROR_NONE)
-                       media_svc_error("fail to free content attr - err(%x)", mmf_error);
+               content_info->media_meta.bitrate = audio_bitrate + video_bitrate;
        } else {
-               media_svc_error("error in mm_file_create_content_attrs [%d]", mmf_error);
+               mm_file_get_attrs(content, MM_FILE_CONTENT_DURATION, &content_info->media_meta.duration,
+                       MM_FILE_CONTENT_AUDIO_BITRATE, &content_info->media_meta.bitrate,
+                       MM_FILE_CONTENT_AUDIO_SAMPLERATE, &content_info->media_meta.samplerate,
+                       MM_FILE_CONTENT_AUDIO_CHANNELS, &content_info->media_meta.channel,
+                       MM_FILE_CONTENT_AUDIO_BITPERSAMPLE, &content_info->media_meta.bitpersample,
+                       NULL);
        }
 
+       mm_file_destroy_content_attrs(content);
+
        return MS_MEDIA_ERR_NONE;
 }