Enhanced mp4 with mpeg4 & h263 video-formats 80/54080/3 accepted/tizen/mobile/20151215.055141 accepted/tizen/tv/20151215.055205 accepted/tizen/wearable/20151215.055226 submit/tizen/20151215.040825
authorMahesh Kondiparthi <kd.mahesh@samsung.com>
Fri, 11 Dec 2015 07:21:13 +0000 (12:51 +0530)
committerSeo Joungkook <jk7704.seo@samsung.com>
Mon, 14 Dec 2015 01:05:40 +0000 (10:05 +0900)
[1] Enhanced Demuxer code in the test suite to aid muxer-testing of mp4 with mpeg4 & h263 videos
[2] Addressed review comments

Change-Id: Ife9d652efa85c6a09149e9b3d5d60fd29b57da4e
Signed-off-by: Mahesh Kondiparthi <kd.mahesh@samsung.com>
Signed-off-by: Seo Joungkook <jk7704.seo@samsung.com>
src/port_gst/mediamuxer_port_gst.c [changed mode: 0644->0755]
test/mediamuxer_test.c
test/mediamuxer_test_gst.c

old mode 100644 (file)
new mode 100755 (executable)
index 93dbec5..78bbe78
@@ -171,7 +171,8 @@ static int gst_muxer_add_track(MMHandleType pHandle,
                MEDIA_FORMAT_ERROR_INVALID_OPERATION) {
                if ((mx_handle_gst->muxed_format == MEDIAMUXER_CONTAINER_FORMAT_MP4
                                && (mimetype == MEDIA_FORMAT_H264_SP  || mimetype == MEDIA_FORMAT_H264_MP || mimetype == MEDIA_FORMAT_H264_HP
-                               || mimetype == MEDIA_FORMAT_H263))
+                               || mimetype == MEDIA_FORMAT_H263
+                               || mimetype == MEDIA_FORMAT_MPEG4_SP))
                        || (mx_handle_gst->muxed_format == MEDIAMUXER_CONTAINER_FORMAT_3GP
                                && (mimetype == MEDIA_FORMAT_H264_SP  || mimetype == MEDIA_FORMAT_H264_MP || mimetype == MEDIA_FORMAT_H264_HP
                                || mimetype == MEDIA_FORMAT_H263))) {
@@ -472,6 +473,8 @@ mx_ret_e _gst_create_pipeline(mxgst_handle_t *gst_handle)
                                                                current->parser = gst_element_factory_make("h264parse", str_parser);
                                                        else if (mimetype == MEDIA_FORMAT_H263 || mimetype == MEDIA_FORMAT_H263P)
                                                                current->parser = gst_element_factory_make("h263parse", str_parser);
+                                                       else if (mimetype == MEDIA_FORMAT_MPEG4_SP)
+                                                               current->parser = gst_element_factory_make("mpeg4videoparse", str_parser);
                                        } else {
                                                MX_E("Can't retrive mimetype for the current track. Unsupported MIME Type\n");
                                        }
index 44d53c0..c29ccf6 100644 (file)
@@ -131,22 +131,19 @@ int test_mediamuxer_set_data_sink()
        g_print("\nData_sink choosen is: %s\n", data_sink);
 
        /* Set data sink after creating */
