Sync with 2.4 [mediademuxer_get_track_info() API gets a copy of the media_format_h... 68/52268/2
authorDeepak Srivastava <srivastava.d@samsung.com>
Fri, 20 Nov 2015 09:56:02 +0000 (15:26 +0530)
committerDeepak Srivastava <srivastava.d@samsung.com>
Fri, 20 Nov 2015 10:02:00 +0000 (15:32 +0530)
[1] Added error checking.

Change-Id: I35fe1b48396a19a42f53d445ad195622e9bef938
Signed-off-by: Deepak Srivastava <srivastava.d@samsung.com>
include/mediademuxer_util.h
src/port_custom/mediademuxer_port_custom.c
src/port_ffmpeg/mediademuxer_port_ffmpeg.c
src/port_gst/mediademuxer_port_gst.c
test/mediademuxer_test.c

index 5cfa0e8..7319515 100755 (executable)
@@ -79,7 +79,7 @@ extern "C" {
 #define MEDIADEMUXER_CHECK_NULL(x_var) \
        if (!x_var) { \
                MD_E("[%s] is NULL\n", #x_var); \
-               goto ERROR; \
+               return MD_ERROR_INVALID_ARGUMENT; \
        }
 
 #define MEDIADEMUXER_CHECK_SET_AND_PRINT(x_var, x_cond, ret, ret_val, err_text) \
index 6224014..171d70c 100755 (executable)
@@ -55,9 +55,6 @@ int custom_port_register(media_port_demuxer_ops *pOps)
 
        MEDIADEMUXER_FLEAVE();
        return ret;
-ERROR:
-       ret = MD_ERROR_INVALID_ARGUMENT;
-       return ret;
 }
 
 static int custom_demuxer_init(MMHandleType *pHandle)
index a49b8a8..352c385 100755 (executable)
@@ -55,9 +55,6 @@ int ffmpeg_port_register(media_port_demuxer_ops *pOps)
 
        MEDIADEMUXER_FLEAVE();
        return ret;
-ERROR:
-       ret = MD_ERROR_INVALID_ARGUMENT;
-       return ret;
 }
 
 static int ffmpeg_demuxer_init(MMHandleType *pHandle)
index 147607a..29193a4 100755 (executable)
@@ -75,10 +75,6 @@ int gst_port_register(media_port_demuxer_ops *pOps)
 
        MEDIADEMUXER_FLEAVE();
        return ret;
-ERROR:
-       ret = MD_ERROR_INVALID_ARGUMENT;
-       MEDIADEMUXER_FLEAVE();
-       return ret;
 }
 
 static int gst_demuxer_init(MMHandleType *pHandle)
@@ -628,6 +624,10 @@ static int gst_demuxer_prepare(MMHandleType pHandle, char *uri)
 
        MD_I("gst_demuxer_prepare Creating pipeline %p", new_mediademuxer);
        ret = _gst_create_pipeline(new_mediademuxer, uri);
+       if (ret != MD_ERROR_NONE) {
+               MD_E("_gst_create_pipeline() failed. returned %d\n", ret);
+               goto ERROR;
+       }
        MEDIADEMUXER_FLEAVE();
        return ret;
 ERROR:
@@ -648,9 +648,6 @@ static int gst_demuxer_get_data_count(MMHandleType pHandle, int *count)
                        (new_mediademuxer->info).num_other_track;
        MEDIADEMUXER_FLEAVE();
        return ret;
-ERROR:
-       MEDIADEMUXER_FLEAVE();
-       return MD_ERROR;
 }
 
 int _gst_set_appsink(track *temp, int index, int loop)
