Release signal before state change. 16/104116/1 accepted/tizen_3.0.m2_mobile accepted/tizen_3.0.m2_tv accepted/tizen_3.0_common accepted/tizen_3.0_ivi tizen_3.0.m2 tizen_3.0_tv accepted/tizen/3.0.m2/mobile/20170104.125249 accepted/tizen/3.0.m2/tv/20170104.125608 accepted/tizen/3.0/common/20161216.123553 accepted/tizen/3.0/ivi/20161216.084245 accepted/tizen/3.0/mobile/20161216.083741 accepted/tizen/3.0/tv/20161216.084021 submit/tizen_3.0.m2/20170104.093750 submit/tizen_3.0/20161213.081002 submit/tizen_3.0/20161215.110001
authorGilbok Lee <gilbok.lee@samsung.com>
Mon, 12 Dec 2016 10:12:31 +0000 (19:12 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Mon, 12 Dec 2016 10:12:31 +0000 (19:12 +0900)
[Version] 0.10.2
[Profile] Common, Mobile, TV
[Issue Type] Fix bugs

Change-Id: I62032d7d4abf084ea40ff1ac25e636c375c486f0

packaging/libmm-transcode.spec
transcode/include/mm_transcode_internal.h
transcode/mm_transcode.c
transcode/mm_transcode_pipeline.c

index 058b8fc..c810332 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-transcode
 Summary:    Multimedia Framework Video Transcode Library
-Version:    0.10.1
+Version:    0.10.2
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
@@ -68,7 +68,6 @@ rm -rf %{buildroot}
 %files
 %manifest %{name}.manifest
 /usr/share/license/%{name}
-%manifest libmm-transcode.manifest
 %defattr(-,root,root,-)
 %{_libdir}/*.so*
 
index 7365842..e5b4ba1 100644 (file)
@@ -246,6 +246,7 @@ gboolean _mm_cb_print_position(handle_s *handle);
 gboolean _mm_cb_transcode_bus(GstBus * bus, GstMessage * message, gpointer userdata);
 const gchar* _mm_check_media_type(GstCaps *caps);
 int _mm_cleanup_encodebin(handle_s *handle);
+int _mm_cleanup_signal(handle_s *handle);
 int _mm_cleanup_pipeline(handle_s *handle);
 int _mm_decodesrcbin_create(handle_s *handle);
 int _mm_decodesrcbin_link(handle_s *handle);
index 8070a89..f09caaf 100755 (executable)
@@ -370,6 +370,13 @@ int mm_transcode_destroy(MMHandleType MMHandle)
                debug_error("Fail to create Last Queue");
                return MM_ERROR_INVALID_ARGUMENT;
        }
+       ret = _mm_cleanup_signal(handle);
+       if (ret == MM_ERROR_NONE) {
+               debug_log("Success - CleanUp Signal");
+       } else {
+               debug_error("ERROR - CleanUp Signal");
+               return ret;
+       }
 
        ret = _mm_transcode_state_change(handle, GST_STATE_NULL);
        if (ret != MM_ERROR_NONE) {
index 3c2969c..a6ece61 100755 (executable)
@@ -81,7 +81,7 @@ int _mm_cleanup_encodebin(handle_s *handle)
        return ret;
 }
 
-int _mm_cleanup_pipeline(handle_s *handle)
+int _mm_cleanup_signal(handle_s *handle)
 {
        int ret = MM_ERROR_NONE;
 
@@ -90,11 +90,64 @@ int _mm_cleanup_pipeline(handle_s *handle)
                return MM_ERROR_INVALID_ARGUMENT;
        }
 
-       if (!handle->decoder_vidp) {
-               debug_error("[ERROR] - handle decoder video process bin");
+       if (!handle->property) {
+               debug_error("[ERROR] - handle property");
                return MM_ERROR_TRANSCODE_INTERNAL;
        }
 
+       if (handle->property->progress_cb) {
+               handle->property->progress_cb = NULL;
+               handle->property->progress_cb_param = NULL;
+       }
+
+       if (handle->property->completed_cb) {
+               handle->property->completed_cb = NULL;
+               handle->property->completed_cb_param= NULL;
+       }
+
+       if (handle->property->audio_cb_probe_id) {
+               g_source_remove(handle->property->audio_cb_probe_id);
+               handle->property->audio_cb_probe_id = 0;
+               debug_log("g_source_remove (audio_cb_probe_id)");
+       }
+
+       if (handle->property->video_cb_probe_id) {
+               g_source_remove(handle->property->video_cb_probe_id);
+               handle->property->video_cb_probe_id = 0;
+               debug_log("g_source_remove (video_cb_probe_id)");
+       }
+
+       if (handle->property->progrss_event_id) {
+               g_source_remove(handle->property->progrss_event_id);
+               handle->property->progrss_event_id = 0;
+               debug_log("g_source_remove (progrss_event_id)");
+       }
+
+       if (handle->encodebin->audio_event_probe_id) {
+               g_source_remove(handle->encodebin->audio_event_probe_id);
+               handle->encodebin->audio_event_probe_id = 0;
+               debug_log("g_source_remove (audio_event_probe_id)");
+       }
+
+       if (handle->encodebin->video_event_probe_id) {
+               g_source_remove(handle->encodebin->video_event_probe_id);
+               handle->encodebin->video_event_probe_id = 0;
+               debug_log("g_source_remove (video_event_probe_id)");
+       }
+
+       return ret;
+}
+
+
+int _mm_cleanup_pipeline(handle_s *handle)
+{
+       int ret = MM_ERROR_NONE;
+
+       if (!handle) {
+               debug_error("[ERROR] - handle");
+               return MM_ERROR_INVALID_ARGUMENT;
+       }
+
        if (!handle->property) {
                debug_error("[ERROR] - handle property");
                return MM_ERROR_TRANSCODE_INTERNAL;
@@ -144,53 +197,57 @@ int _mm_cleanup_pipeline(handle_s *handle)
        }
 
        /* release videopad */
-       if (handle->decoder_vidp->decvideosinkpad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_vidp->decvideosinkpad));
-               handle->decoder_vidp->decvideosinkpad = NULL;
-               debug_log("Success - gt_object_unref (decvideosinkpad)");
-       }
+       if (handle->decoder_vidp) {
+               if (handle->decoder_vidp->decvideosinkpad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_vidp->decvideosinkpad));
+                       handle->decoder_vidp->decvideosinkpad = NULL;
+                       debug_log("Success - gt_object_unref (decvideosinkpad)");
+               }
 