-       if (strncmp(data_sink, "1", 1) == 0 || strncmp(data_sink, "mp4", 3) == 0) {
+       if (strncmp(data_sink, "11", 2) == 0 || strncmp(data_sink, "12", 2) == 0 || strncmp(data_sink, "13", 2) == 0) {
                op_uri = "MuxTest.mp4";
                ret = mediamuxer_set_data_sink(myMuxer, op_uri, MEDIAMUXER_CONTAINER_FORMAT_MP4);
-       } else if (strncmp(data_sink, "2", 1) == 0 || strncmp(data_sink, "3gp", 3) == 0) {
+       } else if (strncmp(data_sink, "21", 2) == 0 || strncmp(data_sink, "22", 2) == 0 || strncmp(data_sink, "23", 2) == 0) {
                op_uri = "MuxTest.3gp";
                ret = mediamuxer_set_data_sink(myMuxer, op_uri, MEDIAMUXER_CONTAINER_FORMAT_3GP);
-       } else if (strncmp(data_sink, "3", 1) == 0 || strncmp(data_sink, "4", 1) == 0) {
-               op_uri = "MuxTest.3gp";
-               ret = mediamuxer_set_data_sink(myMuxer, op_uri, MEDIAMUXER_CONTAINER_FORMAT_3GP);
-       } else if (strncmp(data_sink, "5", 1) == 0 || strncmp(data_sink, "wav", 3) == 0) {
+       } else if (strncmp(data_sink, "31", 2) == 0) {
                op_uri = "MuxTest.wav";
                ret = mediamuxer_set_data_sink(myMuxer, op_uri, MEDIAMUXER_CONTAINER_FORMAT_WAV);
-       } else if (strncmp(data_sink, "6", 1) == 0 || strncmp(data_sink, "amr-nb", 6) == 0) {
+       } else if (strncmp(data_sink, "41", 2) == 0) {
                op_uri = "MuxTest_nb.amr";
                ret = mediamuxer_set_data_sink(myMuxer, op_uri, MEDIAMUXER_CONTAINER_FORMAT_AMR_NB);
-       } else if (strncmp(data_sink, "7", 1) == 0 || strncmp(data_sink, "amr-wb", 6) == 0) {
+       } else if (strncmp(data_sink, "42", 2) == 0) {
                op_uri = "MuxTest_wb.amr";
                ret = mediamuxer_set_data_sink(myMuxer, op_uri, MEDIAMUXER_CONTAINER_FORMAT_AMR_WB);
        }
@@ -170,20 +167,23 @@ int test_mediamuxer_add_track_video()
        media_format_create(&media_format);
 
        /* MEDIA_FORMAT_H264_SP  MEDIA_FORMAT_H264_MP  MEDIA_FORMAT_H264_HP */
-       if (strncmp(data_sink, "1", 1) == 0 || strncmp(data_sink, "mp4", 3) == 0) {
-               if (media_format_set_video_mime(media_format, MEDIA_FORMAT_H264_SP) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
-                       g_print("Problem during media_format_set_audio_mime operation\n");
-       } else if (strncmp(data_sink, "2", 1) == 0 || strncmp(data_sink, "3gp", 3) == 0) {
+       if (strncmp(data_sink, "11", 2) == 0) {
                if (media_format_set_video_mime(media_format, MEDIA_FORMAT_H264_SP) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation\n");
-       } else if (strncmp(data_sink, "3", 1) == 0) {
+       } else if (strncmp(data_sink, "12", 2) == 0) {
                if (media_format_set_video_mime(media_format, MEDIA_FORMAT_H263) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation\n");
-       } else if (strncmp(data_sink, "4", 1) == 0) {
+       }  else if (strncmp(data_sink, "13", 2) == 0) {
+               if (media_format_set_video_mime(media_format, MEDIA_FORMAT_MPEG4_SP) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
+                       g_print("Problem during media_format_set_audio_mime operation\n");
+       } else if (strncmp(data_sink, "21", 2) == 0) {
+               if (media_format_set_video_mime(media_format, MEDIA_FORMAT_H264_SP) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
+                       g_print("Problem during media_format_set_audio_mime operation\n");
+       } else if (strncmp(data_sink, "22", 2) == 0 || strncmp(data_sink, "23", 2) == 0) {
                if (media_format_set_video_mime(media_format, MEDIA_FORMAT_H263) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation\n");
-       } else if (strncmp(data_sink, "5", 1) == 0
-               || strncmp(data_sink, "6", 1) == 0 || strncmp(data_sink, "7", 1) == 0) {
+       } else if (strncmp(data_sink, "31", 2) == 0
+               || strncmp(data_sink, "41", 2) == 0 || strncmp(data_sink, "42", 2) == 0) {
                g_print("Add video track is invalid for wav/amr\n");
                return 1;
        }
@@ -218,24 +218,23 @@ int test_mediamuxer_add_track_audio()
        g_print("test_mediamuxer_add_track_audio\n");
        media_format_create(&media_format_a);
 
-       if (strncmp(data_sink, "1", 1) == 0 || strncmp(data_sink, "mp4", 3) == 0) {
+       if (strncmp(data_sink, "11", 2) == 0 || strncmp(data_sink, "12", 2) == 0 || strncmp(data_sink, "13", 2) == 0) {
                /* MEDIA_FORMAT_AAC_LC  MEDIA_FORMAT_AAC_HE  MEDIA_FORMAT_AAC_HE_PS */
                if (media_format_set_audio_mime(media_format_a, MEDIA_FORMAT_AAC_LC) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation, for AAC in MP4\n");
-       } else if (strncmp(data_sink, "2", 1) == 0 || strncmp(data_sink, "3gp", 3) == 0
-                       || strncmp(data_sink, "3", 1) == 0) {
+       } else if (strncmp(data_sink, "21", 2) == 0 || strncmp(data_sink, "22", 2) == 0) {
                if (media_format_set_audio_mime(media_format_a, MEDIA_FORMAT_AAC_LC) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation, for AAC in 3GP\n");
-       } else if (strncmp(data_sink, "4", 1) == 0) {
+       } else if (strncmp(data_sink, "23", 2) == 0) {
                if (media_format_set_audio_mime(media_format_a, MEDIA_FORMAT_AMR_NB) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation for AMR_NB in 3GP\n");
-       } else if (strncmp(data_sink, "5", 1) == 0) {
+       } else if (strncmp(data_sink, "31", 2) == 0) {
                if (media_format_set_audio_mime(media_format_a, MEDIA_FORMAT_PCM) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation for PCM in WAV\n");
-       } else if (strncmp(data_sink, "6", 1) == 0) {
+       } else if (strncmp(data_sink,"41",2) == 0) {
                if (media_format_set_audio_mime(media_format_a, MEDIA_FORMAT_AMR_NB) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation for amr-nb audio\n");
-       } else if (strncmp(data_sink, "7", 1) == 0) {
+       } else if (strncmp(data_sink,"42",2) == 0) {
                if (media_format_set_audio_mime(media_format_a, MEDIA_FORMAT_AMR_WB) == MEDIA_FORMAT_ERROR_INVALID_OPERATION)
                        g_print("Problem during media_format_set_audio_mime operation for amr-wb audio\n");
        }
@@ -474,7 +473,10 @@ static void displaymenu(void)
                }
        } else if (g_menu_state == CURRENT_STATUS_DATA_SINK) {
                g_print("*** input the datasink container format:\n");
-               g_print("(1) mp4 \n(2) 3gp (h264 + AAC) \n(3) 3gp (h263 + AAC) \n(4) 3gp (h263 + AMR) \n(5) wav \n(6) amr-nb \n(7) amr-wb \n");
+               g_print("(11) mp4 (h264+AAC) (12) mp4(h263+AAC) (13) mp4(mpeg4+AAC) \
+                       \n(21) 3gp (h264+AAC) (22) 3gp (h263+AAC) (23) 3gp (h263+AMR) \
+                       \n(31) wav \
+                       \n(41) amr-nb (42) amr-wb \n");
        } else if (g_menu_state == CURRENT_STATUS_RAW_VIDEO_FILENAME) {
                g_print("*** input raw video file name");
        } else if (g_menu_state == CURRENT_STATUS_SET_VENC_INFO) {
index 98d0bd8..289498a 100644 (file)
@@ -240,14 +240,23 @@ static void __video_app_sink_callback(GstElement *sink, CustomData *data)
 
                        if (g_str_has_prefix(new_pad_type_vid, "video/x-h264")) {
                                if (media_format_set_video_mime(vidfmt, MEDIA_FORMAT_H264_SP)) {
-                                       g_print("media_format_set_vidio_mime failed\n");
+                                       g_print("media_format_set_video_mime to H264_SP failed\n");
+                                       return;
+                               }
+                       } else if (g_str_has_prefix(new_pad_type_vid, "video/mpeg")) {
+                               g_print("For mpeg4, setting encoded media type as MEDIA_FORMAT_MPEG4_SP\n");
+                               if (media_format_set_video_mime(vidfmt, MEDIA_FORMAT_MPEG4_SP)) {
+                                       g_print("media_format_set_video_mime to MPEG4_SP failed\n");
                                        return;
                                }
                        } else if (g_str_has_prefix(new_pad_type_vid, "video/x-h263")) {
+                               g_print("For h263, setting encoded media type as MEDIA_FORMAT_H263\n");
                                if (media_format_set_video_mime(vidfmt, MEDIA_FORMAT_H263)) {
                                        g_print("media_format_set_vidio_mime failed\n");
                                        return;
                                }
+                       } else {
+                               g_print("Unsupported encoded video mime. Currently muxer supports:h263, h264 & mpeg4");
                        }
 
                        if (!GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT)) {
@@ -388,7 +397,8 @@ static void __on_pad_added(GstElement *element, GstPad *pad, CustomData *data)
                gst_element_set_state(data->audio_appsink, GST_STATE_PLAYING);
                /* one has to set the newly added element to the same state as the rest of the elements. */
        } else if (have_vid_track && (g_str_has_prefix(new_pad_type, "video/x-h264")
-               || g_str_has_prefix(new_pad_type, "video/x-h263"))) {
+               || g_str_has_prefix(new_pad_type, "video/x-h263")
+               || g_str_has_prefix(new_pad_type, "video/mpeg"))) {
                new_pad_vid_caps = gst_pad_get_current_caps(pad);
                caps = gst_caps_to_string(new_pad_vid_caps);
                g_print("   Video caps :%s\n", caps);