@@ -672,13 +669,14 @@ int _gst_set_appsink(track *temp, int index, int loop)
 static int gst_demuxer_set_track(MMHandleType pHandle, int track)
 {
        MEDIADEMUXER_FENTER();
-       int ret = MD_INVALID_ARG;
+       int ret = MD_ERROR_NONE;
        MEDIADEMUXER_CHECK_NULL(pHandle);
        mdgst_handle_t *new_mediademuxer = (mdgst_handle_t *) pHandle;
 
        MD_I("total_tracks (%d) :: selected  track (%d)", new_mediademuxer->total_tracks, track);
        if (track >= new_mediademuxer->total_tracks || track < 0) {
                MD_E("total_tracks is less then selected track, So not support this track");
+               ret = MD_ERROR_INVALID_ARGUMENT;
                goto ERROR;
        }
        new_mediademuxer->selected_tracks[track] = true;
@@ -720,7 +718,8 @@ static int gst_demuxer_start(MMHandleType pHandle)
                if (gst_element_set_state(temp->appsink, GST_STATE_PLAYING) ==
                        GST_STATE_CHANGE_FAILURE) {
                        MD_E("Failed to set into PLAYING state");
-                       ret = MD_ERROR_UNKNOWN;
+                       ret = MD_INTERNAL_ERROR;
+                       goto ERROR;
                }
                MD_I("set the state to playing\n");
                indx++;
@@ -977,6 +976,7 @@ static int gst_demuxer_get_track_info(MMHandleType pHandle,
                        (new_mediademuxer->info).num_other_track;
        if (index >= loop || index < 0) {
                MD_E("total tracks(loop) is less then selected track(index), So not support this track");
+               ret = MD_ERROR;
                goto ERROR;
        }
 
@@ -1003,13 +1003,25 @@ static int gst_demuxer_get_track_info(MMHandleType pHandle,
        } else
                MD_W("Not supported so far (except audio and video)\n");
 
-       *format = temp->format;
+       ret = media_format_ref(temp->format);   /* increment the ref to retain the original content */
+       if (ret != MEDIA_FORMAT_ERROR_NONE) {
+               MD_E("Mediaformat reference count increment failed. returned %d\n", ret);
+               ret = MD_INTERNAL_ERROR;
+               goto ERROR;
+       }
+       ret = media_format_make_writable(temp->format, format); /* copy the content */
+       if (ret != MEDIA_FORMAT_ERROR_NONE) {
+               MD_E("Mediaformat create copy failed. returned %d\n", ret);
+               media_format_unref(temp->format);
+               ret = MD_INTERNAL_ERROR;
+               goto ERROR;
+       }
 
        MEDIADEMUXER_FLEAVE();
        return ret;
 ERROR:
        MEDIADEMUXER_FLEAVE();
-       return MD_ERROR;
+       return ret;
 }
 
 static int _gst_copy_buf_to_media_packet(media_packet_h out_pkt,
@@ -1206,7 +1218,8 @@ static int gst_demuxer_seek(MMHandleType pHandle, gint64 pos1)
                        if (!gst_element_seek(temp->appsink, rate, GST_FORMAT_TIME,
                             GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, pos1,
                             GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) {
-                               g_print("Seek failed!\n");
+                               MD_E("Seek failed!\n");
+                               goto ERROR;
                        } else {
                                MD_I("Seek success\n");
                        }
@@ -1245,19 +1258,20 @@ int _gst_unset_appsink(track *temp, int index, int loop)
 static int gst_demuxer_unset_track(MMHandleType pHandle, int track)
 {
        MEDIADEMUXER_FENTER();
-       int ret = MD_INVALID_ARG;
+       int ret = MD_ERROR_NONE;
        MEDIADEMUXER_CHECK_NULL(pHandle);
        mdgst_handle_t *new_mediademuxer = (mdgst_handle_t *) pHandle;
 
        if (track >= new_mediademuxer->total_tracks || track < 0) {
                MD_E("total tracks is less then unselected track, So not support this track");
+               ret = MD_ERROR_INVALID_ARGUMENT;
                goto ERROR;
        }
        new_mediademuxer->selected_tracks[track] = false;
        _gst_unset_appsink((((mdgst_handle_t *) pHandle)->info).head, track,
                                        new_mediademuxer->total_tracks);
        MEDIADEMUXER_FLEAVE();
-       return MD_ERROR_NONE;
+       return ret;
 ERROR:
        MEDIADEMUXER_FLEAVE();
        return ret;
@@ -1274,7 +1288,8 @@ static int gst_demuxer_stop(MMHandleType pHandle)
        if (gst_element_set_state(gst_handle->pipeline, GST_STATE_PAUSED) ==
            GST_STATE_CHANGE_FAILURE) {
                MD_E("Failed to set into PAUSE state");
-               ret = MD_ERROR_UNKNOWN;
+               ret = MD_INTERNAL_ERROR;
+               goto ERROR;
        }
        MEDIADEMUXER_FLEAVE();
        return ret;
@@ -1344,9 +1359,6 @@ static int gst_demuxer_destroy(MMHandleType pHandle)
        g_free(new_mediademuxer);
        MEDIADEMUXER_FLEAVE();
        return ret;
-ERROR:
-       MEDIADEMUXER_FLEAVE();
-       return ret;
 }
 
 int gst_set_error_cb(MMHandleType pHandle,
index 31a38e4..f2c7c7a 100755 (executable)
@@ -251,33 +251,30 @@ int test_mediademuxer_get_track_info()
        g_print("test_mediademuxer_get_track_info\n");
        for (; track < num_tracks; track++) {
                media_format_h g_media_format;
+               ret = mediademuxer_get_track_info(demuxer, track, &g_media_format);
                if (ret == 0) {
-                       g_print("g_media_format[%d] is created successfully! \n", track);
-                       ret = mediademuxer_get_track_info(demuxer, track, &g_media_format);
-                       if (ret == 0) {
-                               if (media_format_get_video_info(g_media_format, &v_mime,
-                                               &w, &h, NULL, NULL) == MEDIA_FORMAT_ERROR_NONE) {
-                                       g_print("media_format_get_video_info is sucess!\n");
-                                       g_print("\t\t[media_format_get_video]mime:%x, width :%d, height :%d\n",
-                                                               v_mime, w, h);
-                                               vid_track = track;
-                               } else if (media_format_get_audio_info(g_media_format, &a_mime,
+                       if (media_format_get_video_info(g_media_format, &v_mime,
+                                       &w, &h, NULL, NULL) == MEDIA_FORMAT_ERROR_NONE) {
+                               g_print("media_format_get_video_info is sucess!\n");
+                               g_print("\t\t[media_format_get_video]mime:%x, width :%d, height :%d\n",
+                                                       v_mime, w, h);
+                               vid_track = track;
+                       } else if (media_format_get_audio_info(g_media_format, &a_mime,
                                                        &channel, &samplerate, &bit, NULL) == MEDIA_FORMAT_ERROR_NONE) {
-                                       g_print("media_format_get_audio_info is sucess!\n");
-                                       g_print("\t\t[media_format_get_audio]mime:%x, channel :%d, samplerate :%d, bit :%d\n",
+                               g_print("media_format_get_audio_info is sucess!\n");
+                               g_print("\t\t[media_format_get_audio]mime:%x, channel :%d, samplerate :%d, bit :%d\n",
                                                        a_mime, channel, samplerate, bit);
-                                       if (a_mime == MEDIA_FORMAT_AAC_LC)
-                                               media_format_get_audio_aac_type(g_media_format, &is_adts);
-                                       aud_track = track;
-                               } else {
-                                       g_print("Not Supported YET\n");
-                               }
-                       } else {
-                                       g_print("Error while getting mediademuxer_get_track_info\n");
-                               }
+                               if (a_mime == MEDIA_FORMAT_AAC_LC)
+                                       media_format_get_audio_aac_type(g_media_format, &is_adts);
+                               aud_track = track;
                        } else {
-                               g_print("Error while creating media_format_create\n");
+                                       g_print("Not Supported YET\n");
                        }
+                       media_format_unref(g_media_format);
+                       g_media_format = NULL;
+               } else {
+                       g_print("Error while getting mediademuxer_get_track_info\n");
+               }
        }
 
 #if DEMUXER_OUTPUT_DUMP