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;
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;
}
}
content_info->media_meta.height = exif_height;
}
- if (ed != NULL) exif_data_unref(ed);
+ if (ed)
+ exif_data_unref(ed);
GET_WIDTH_HEIGHT:
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;
}
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;
}