fix svace issue and remove hard coded path 95/75095/1 accepted/tizen/common/20160620.163309 accepted/tizen/ivi/20160620.082501 accepted/tizen/mobile/20160620.082339 accepted/tizen/tv/20160620.082401 accepted/tizen/wearable/20160620.082434 submit/tizen/20160617.072816
authorEunhae Choi <eunhae1.choi@samsung.com>
Thu, 16 Jun 2016 12:31:21 +0000 (21:31 +0900)
committerEunhae Choi <eunhae1.choi@samsung.com>
Thu, 16 Jun 2016 12:31:21 +0000 (21:31 +0900)
Change-Id: I4a9531ca374ab0c891953f2d5d25df92296b2d5b

configure.ac
packaging/libmm-player.spec
src/Makefile.am
src/include/mm_player_streaming.h
src/mm_player_priv.c
src/mm_player_streaming.c

index b2a745d..78b7204 100644 (file)
@@ -133,6 +133,8 @@ PKG_CHECK_MODULES(DLOG, dlog)
 AC_SUBST(DLOG_CFLAGS)
 AC_SUBST(DLOG_LIBS)
 
+PKG_CHECK_MODULES(TZPLATFORM_CONFIG, libtzplatform-config)
+
 AC_ARG_ENABLE(sdk, AC_HELP_STRING([--enable-sdk], [sdk build]),
         [
                case "${enableval}" in
index 6aa96af..6bc7031 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-player
 Summary:    Multimedia Framework Player Library
-Version:    0.5.82
+Version:    0.5.83
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
@@ -27,6 +27,7 @@ BuildRequires:  pkgconfig(icu-i18n)
 BuildRequires:  pkgconfig(capi-media-tool)
 BuildRequires:  pkgconfig(murphy-resource)
 BuildRequires:  pkgconfig(murphy-glib)
+BuildRequires:  pkgconfig(libtzplatform-config)
 
 %description
 Multimedia Framework Player Library files.
index 975dae4..de09303 100644 (file)
@@ -79,3 +79,6 @@ if WAYLAND_SUPPORT
 libmmfplayer_la_CFLAGS += $(GST_WAYLAND_CFLAGS)
 libmmfplayer_la_LIBADD += $(GST_WAYLAND_LIBS)
 endif
+
+libmmfplayer_la_CFLAGS += $(TZPLATFORM_CONFIG_CFLAGS)
+libmmfplayer_la_LIBADD += $(TZPLATFORM_CONFIG_LIBS)
\ No newline at end of file
index 31b0bf5..aabc508 100644 (file)
@@ -50,8 +50,6 @@
 #define DEFAULT_BUFFER_LOW_PERCENT 1.0      /* 1%       */
 #define DEFAULT_BUFFER_HIGH_PERCENT 99.0    /* 15%      */
 
-#define DEFAULT_FILE_BUFFER_PATH "/opt/media"
-
 #define STREAMING_USE_FILE_BUFFER
 #define STREAMING_USE_MEMORY_BUFFER
 
index 8d7fa44..9c5a897 100644 (file)
@@ -1306,26 +1306,28 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @
                                break;
                        }
 
-                       if ( player->pipeline && player->pipeline->textbin)
-                               __mmplayer_drop_subtitle(player, TRUE);
-
-                       if ( (player->audio_stream_cb) && (player->set_mode.pcm_extraction) && (!player->audio_stream_render_cb_ex))
+                       if (player->pipeline)
                        {
-                               GstPad *pad = NULL;
+                               if (player->pipeline->textbin)
+                                       __mmplayer_drop_subtitle(player, TRUE);
 
-                               pad = gst_element_get_static_pad (player->pipeline->audiobin[MMPLAYER_A_SINK].gst, "sink");
+                               if ( (player->audio_stream_cb) && (player->set_mode.pcm_extraction) && (!player->audio_stream_render_cb_ex))
+                               {
+                                       GstPad *pad = NULL;
 
-                               LOGD("release audio callback\n");
+                                       pad = gst_element_get_static_pad (player->pipeline->audiobin[MMPLAYER_A_SINK].gst, "sink");
 
-                               /* release audio callback */
-                               gst_pad_remove_probe (pad, player->audio_cb_probe_id);
-                               player->audio_cb_probe_id = 0;
-                               /* audio callback should be free because it can be called even though probe remove.*/
-                               player->audio_stream_cb = NULL;
-                               player->audio_stream_cb_user_param = NULL;
+                                       LOGD("release audio callback\n");
 
-                       }
+                                       /* release audio callback */
+                                       gst_pad_remove_probe (pad, player->audio_cb_probe_id);
+                                       player->audio_cb_probe_id = 0;
+                                       /* audio callback should be free because it can be called even though probe remove.*/
+                                       player->audio_stream_cb = NULL;
+                                       player->audio_stream_cb_user_param = NULL;
 
+                               }
+                       }
                        if ((player->audio_stream_render_cb_ex) && (!player->audio_stream_sink_sync)) {
                                __mmplayer_audio_stream_clear_buffer(player, TRUE);
                        }
