From 0bee6dbb17a0ca01f2b3b6f40565ab6a086c9c70 Mon Sep 17 00:00:00 2001 From: Mahesh Kondiparthi Date: Fri, 11 Dec 2015 12:51:13 +0530 Subject: [PATCH] Enhanced mp4 with mpeg4 & h263 video-formats [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 Signed-off-by: Seo Joungkook --- src/port_gst/mediamuxer_port_gst.c | 5 +++- test/mediamuxer_test.c | 50 ++++++++++++++++++++------------------ test/mediamuxer_test_gst.c | 14 +++++++++-- 3 files changed, 42 insertions(+), 27 deletions(-) mode change 100644 => 100755 src/port_gst/mediamuxer_port_gst.c diff --git a/src/port_gst/mediamuxer_port_gst.c b/src/port_gst/mediamuxer_port_gst.c old mode 100644 new mode 100755 index 93dbec5..78bbe78 --- a/src/port_gst/mediamuxer_port_gst.c +++ b/src/port_gst/mediamuxer_port_gst.c @@ -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"); } diff --git a/test/mediamuxer_test.c b/test/mediamuxer_test.c index 44d53c0..c29ccf6 100644 --- a/test/mediamuxer_test.c +++ b/test/mediamuxer_test.c @@ -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) { diff --git a/test/mediamuxer_test_gst.c b/test/mediamuxer_test_gst.c index 98d0bd8..289498a 100644 --- a/test/mediamuxer_test_gst.c +++ b/test/mediamuxer_test_gst.c @@ -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); -- 2.7.4