-       if (handle->decoder_vidp->decvideosrcpad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_vidp->decvideosrcpad));
-               handle->decoder_vidp->decvideosrcpad = NULL;
-               debug_log("Success - gst_object_unref (decvideosrcpad)");
-       }
+               if (handle->decoder_vidp->decvideosrcpad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_vidp->decvideosrcpad));
+                       handle->decoder_vidp->decvideosrcpad = NULL;
+                       debug_log("Success - gst_object_unref (decvideosrcpad)");
+               }
 
-       if (handle->decoder_vidp->srcdecvideopad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_vidp->srcdecvideopad));
-               handle->decoder_vidp->srcdecvideopad = NULL;
-               debug_log("Success - gst_object_unref (srcdecvideopad)");
-       }
+               if (handle->decoder_vidp->srcdecvideopad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_vidp->srcdecvideopad));
+                       handle->decoder_vidp->srcdecvideopad = NULL;
+                       debug_log("Success - gst_object_unref (srcdecvideopad)");
+               }
 
-       if (handle->decoder_vidp->sinkdecvideopad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_vidp->sinkdecvideopad));
-               handle->decoder_vidp->sinkdecvideopad = NULL;
-               debug_log("Success - gst_object_unref (sinkdecvideopad)");
+               if (handle->decoder_vidp->sinkdecvideopad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_vidp->sinkdecvideopad));
+                       handle->decoder_vidp->sinkdecvideopad = NULL;
+                       debug_log("Success - gst_object_unref (sinkdecvideopad)");
+               }
        }
 
        /* release audiopad */
