[0.6.133] add unsupported codec handling 45/190345/2 accepted/tizen/5.0/unified/20181102.020128 accepted/tizen/unified/20181002.093238 submit/tizen/20181001.075439 submit/tizen_5.0/20181101.000003
authorEunhae Choi <eunhae1.choi@samsung.com>
Mon, 1 Oct 2018 06:58:36 +0000 (15:58 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Mon, 1 Oct 2018 07:02:08 +0000 (16:02 +0900)
- add missed patch which was added at 2.4
- divx codec plugin does not exist but
  application need to check it again.

Change-Id: I0c32fa0ceff81d9b820e0cbcd00f18c52a3ed810

packaging/libmm-player.spec
src/include/mm_player_ini.h
src/mm_player_ini.c
src/mm_player_priv.c
src/mm_player_tracks.c

index 7810ea2..528952b 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.6.132
+Version:    0.6.133
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 7eefa14..a4ecbda 100644 (file)
  * of each string item.
  */
 enum keyword_type {
-       KEYWORD_EXCLUDE,        // for element exclude keyworld
-       KEYWORD_DUMP,           // for dump element keyworld
-       KEYWORD_A_SW_CODEC,     // for audio sw codec
-       KEYWORD_V_SW_CODEC      // for video sw codec
+       KEYWORD_EXCLUDE,    // for element exclude keyworld
+       KEYWORD_DUMP,       // for dump element keyworld
+       KEYWORD_UNSUPPORTED_CODEC, // for un-supported codec
+       KEYWORD_A_SW_CODEC, // for audio sw codec
+       KEYWORD_V_SW_CODEC // for video sw codec
 };
 
 typedef struct __mm_player_ini {
@@ -80,6 +81,7 @@ typedef struct __mm_player_ini {
 
        gchar gst_param[5][PLAYER_INI_MAX_PARAM_STRLEN];
        gchar exclude_element_keyword[PLAYER_INI_MAX_ELEMENT][PLAYER_INI_MAX_STRLEN];
+       gchar unsupported_codec_keyword[PLAYER_INI_MAX_ELEMENT][PLAYER_INI_MAX_STRLEN];
        gboolean async_start;
        gboolean disable_segtrap;
        gint pcm_buffer_size;
@@ -123,56 +125,57 @@ typedef struct __mm_player_ini {
 
 /* default values if each values are not specified in inifile */
 /* general */
-#define DEFAULT_AUDIO_EFFECT_ELEMENT                   ""
-#define DEFAULT_USE_AUDIO_EFFECT_PRESET                        FALSE
-#define DEFAULT_AUDIO_EFFECT_PRESET_LIST               ""
-#define DEFAULT_AUDIO_EFFECT_PRESET_LIST_EARPHONE_ONLY ""
-#define DEFAULT_USE_AUDIO_EFFECT_CUSTOM                        FALSE
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_LIST               ""
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_LIST_EARPHONE_ONLY ""
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_BAND_NUM                0
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_BAND_WIDTH              ""
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_BAND_FREQ               ""
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_MIN             0
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_MAX             0
-#define DEFAULT_AUDIO_EFFECT_CUSTOM_EXT_NUM            0
-#define DEFAULT_USE_SINK_HANDLER                       TRUE
-#define DEFAULT_SKIP_RESCAN                            TRUE
-#define DEFAULT_GENERATE_DOT                           FALSE
-#define DEFAULT_USE_SYSTEM_CLOCK               TRUE
-#define DEFAULT_DELAY_BEFORE_REPEAT                    50 /* msec */
-#define DEFAULT_EOS_DELAY                              0 /* msec */
-#define DEFAULT_VIDEOSINK_OVERLAY                      "tizenwlsink"
-#define DEFAULT_VIDEOSINK_EVAS                         "evasimagesink"
-#define DEFAULT_VIDEOSINK_FAKE                         "fakesink"
-#define DEFAULT_AUDIORESAMPLER                 "audioresample"
-#define DEFAULT_AUDIOSINK                              "pulsesink"
-#define DEFAULT_CODEC_HW                       ""
-#define DEFAULT_CODEC_SW                       ""
-#define DEFAULT_GST_PARAM                              ""
-#define DEFAULT_EXCLUDE_KEYWORD                        ""
-#define DEFAULT_ASYNC_START                            TRUE
-#define DEFAULT_DISABLE_SEGTRAP                                TRUE
-#define DEFAULT_VIDEO_CONVERTER                                ""
-#define DEFAULT_VIDEO_PLAYBACK_SUPPORTED                               TRUE
-#define DEFAULT_LIVE_STATE_CHANGE_TIMEOUT              30 /* sec */
-#define DEFAULT_LOCALPLAYBACK_STATE_CHANGE_TIMEOUT     10 /* sec */
-#define DEFAULT_PCM_BUFFER_SIZE                        51200 /* bytes */
-#define DEFAULT_NUM_OF_VIDEO_BO                        10
-#define DEFAULT_TIMEOUT_OF_VIDEO_BO            10 /* sec */
+#define DEFAULT_AUDIO_EFFECT_ELEMENT                      ""
+#define DEFAULT_USE_AUDIO_EFFECT_PRESET                   FALSE
+#define DEFAULT_AUDIO_EFFECT_PRESET_LIST                  ""
+#define DEFAULT_AUDIO_EFFECT_PRESET_LIST_EARPHONE_ONLY    ""
+#define DEFAULT_USE_AUDIO_EFFECT_CUSTOM                   FALSE
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_LIST                  ""
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_LIST_EARPHONE_ONLY    ""
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_BAND_NUM           0
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_BAND_WIDTH         ""
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_BAND_FREQ          ""
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_MIN                0
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_EQ_MAX                0
+#define DEFAULT_AUDIO_EFFECT_CUSTOM_EXT_NUM               0
+#define DEFAULT_USE_SINK_HANDLER                          TRUE
+#define DEFAULT_SKIP_RESCAN                               TRUE
+#define DEFAULT_GENERATE_DOT                              FALSE
+#define DEFAULT_USE_SYSTEM_CLOCK                          TRUE
+#define DEFAULT_DELAY_BEFORE_REPEAT                       50 /* msec */
+#define DEFAULT_EOS_DELAY                                 0 /* msec */
+#define DEFAULT_VIDEOSINK_OVERLAY                         "tizenwlsink"
+#define DEFAULT_VIDEOSINK_EVAS                            "evasimagesink"
+#define DEFAULT_VIDEOSINK_FAKE                            "fakesink"
+#define DEFAULT_AUDIORESAMPLER                            "audioresample"
+#define DEFAULT_AUDIOSINK                                 "pulsesink"
+#define DEFAULT_CODEC_HW                                  ""
+#define DEFAULT_CODEC_SW                                  ""
+#define DEFAULT_GST_PARAM                                 ""
+#define DEFAULT_EXCLUDE_KEYWORD                           ""
+#define DEFAULT_UNSUPPORTED_CODEC_KEYWORD                 ""
+#define DEFAULT_ASYNC_START                               TRUE
+#define DEFAULT_DISABLE_SEGTRAP                           TRUE
+#define DEFAULT_VIDEO_CONVERTER                           ""
+#define DEFAULT_VIDEO_PLAYBACK_SUPPORTED                  TRUE
+#define DEFAULT_LIVE_STATE_CHANGE_TIMEOUT                 30 /* sec */
+#define DEFAULT_LOCALPLAYBACK_STATE_CHANGE_TIMEOUT        10 /* sec */
+#define DEFAULT_PCM_BUFFER_SIZE                           51200 /* bytes */
+#define DEFAULT_NUM_OF_VIDEO_BO                           10
+#define DEFAULT_TIMEOUT_OF_VIDEO_BO                       10 /* sec */
 
 /* http streaming */
-#define DEFAULT_HTTPSRC                                "souphttpsrc"
-#define DEFAULT_HTTP_USE_FILE_BUFFER   FALSE
-#define DEFAULT_HTTP_RING_BUFFER_SIZE  (20*1024*1024) /* bytes : 20MBytes */
-#define DEFAULT_HTTP_BUFFERING_LIMIT   99.0            /* percent */
-#define DEFAULT_HTTP_MAX_SIZE_BYTES            1048576         /* bytes : 1 MBytes  */
-#define DEFAULT_HTTP_BUFFERING_TIME            1.2                     /* sec */
-#define DEFAULT_HTTP_TIMEOUT                   -1                      /* infinite retry */
+#define DEFAULT_HTTPSRC                                   "souphttpsrc"
+#define DEFAULT_HTTP_USE_FILE_BUFFER                      FALSE
+#define DEFAULT_HTTP_RING_BUFFER_SIZE                     (20*1024*1024) /* bytes : 20MBytes */
+#define DEFAULT_HTTP_BUFFERING_LIMIT                      99.0      /* percent */
+#define DEFAULT_HTTP_MAX_SIZE_BYTES                       1048576   /* bytes : 1 MBytes  */
+#define DEFAULT_HTTP_BUFFERING_TIME                       1.2       /* sec */
+#define DEFAULT_HTTP_TIMEOUT                              -1        /* infinite retry */
 
 /* dump buffer for debug */
-#define DEFAULT_DUMP_ELEMENT_KEYWORD                           ""
-#define DEFAULT_DUMP_ELEMENT_PATH                              "/tmp/"
+#define DEFAULT_DUMP_ELEMENT_KEYWORD                      ""
+#define DEFAULT_DUMP_ELEMENT_PATH                         "/tmp/"
 
 /* NOTE : following content should be same with above default values */
 /* FIXIT : need smarter way to generate default ini file. */
@@ -199,6 +202,9 @@ delay before repeat = 50 ; msec\n\
 ; comma separated list of tocken which elemnts has it in it's name will not be used \n\
 element exclude keyword = \n\
 \n\
+; comma separated list of tocken \n\
+unsupported codec keyword = \n\
+\n\
 async start = yes \n\
 \n\
 ; parameters for initializing gstreamer \n\
index 91c1efa..abd9417 100644 (file)
@@ -170,6 +170,9 @@ mm_player_ini_load(mm_player_ini_t* ini)
                __get_element_list(ini,
                        iniparser_getstring(dict, "general:element exclude keyword", DEFAULT_EXCLUDE_KEYWORD), KEYWORD_EXCLUDE);
 
+               __get_element_list(ini,
+                       iniparser_getstring(dict, "general:unsupported codec keyword", DEFAULT_UNSUPPORTED_CODEC_KEYWORD), KEYWORD_UNSUPPORTED_CODEC);
+
                MMPLAYER_INI_GET_STRING(dict, ini->gst_param[0], "general:gstparam1", DEFAULT_GST_PARAM);
                MMPLAYER_INI_GET_STRING(dict, ini->gst_param[1], "general:gstparam2", DEFAULT_GST_PARAM);
                MMPLAYER_INI_GET_STRING(dict, ini->gst_param[2], "general:gstparam3", DEFAULT_GST_PARAM);
@@ -220,6 +223,7 @@ mm_player_ini_load(mm_player_ini_t* ini)
                __get_element_list(ini, DEFAULT_CODEC_SW, KEYWORD_A_SW_CODEC);
                __get_element_list(ini, DEFAULT_CODEC_SW, KEYWORD_V_SW_CODEC);
                __get_element_list(ini, DEFAULT_EXCLUDE_KEYWORD, KEYWORD_EXCLUDE);
+               __get_element_list(ini, DEFAULT_UNSUPPORTED_CODEC_KEYWORD, KEYWORD_UNSUPPORTED_CODEC);
 
                strncpy(ini->gst_param[0], DEFAULT_GST_PARAM, PLAYER_INI_MAX_PARAM_STRLEN - 1);
                strncpy(ini->gst_param[1], DEFAULT_GST_PARAM, PLAYER_INI_MAX_PARAM_STRLEN - 1);
@@ -284,6 +288,9 @@ mm_player_ini_load(mm_player_ini_t* ini)
        for (idx = 0; ini->dump_element_keyword[idx][0] != '\0'; idx++)
                LOGD("dump_element_keyword [%d] : %s\n", idx, ini->dump_element_keyword[idx]);
 
+       for (idx = 0; ini->unsupported_codec_keyword[idx][0] != '\0'; idx++)
+               LOGD("unsupported_codec_keyword [%d] : %s\n", idx, ini->dump_element_keyword[idx]);
+
        /* http streaming */
        LOGD("httpsrc element : %s\n", ini->httpsrc_element);
        LOGD("http buffering limit : %f \n", ini->http_buffering_limit);
@@ -505,6 +512,21 @@ void __get_element_list(mm_player_ini_t* ini, gchar* str, int keyword_type)
 
                break;
        }
+       case KEYWORD_UNSUPPORTED_CODEC:
+       {
+               for (walk = list; *walk; walk++) {
+                       strncpy(ini->unsupported_codec_keyword[i], *walk, (PLAYER_INI_MAX_STRLEN - 1));
+
+                       g_strstrip(ini->unsupported_codec_keyword[i]);
+
+                       ini->unsupported_codec_keyword[i][PLAYER_INI_MAX_STRLEN -1] = '\0';
+
+                       i++;
+               }
+               /* mark last item to NULL */
+               ini->unsupported_codec_keyword[i][0] = '\0';
+               break;
+       }
        case KEYWORD_V_SW_CODEC:
        {
                for (walk = list; *walk; walk++) {
index d4ad871..1c72984 100644 (file)
@@ -5408,6 +5408,7 @@ _mmplayer_create_player(MMHandleType handle)
                        MM_RESOURCE_MANAGER_APP_CLASS_MEDIA, __resource_release_cb, player,
                        &player->resource_manager)) {
                LOGE("failed to initialize resource manager\n");
+               ret = MM_ERROR_PLAYER_INTERNAL;
                goto ERROR;
        }
 
@@ -8028,7 +8029,7 @@ GstCaps* caps, GstElementFactory* factory, gpointer data)
        /* filtering exclude keyword */
        for (idx = 0; player->ini.exclude_element_keyword[idx][0] != '\0'; idx++) {
                if (strstr(factory_name, player->ini.exclude_element_keyword[idx])) {
-                       LOGW("skipping [%s] by exculde keyword [%s]\n",
+                       LOGW("skipping [%s] by exculde keyword [%s]",
                                        factory_name, player->ini.exclude_element_keyword[idx]);
 
                        result = GST_AUTOPLUG_SELECT_SKIP;
@@ -8036,6 +8037,15 @@ GstCaps* caps, GstElementFactory* factory, gpointer data)
                }
        }
 
+       for (idx = 0; player->ini.unsupported_codec_keyword[idx][0] != '\0'; idx++) {
+               if (caps_str && strstr(caps_str, player->ini.unsupported_codec_keyword[idx])) {
+                       LOGW("skipping [%s] by unsupported codec keyword [%s]",
+                               factory_name, player->ini.unsupported_codec_keyword[idx]);
+                       result = GST_AUTOPLUG_SELECT_SKIP;
+                       goto DONE;
+               }
+       }
+
        /* exclude webm format */
        /* NOTE : MSL have to post MM_ERROR_PLAYER_NOT_SUPPORTED_FORMAT
         * because webm format is not supportable.
index 627ad41..ca68662 100644 (file)
@@ -262,6 +262,13 @@ int _mmplayer_get_current_track(MMHandleType hplayer, MMPlayerTrackType type, in
                        }
                        total_track_count--;
                }
+
+               if (total_track_count == 0) {
+                       *index = 0;
+                       LOGE("failed to find current language index");
+                       ret = MM_ERROR_PLAYER_INTERNAL;
+                       goto EXIT;
+               }
        } else {
                if (player->selector[type].total_track_num <= 0) {
                        ret = MM_ERROR_PLAYER_NO_OP;