@@ -1389,7 +1391,8 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @
                                }
                        }
 
-                       MMPLAYER_GENERATE_DOT_IF_ENABLED ( player, "pipeline-status-eos" );
+                       if (player->pipeline)
+                               MMPLAYER_GENERATE_DOT_IF_ENABLED ( player, "pipeline-status-eos" );
 
                        /* post eos message to application */
                        __mmplayer_handle_eos_delay( player, player->ini.eos_delay );
@@ -1526,7 +1529,9 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @
                {
                        MMPlayerGstElement *mainbin;
                        const GValue *voldstate, *vnewstate, *vpending;
-                       GstState oldstate, newstate, pending;
+                       GstState oldstate = GST_STATE_NULL;
+                       GstState newstate = GST_STATE_NULL;
+                       GstState pending = GST_STATE_NULL;
 
                        if ( ! ( player->pipeline && player->pipeline->mainbin ) )
                        {
@@ -1545,9 +1550,15 @@ __mmplayer_gst_callback(GstBus *bus, GstMessage *msg, gpointer data) // @
                        vnewstate = gst_structure_get_value (gst_message_get_structure(msg), "new-state");
                        vpending = gst_structure_get_value (gst_message_get_structure(msg), "pending-state");
 
+                       if (!voldstate || !vnewstate) {
+                               LOGE("received msg has wrong format.");
+                               break;
+                       }
+
                        oldstate = (GstState)voldstate->data[0].v_int;
                        newstate = (GstState)vnewstate->data[0].v_int;
-                       pending = (GstState)vpending->data[0].v_int;
+                       if (vpending)
+                               pending = (GstState)vpending->data[0].v_int;
 
                        LOGD("state changed [%s] : %s ---> %s     final : %s\n",
                                GST_OBJECT_NAME(GST_MESSAGE_SRC(msg)),
@@ -4532,7 +4543,7 @@ __mmplayer_gst_element_link_bucket(GList* element_bucket) // @
 
                if ( element && element->gst )
                {
-                       /* If next element is audio appsrc then make a seprate audio pipeline */
+                       /* If next element is audio appsrc then make a separate audio pipeline */
                        if (!strcmp(GST_ELEMENT_NAME(GST_ELEMENT(element->gst)),"audio_appsrc") ||
                                !strcmp(GST_ELEMENT_NAME(GST_ELEMENT(element->gst)),"subtitle_appsrc"))
                        {
@@ -4540,19 +4551,21 @@ __mmplayer_gst_element_link_bucket(GList* element_bucket) // @
                                continue;
                        }
 
-                       if ( GST_ELEMENT_LINK(GST_ELEMENT(prv_element->gst), GST_ELEMENT(element->gst)) )
-                       {
-                               LOGD("linking [%s] to [%s] success\n",
-                                       GST_ELEMENT_NAME(GST_ELEMENT(prv_element->gst)),
-                                       GST_ELEMENT_NAME(GST_ELEMENT(element->gst)) );
-                               successful_link_count ++;
-                       }
-                       else
-                       {
-                               LOGD("linking [%s] to [%s] failed\n",
-                                       GST_ELEMENT_NAME(GST_ELEMENT(prv_element->gst)),
-                                       GST_ELEMENT_NAME(GST_ELEMENT(element->gst)) );
-                               return -1;
+                       if (prv_element && prv_element->gst) {
+                               if ( GST_ELEMENT_LINK(GST_ELEMENT(prv_element->gst), GST_ELEMENT(element->gst)) )
+                               {
+                                       LOGD("linking [%s] to [%s] success\n",
+                                               GST_ELEMENT_NAME(GST_ELEMENT(prv_element->gst)),
+                                               GST_ELEMENT_NAME(GST_ELEMENT(element->gst)) );
+                                       successful_link_count ++;
+                               }
+                               else
+                               {
+                                       LOGD("linking [%s] to [%s] failed\n",
+                                               GST_ELEMENT_NAME(GST_ELEMENT(prv_element->gst)),
+                                               GST_ELEMENT_NAME(GST_ELEMENT(element->gst)) );
+                                       return -1;
+                               }
                        }
                }
 
@@ -5949,7 +5962,8 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps, MMDispl
        }
 
        /* get first element's sinkpad for creating ghostpad */
-       first_element = (MMPlayerGstElement *)element_bucket->data;
+       if (element_bucket)
+               first_element = (MMPlayerGstElement *)element_bucket->data;
        if ( !first_element )
        {
                LOGE("failed to get first element from bucket\n");
@@ -5978,7 +5992,8 @@ __mmplayer_gst_create_video_pipeline(mm_player_t* player, GstCaps* caps, MMDispl
 #endif
 
        /* done. free allocated variables */
-       g_list_free(element_bucket);
+       if (element_bucket)
+               g_list_free(element_bucket);
 
        mm_attrs_set_int_by_name(attrs, "content_video_found", TRUE);
 
@@ -11309,7 +11324,6 @@ __mmplayer_try_to_plug_decodebin(mm_player_t* player, GstPad *srcpad, const GstC
        GstPad* qsrcpad= NULL;
        gchar *caps_str = NULL;
        gint64 dur_bytes = 0L;
-       gchar* file_buffering_path = NULL;
        gboolean use_file_buffer = FALSE;
 
        guint max_buffer_size_bytes = 0;
@@ -11361,14 +11375,9 @@ __mmplayer_try_to_plug_decodebin(mm_player_t* player, GstPad *srcpad, const GstC
                                LOGD("dur_bytes = %lld\n", dur_bytes);
 
                                if (dur_bytes > 0)
-                               {
                                        use_file_buffer = MMPLAYER_USE_FILE_FOR_BUFFERING(player);
-                                       file_buffering_path = g_strdup(player->ini.http_file_buffer_path);
-                               }
                                else
-                               {
                                        dur_bytes = 0;
-                               }
                        }
 
                        /* NOTE : we cannot get any duration info from ts container in case of streaming */
@@ -11386,11 +11395,10 @@ __mmplayer_try_to_plug_decodebin(mm_player_t* player, GstPad *srcpad, const GstC
                                                                                                1.0,                                                            // no meaning
                                                                                                player->ini.http_buffering_limit,       // no meaning
                                                                                                use_file_buffer,
-                                                                                               file_buffering_path,
+                                                                                               player->ini.http_file_buffer_path,
                                                                                                (guint64)dur_bytes);
                        }
 
-                       MMPLAYER_FREEIF(file_buffering_path);
                        if (GST_STATE_CHANGE_FAILURE == gst_element_sync_state_with_parent (queue2))
                        {
                                LOGE("failed to sync queue2 state with parent\n");
@@ -13889,7 +13897,6 @@ const char *padname, const GList *templlist)
                        if (MMPLAYER_IS_HTTP_STREAMING(player))
                        {
                                gint64 dur_bytes = 0L;
-                               gchar *file_buffering_path = NULL;
                                gboolean use_file_buffer = FALSE;
 
                                if ( !mainbin[MMPLAYER_M_MUXED_S_BUFFER].gst)
@@ -13935,14 +13942,9 @@ const char *padname, const GList *templlist)
                                                        LOGE("fail to get duration.\n");
 
                                                if (dur_bytes > 0)
-                                               {
                                                        use_file_buffer = MMPLAYER_USE_FILE_FOR_BUFFERING(player);
-                                                       file_buffering_path = g_strdup(player->ini.http_file_buffer_path);
-                                               }
                                                else
-                                               {
                                                        dur_bytes = 0;
-                                               }
                                        }
 
                                        /* NOTE : we cannot get any duration info from ts container in case of streaming */
@@ -13956,11 +13958,9 @@ const char *padname, const GList *templlist)
                                                        1.0,
                                                        player->ini.http_buffering_limit,
                                                        use_file_buffer,
-                                                       file_buffering_path,
+                                                       player->ini.http_file_buffer_path,
                                                        (guint64)dur_bytes);
                                        }
-
-                                       MMPLAYER_FREEIF(file_buffering_path);
                                }
                        }
                }
