Use media type instead of category 35/261435/1
authorMinje Ahn <minje.ahn@samsung.com>
Mon, 19 Jul 2021 03:11:23 +0000 (12:11 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Mon, 19 Jul 2021 03:11:23 +0000 (12:11 +0900)
Change-Id: I4eb701b9c71cf7be41556a5a1f5d83e009529187
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
src/common/media-svc-util.c

index bf0db2d31c611cfe472a5f3287c472ebe9e81da8..e458a03107c4157d07ae8340b1560e0a50652028 100644 (file)
 
 #define MEDIA_SVC_FILE_EXT_LEN_MAX                             6                       /**< Maximum file ext lenth*/
 
-/* Define data structures for media type and mime type */
-#define MEDIA_SVC_CATEGORY_UNKNOWN     0x00000000      /**< Default */
-#define MEDIA_SVC_CATEGORY_ETC         0x00000001      /**< ETC category */
-#define MEDIA_SVC_CATEGORY_IMAGE       0x00000002      /**< Image category */
-#define MEDIA_SVC_CATEGORY_VIDEO       0x00000004      /**< Video category */
-#define MEDIA_SVC_CATEGORY_MUSIC       0x00000008      /**< Music category */
-#define MEDIA_SVC_CATEGORY_SOUND       0x00000010      /**< Sound category */
-#define MEDIA_SVC_CATEGORY_PVR 0x00000020      /**< PVR category */
-#define MEDIA_SVC_CATEGORY_UHD 0x00000040      /**< UHD category */
-#define MEDIA_SVC_CATEGORY_SCSA        0x00000080      /**< SCSA category */
-#define MEDIA_SVC_CATEGORY_BOOK        0x00000100      /**< ebook category */
-
 #define CONTENT_TYPE_NUM 5
 #define MUSIC_MIME_NUM 29
 #define SOUND_MIME_NUM 1
@@ -92,7 +80,7 @@
 
 typedef struct {
        char content_type[15];
-       int category_by_mime;
+       media_svc_media_type_e media_type;
 } _media_svc_content_table_s;
 
 enum Exif_Orientation {
@@ -108,11 +96,11 @@ enum Exif_Orientation {
 };
 
 static const _media_svc_content_table_s content_category[CONTENT_TYPE_NUM] = {
-       {"audio", MEDIA_SVC_CATEGORY_SOUND},
-       {"image", MEDIA_SVC_CATEGORY_IMAGE},
-       {"video", MEDIA_SVC_CATEGORY_VIDEO},
-       {"application", MEDIA_SVC_CATEGORY_ETC},
-       {"text", MEDIA_SVC_CATEGORY_ETC},
+       {"audio", MEDIA_SVC_MEDIA_TYPE_SOUND},
+       {"image", MEDIA_SVC_MEDIA_TYPE_IMAGE},
+       {"video", MEDIA_SVC_MEDIA_TYPE_VIDEO},
+       {"application", MEDIA_SVC_MEDIA_TYPE_OTHER},
+       {"text", MEDIA_SVC_MEDIA_TYPE_OTHER},
 };
 
 static const char music_mime_table[MUSIC_MIME_NUM][MIME_LENGTH] = {
@@ -327,41 +315,38 @@ static time_t __media_svc_get_timeline_from_str(const char *timstr)
        return 0;
 }
 
-static int __media_svc_get_content_type_from_mime(const char *path, const char *mimetype, int *category)
+static int __media_svc_get_media_type(const char *path, const char *mime_type, media_svc_media_type_e *media_type)
 {
        int idx = 0;
 
-       media_svc_retvm_if(path == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "path is null");
-       media_svc_retvm_if(mimetype == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "mimetype is null");
-       media_svc_retvm_if(category == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "category is null");
+       media_svc_retvm_if(!path, MS_MEDIA_ERR_INVALID_PARAMETER, "path is null");
+       media_svc_retvm_if(!mime_type, MS_MEDIA_ERR_INVALID_PARAMETER, "mime_type is null");
+       media_svc_retvm_if(!media_type, MS_MEDIA_ERR_INVALID_PARAMETER, "media_type is null");
 
-       *category = MEDIA_SVC_CATEGORY_UNKNOWN;
+       *media_type = MEDIA_SVC_MEDIA_TYPE_OTHER;
 
-       /*categorize from mimetype */
+       /*categorize from mime_type */
        for (idx = 0; idx < CONTENT_TYPE_NUM; idx++) {
-               if (strncmp(mimetype, content_category[idx].content_type, strlen(content_category[idx].content_type)) == 0) {
-                       *category = (*category | content_category[idx].category_by_mime);
+               if (strncmp(mime_type, content_category[idx].content_type, strlen(content_category[idx].content_type)) == 0) {
+                       *media_type = content_category[idx].media_type;
                        break;
                }
        }
 
        /*in application type, exitst sound file ex) x-smafs, asf */
-       if (*category & MEDIA_SVC_CATEGORY_ETC) {
+       if (*media_type == MEDIA_SVC_MEDIA_TYPE_OTHER) {
                int prefix_len = strlen(content_category[3].content_type) + 1;
                char *ext = NULL;
 
                for (idx = 0; idx < SOUND_MIME_NUM; idx++) {
-                       if (strstr(mimetype + prefix_len, sound_mime_table[idx]) != NULL) {
-                               *category ^= MEDIA_SVC_CATEGORY_ETC;
-                               *category |= MEDIA_SVC_CATEGORY_SOUND;
+                       if (strstr(mime_type + prefix_len, sound_mime_table[idx]) != NULL) {
+                               *media_type = MEDIA_SVC_MEDIA_TYPE_SOUND;
                                break;
                        }
                }
 
-               if (strncasecmp(mimetype, "text/x-iMelody", strlen("text/x-iMelody")) == 0) {
-                       *category ^= MEDIA_SVC_CATEGORY_ETC;
-                       *category |= MEDIA_SVC_CATEGORY_SOUND;
-               }
+               if (strncasecmp(mime_type, "text/x-iMelody", strlen("text/x-iMelody")) == 0)
+                       *media_type = MEDIA_SVC_MEDIA_TYPE_SOUND;
 
                /*"asf" must check video stream and then categorize in directly. */
                ext = strrchr(path, '.');
@@ -373,41 +358,34 @@ static int __media_svc_get_content_type_from_mime(const char *path, const char *
 
                                err = mm_file_get_stream_info(path, &audio, &video);
                                if (err == 0) {
-                                       if (audio > 0 && video == 0) {
-                                               *category ^= MEDIA_SVC_CATEGORY_ETC;
-                                               *category |= MEDIA_SVC_CATEGORY_MUSIC;
-                                       } else {
-                                               *category ^= MEDIA_SVC_CATEGORY_ETC;
-                                               *category |= MEDIA_SVC_CATEGORY_VIDEO;
-                                       }
+                                       if (audio > 0 && video == 0)
+                                               *media_type = MEDIA_SVC_MEDIA_TYPE_MUSIC;
+                                       else
+                                               *media_type = MEDIA_SVC_MEDIA_TYPE_VIDEO;
                                }
                        }
                }
 
-               if (g_str_has_suffix(mimetype, "epub+zip") || g_str_has_suffix(mimetype, "pdf")) {
-                       *category ^= MEDIA_SVC_CATEGORY_ETC;
-                       *category |= MEDIA_SVC_CATEGORY_BOOK;
-               }
+               if (g_str_has_suffix(mime_type, "epub+zip") || g_str_has_suffix(mime_type, "pdf"))
+                       *media_type = MEDIA_SVC_MEDIA_TYPE_BOOK;
        }
 
        /*check music file in sound files. */
-       if (*category & MEDIA_SVC_CATEGORY_SOUND) {
+       if (*media_type == MEDIA_SVC_MEDIA_TYPE_SOUND) {
                int prefix_len = strlen(content_category[0].content_type) + 1;
 
                for (idx = 0; idx < MUSIC_MIME_NUM; idx++) {
-                       if (strcmp(mimetype + prefix_len, music_mime_table[idx]) == 0) {
-                               *category ^= MEDIA_SVC_CATEGORY_SOUND;
-                               *category |= MEDIA_SVC_CATEGORY_MUSIC;
+                       if (strcmp(mime_type + prefix_len, music_mime_table[idx]) == 0) {
+                               *media_type = MEDIA_SVC_MEDIA_TYPE_MUSIC;
                                break;
                        }
                }
 
                /*m3u file is playlist but mime type is "audio/x-mpegurl". but It has to be classified into MS_CATEGORY_ETC since playlist is not a sound track*/
-               if (strncasecmp(mimetype, "audio/x-mpegurl", strlen("audio/x-mpegurl")) == 0) {
-                       *category ^= MEDIA_SVC_CATEGORY_SOUND;
-                       *category |= MEDIA_SVC_CATEGORY_ETC;
-               }
-       } else if (*category & MEDIA_SVC_CATEGORY_VIDEO) {
+               if (strncasecmp(mime_type, "audio/x-mpegurl", strlen("audio/x-mpegurl")) == 0)
+                       *media_type = MEDIA_SVC_MEDIA_TYPE_OTHER;
+
+       } else if (*media_type == MEDIA_SVC_VIDEO_VIDEO) {
                /*some video files don't have video stream. in this case it is categorize as music. */
                char *ext = NULL;
                /*"3gp" and "mp4" must check video stream and then categorize in directly. */
@@ -421,11 +399,9 @@ static int __media_svc_get_content_type_from_mime(const char *path, const char *
                                err = mm_file_get_stream_info(path, &audio, &video);
                                if (err == 0) {
                                        if (audio > 0 && video == 0) {
-                                               *category ^= MEDIA_SVC_CATEGORY_VIDEO;
-                                               *category |= MEDIA_SVC_CATEGORY_MUSIC;
+                                               *media_type = MEDIA_SVC_MEDIA_TYPE_MUSIC;
                                        }
                                }
-                               /*even though error occued in mm_file_get_stream_info return MS_MEDIA_ERR_NONE. fail means invalid media content. */
                        }
                }
        }
@@ -433,38 +409,6 @@ static int __media_svc_get_content_type_from_mime(const char *path, const char *
        return MS_MEDIA_ERR_NONE;
 }
 
-static int __media_svc_get_media_type(const char *path, const char *mime_type, media_svc_media_type_e *media_type)
-{
-       int ret = MS_MEDIA_ERR_NONE;
-       int category = 0;
-
-       ret = __media_svc_get_content_type_from_mime(path, mime_type, &category);
-       if (ret != MS_MEDIA_ERR_NONE)
-               media_svc_error("__media_svc_get_content_type_from_mime failed : %d", ret);
-
-       switch (category) {
-       case MEDIA_SVC_CATEGORY_SOUND:
-               *media_type = MEDIA_SVC_MEDIA_TYPE_SOUND;
-               break;
-       case MEDIA_SVC_CATEGORY_MUSIC:
-               *media_type = MEDIA_SVC_MEDIA_TYPE_MUSIC;
-               break;
-       case MEDIA_SVC_CATEGORY_IMAGE:
-               *media_type = MEDIA_SVC_MEDIA_TYPE_IMAGE;
-               break;
-       case MEDIA_SVC_CATEGORY_VIDEO:
-               *media_type = MEDIA_SVC_MEDIA_TYPE_VIDEO;
-               break;
-       case MEDIA_SVC_CATEGORY_BOOK:
-               *media_type = MEDIA_SVC_MEDIA_TYPE_BOOK;
-               break;
-       default:
-               *media_type = MEDIA_SVC_MEDIA_TYPE_OTHER;
-       }
-
-       return ret;
-}
-
 /*
 drm_contentifo is not NULL, if the file is OMA DRM.
 If the file is not OMA DRM, drm_contentinfo must be NULL.