-       if (handle->decoder_audp->decaudiosinkpad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_audp->decaudiosinkpad));
-               handle->decoder_audp->decaudiosinkpad = NULL;
-               debug_log("Success - gst_object_unref (decaudiosinkpad)");
-       }
+       if (handle->decoder_audp) {
+               if (handle->decoder_audp->decaudiosinkpad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_audp->decaudiosinkpad));
+                       handle->decoder_audp->decaudiosinkpad = NULL;
+                       debug_log("Success - gst_object_unref (decaudiosinkpad)");
+               }
 
-       if (handle->decoder_audp->decaudiosrcpad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_audp->decaudiosrcpad));
-               handle->decoder_audp->decaudiosrcpad = NULL;
-               debug_log("Success - gst_object_unref (decaudiosrcpad)");
-       }
+               if (handle->decoder_audp->decaudiosrcpad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_audp->decaudiosrcpad));
+                       handle->decoder_audp->decaudiosrcpad = NULL;
+                       debug_log("Success - gst_object_unref (decaudiosrcpad)");
+               }
 
-       if (handle->decoder_audp->srcdecaudiopad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_audp->srcdecaudiopad));
-               handle->decoder_audp->srcdecaudiopad = NULL;
-               debug_log("Success - gst_object_unref (srcdecaudiopad)");
-       }
+               if (handle->decoder_audp->srcdecaudiopad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_audp->srcdecaudiopad));
+                       handle->decoder_audp->srcdecaudiopad = NULL;
+                       debug_log("Success - gst_object_unref (srcdecaudiopad)");
+               }
 
-       if (handle->decoder_audp->sinkdecaudiopad) {
-               gst_object_unref(GST_OBJECT(handle->decoder_audp->sinkdecaudiopad));
-               handle->decoder_audp->sinkdecaudiopad = NULL;
-               debug_log("Success - gst_object_unref (sinkdecaudiopad)");
+               if (handle->decoder_audp->sinkdecaudiopad) {
+                       gst_object_unref(GST_OBJECT(handle->decoder_audp->sinkdecaudiopad));
+                       handle->decoder_audp->sinkdecaudiopad = NULL;
+                       debug_log("Success - gst_object_unref (sinkdecaudiopad)");
+               }
        }
 
        if (_mm_cleanup_encodebin(handle) != MM_ERROR_NONE) {
@@ -212,36 +269,6 @@ int _mm_cleanup_pipeline(handle_s *handle)
                debug_log("Success - gst_object_unref (pipeline)");
        }
 
-       if (handle->property->audio_cb_probe_id) {
-               g_source_remove(handle->property->audio_cb_probe_id);
-               handle->property->audio_cb_probe_id = 0;
-               debug_log("g_source_remove (audio_cb_probe_id)");
-       }
-
-       if (handle->property->video_cb_probe_id) {
-               g_source_remove(handle->property->video_cb_probe_id);
-               handle->property->video_cb_probe_id = 0;
-               debug_log("g_source_remove (video_cb_probe_id)");
-       }
-
-       if (handle->property->progrss_event_id) {
-               g_source_remove(handle->property->progrss_event_id);
-               handle->property->progrss_event_id = 0;
-               debug_log("g_source_remove (progrss_event_id)");
-       }
-
-       if (handle->encodebin->audio_event_probe_id) {
-               g_source_remove(handle->encodebin->audio_event_probe_id);
-               handle->encodebin->audio_event_probe_id = 0;
-               debug_log("g_source_remove (audio_event_probe_id)");
-       }
-
-       if (handle->encodebin->video_event_probe_id) {
-               g_source_remove(handle->encodebin->video_event_probe_id);
-               handle->encodebin->video_event_probe_id = 0;
-               debug_log("g_source_remove (video_event_probe_id)");
-       }
-
        TRANSCODE_FREE(handle->property->mux);
        TRANSCODE_FREE(handle->property->venc);
        TRANSCODE_FREE(handle->property->aenc);