index dd83d31..6f49d5a 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <sys/vfs.h>
 #include <dlog.h>
+#include <tzplatform_config.h>
 #include "mm_player_utils.h"
 #include "mm_player_streaming.h"
 
@@ -388,10 +389,7 @@ streaming_set_queue2_queue_type (mm_player_streaming_t* streamer, gboolean use_f
        LOGD("[Queue2] use file for buffering. streaming is played on pull-based. \n");
 
        if (!file_path || strlen(file_path) <= 0)
-               file_path = g_strdup(DEFAULT_FILE_BUFFER_PATH);
-
-       g_snprintf(file_buffer_name, MM_MAX_URL_LEN, "%s/XXXXXX", file_path);
-       SECURE_LOGD("[Queue2] the buffering file name is %s.\n", file_buffer_name);
+               file_path = (gchar *)tzplatform_getenv(TZ_SYS_DATA);
 
        if (statfs((const char *)file_path, &buf) < 0)
        {
@@ -418,6 +416,9 @@ streaming_set_queue2_queue_type (mm_player_streaming_t* streamer, gboolean use_f
        if (file_buffer_size>0)
                LOGD("[Queue2] use file ring buffer for buffering.");
 
+       g_snprintf(file_buffer_name, MM_MAX_URL_LEN, "%s/XXXXXX", file_path);
+       SECURE_LOGD("[Queue2] the buffering file name is %s.\n", file_buffer_name);
+
        g_object_set (G_OBJECT(buffer_handle->buffer), "temp-template", file_buffer_name, NULL);
        g_object_set (G_OBJECT(buffer_handle->buffer), "ring-buffer-max-size", file_buffer_size, NULL);