Sync with 2.4 (Updated testsuit to validate MP3 and AMR-NB/WB, M4A format with mediac... 00/47300/3 tizen_3.0.m1_mobile tizen_3.0.m1_tv accepted/tizen/mobile/20150909.140616 accepted/tizen/tv/20150909.140000 accepted/tizen/wearable/20150909.135004 submit/tizen/20150909.064001 submit/tizen_common/20151023.083358 submit/tizen_common/20151026.085049 tizen_3.0.m1_mobile_release tizen_3.0.m1_tv_release
authorJoungkook Seo <jk7704.seo@samsung.com>
Wed, 2 Sep 2015 05:41:06 +0000 (14:41 +0900)
committerJoungkook Seo <jk7704.seo@samsung.com>
Thu, 3 Sep 2015 06:21:30 +0000 (15:21 +0900)
[1] Fixed issue of Segmentation fault.
[2] Fixed issue of wrong path to dump output file.

Change-Id: Ie3dcc747efde9839ab19c5b174ae29e848b4a129
Signed-off-by: Joungkook Seo <jk7704.seo@samsung.com>
src/mediademuxer_port.c
src/port_gst/mediademuxer_port_gst.c
test/mediademuxer_test.c

index 4bc955c..d0a503c 100755 (executable)
@@ -401,12 +401,12 @@ int md_read_sample(MMHandleType demuxer, int track_indx, media_packet_h *outbuf)
        MEDIADEMUXER_CHECK_NULL(pOps);
        result = pOps->read_sample(md_handle->mdport_handle, outbuf, track_indx);
        if (result == MD_EOS || result == MD_ERROR_NONE) {
+               MEDIADEMUXER_FLEAVE();
                return result;
        } else {
                MD_E("error while reading sample\n");
                goto ERROR;
        }
-       MEDIADEMUXER_FLEAVE();
 ERROR:
        result = MD_ERROR_INVALID_ARGUMENT;
        MEDIADEMUXER_FLEAVE();
index 96944b5..c5c61fb 100755 (executable)
@@ -465,7 +465,7 @@ static void __gst_cb_typefind(GstElement *tf, guint probability,
        type = gst_caps_to_string(caps);
        if (type) {
                MD_I("Media type %s found, probability %d%%\n", type, probability);
-               if (strstr(type, "quicktime")) {
+               if (strstr(type, "quicktime") || (strstr(type, "audio/x-m4a"))) {
                        gst_handle->is_valid_container = true;
                        gst_handle->demux = gst_element_factory_make("qtdemux", NULL);
                        if (!gst_handle->demux) {
@@ -836,6 +836,8 @@ int _set_mime_audio(media_format_h format, track *head)
                                        goto ERROR;
                                if(rate == 0)
                                        rate = 44100; /* default */
+                               if(bit == 0)
+                                       bit = 16; /* default */
                                if (media_format_set_audio_samplerate(format, rate))
                                        goto ERROR;
                                if (media_format_set_audio_bit(format, bit))
@@ -863,11 +865,13 @@ int _set_mime_audio(media_format_h format, track *head)
                        goto ERROR;
                if(channels == 0)
                        channels = 1; /* default */
+               if(bit == 0)
+                       bit = 16; /* default */
                if (media_format_set_audio_channel(format, channels))
                        goto ERROR;
                if (media_format_set_audio_samplerate(format, rate))
                        goto ERROR;
-               if (media_format_set_audio_bit(format, 0))
+               if (media_format_set_audio_bit(format, bit))
                        goto ERROR;
        }
        else {
@@ -1094,7 +1098,7 @@ static int gst_demuxer_read_sample(MMHandleType pHandle,
        GstElement *sink = atrack->appsink;
        GstSample *sample = NULL;
        if (gst_app_sink_is_eos((GstAppSink *) sink)) {
-               MD_W("End of stream reached\n");
+               MD_W("End of stream (EOS) reached\n");
                ret = MD_EOS;
                goto ERROR;
        }
index 418bcf9..485056a 100755 (executable)
@@ -112,6 +112,7 @@ bool is_adts = 0;
 #if DEMUXER_OUTPUT_DUMP
 FILE *fp_audio_out = NULL;
 FILE *fp_video_out = NULL;
+bool validate_dump = false;
 
 #define ADTS_HEADER_SIZE            7
 unsigned char buf_adts[ADTS_HEADER_SIZE];
@@ -193,8 +194,13 @@ int test_mediademuxer_set_data_source(mediademuxer_h demuxer, const char *path)
        g_print("test_mediademuxer_set_data_source\n");
 
 #if DEMUXER_OUTPUT_DUMP
-       fp_audio_out = fopen("/opt/usr/media/dump_audio.out", "wb");
-       fp_video_out = fopen("/opt/usr/media/dump_video.out", "wb");
+       fp_audio_out = fopen("/opt/usr/dump_audio.out", "wb");
+       if (fp_audio_out != NULL) {
+               validate_dump = true;
+               fp_video_out = fopen("/opt/usr/dump_video.out", "wb");
+       } else {
+               g_print("Error - Cannot open file for file dump, Please chek root\n");
+       }
 #endif
 
        ret = mediademuxer_set_data_source(demuxer, path);
@@ -350,14 +356,16 @@ static void _mediacodec_fill_audio_buffer_cb(media_packet_h pkt, void *user_data
 
 static void mediacodec_init_audio(int codecid, int flag, int samplerate, int channel, int bit)
 {
-       /* This file  will be used to dump the audio data coming out from mediacodec */
-       fp_out_codec_audio = fopen("/opt/usr/media/codec_dump_audio.out", "wb");
+       /* This file will be used to dump the audio data coming out from mediacodec */
+       fp_out_codec_audio = fopen("/opt/usr/codec_dump_audio.out", "wb");
+       g_print("Create dumped file as codec_dump_audio.out\n");
+
        if (g_media_codec != NULL) {
                mediacodec_unprepare(g_media_codec);
                mediacodec_destroy(g_media_codec);
                g_media_codec = NULL;
        }
-       if (mediacodec_create(&g_media_codec) != MEDIACODEC_ERROR_NONE) {
+       if (mediacodec_create(&g_media_codec) != MEDIACODEC_ERROR_NONE) {
                g_print("mediacodec_create is failed\n");
                return;
        }
@@ -411,12 +419,26 @@ void *_fetch_audio_data(void *ptr)
                if (a_mime == MEDIA_FORMAT_AAC_LC || a_mime == MEDIA_FORMAT_AAC_HE ||
                        a_mime == MEDIA_FORMAT_AAC_HE_PS) {
                        flag = 10;
+                       g_print("mediacodec_init_audio() for MEDIACODEC_AAC\n");
                        mediacodec_init_audio(MEDIACODEC_AAC, flag, samplerate, channel, bit);
+               } else if (a_mime == MEDIA_FORMAT_MP3) {
+                       flag = 10;
+                       g_print("mediacodec_init_audio() for MEDIACODEC_MP3\n");
+                       mediacodec_init_audio(MEDIACODEC_MP3, flag, samplerate, channel, bit);
+               } else if (a_mime == MEDIA_FORMAT_AMR_NB) {
+                       flag = 10;
+                       g_print("mediacodec_init_audio() for MEDIACODEC_AMR_NB\n");
+                       mediacodec_init_audio(MEDIACODEC_AMR_NB, flag, samplerate, channel, bit);
+               } else if (a_mime == MEDIA_FORMAT_AMR_WB) {
+                       flag = 10;
+                       g_print("mediacodec_init_audio() for MEDIACODEC_AMR_WB\n");
+                       mediacodec_init_audio(MEDIACODEC_AMR_WB, flag, samplerate, channel, bit);
                } else {
                        g_print("Not Supported YET- Need to add mime for validating with audio codec\n");
                        return (void *)status;
                }
        }
+
        while (1) {
                ret = mediademuxer_read_sample(demuxer, aud_track, &audbuf);
                if (ret == MD_EOS) {
@@ -432,26 +454,28 @@ void *_fetch_audio_data(void *ptr)
                g_print("Audio Read Count::[%4d] frame - get_buffer_size = %"PRIu64"\n", count, buf_size);
 
 #if DEMUXER_OUTPUT_DUMP
-               if ((a_mime == MEDIA_FORMAT_AAC_LC) && (is_adts == 0)) {
-                       /* This is used only AAC raw case for adding each ADTS frame header */
-                       generate_header_aac_adts(buf_adts, (buf_size+ADTS_HEADER_SIZE));
-                       fwrite(&buf_adts[0], 1, ADTS_HEADER_SIZE, fp_audio_out);
-               } else if ((a_mime == MEDIA_FORMAT_AMR_NB) && (write_amrnb_header == 1)) {
-                       /* This is used only AMR-NB case for adding magic header in only first frame */
-                       g_print("%s - AMRNB_HDR write in first frame\n",__func__);
-                       fwrite(&AMRNB_HDR[0], 1, sizeof(AMRNB_HDR)  - 1, fp_audio_out);
-                       write_amrnb_header = 0;
-               } else if ((a_mime == MEDIA_FORMAT_AMR_WB) && (write_amrwb_header == 1)) {
-                       /* This is used only AMR-WB case for adding magic header in only first frame */
-                       g_print("%s - AMRWB_HDR write in first frame\n",__func__);
-                       fwrite(&AMRWB_HDR[0], 1, sizeof(AMRWB_HDR)  - 1, fp_audio_out);
-                       write_amrwb_header = 0;
-               }
+               if (validate_dump) {
+                       if ((a_mime == MEDIA_FORMAT_AAC_LC) && (is_adts == 0)) {
+                               /* This is used only AAC raw case for adding each ADTS frame header */
+                               generate_header_aac_adts(buf_adts, (buf_size+ADTS_HEADER_SIZE));
+                               fwrite(&buf_adts[0], 1, ADTS_HEADER_SIZE, fp_audio_out);
+                       } else if ((a_mime == MEDIA_FORMAT_AMR_NB) && (write_amrnb_header == 1)) {
+                               /* This is used only AMR-NB case for adding magic header in only first frame */
+                               g_print("%s - AMRNB_HDR write in first frame\n",__func__);
+                               fwrite(&AMRNB_HDR[0], 1, sizeof(AMRNB_HDR)  - 1, fp_audio_out);
+                               write_amrnb_header = 0;
+                       } else if ((a_mime == MEDIA_FORMAT_AMR_WB) && (write_amrwb_header == 1)) {
+                               /* This is used only AMR-WB case for adding magic header in only first frame */
+                               g_print("%s - AMRWB_HDR write in first frame\n",__func__);
+                               fwrite(&AMRWB_HDR[0], 1, sizeof(AMRWB_HDR)  - 1, fp_audio_out);
+                               write_amrwb_header = 0;
+                       }
 
-               if (data != NULL)
-                       fwrite(data, 1, buf_size, fp_audio_out);
-               else
-                       g_print("DUMP : write(audio data) fail for NULL\n");
+                       if (data != NULL)
+                               fwrite(data, 1, buf_size, fp_audio_out);
+                       else
+                               g_print("DUMP : write(audio data) fail for NULL\n");
+               }
 #endif
 
                if (validate_with_codec)
@@ -498,7 +522,9 @@ static void _mediacodec_fill_video_buffer_cb(media_packet_h pkt, void *user_data
 static void mediacodec_init_video(int codecid, int flag, int width, int height)
 {
        /* This file  will be used to dump the data */
-       fp_out_codec_video = fopen("/opt/usr/media/codec_dump_video.out", "wb");
+       fp_out_codec_video = fopen("/opt/usr/codec_dump_video.out", "wb");
+       g_print("Create dumped file as codec_dump_video.out\n");
+
        if (g_media_codec_1 != NULL) {
                mediacodec_unprepare(g_media_codec_1);
                mediacodec_destroy(g_media_codec_1);
@@ -579,6 +605,7 @@ void *_fetch_video_data(void *ptr)
                if (v_mime == MEDIA_FORMAT_H264_SP || v_mime == MEDIA_FORMAT_H264_MP ||
                        v_mime == MEDIA_FORMAT_H264_HP) {
                        flag = 10;
+                       g_print("mediacodec_init_audio() for MEDIACODEC_H264\n");
                        mediacodec_init_video(MEDIACODEC_H264, flag, w, h);
                } else {
                        g_print("Not Supported YET- Need to add mime for validating with video codec\n");
@@ -603,10 +630,12 @@ void *_fetch_video_data(void *ptr)
                _local_media_packet_get_codec_data(vidbuf);
 #endif
 #if DEMUXER_OUTPUT_DUMP
-               if (data != NULL)
-                       fwrite(data, 1, buf_size, fp_video_out);
-               else
-                       g_print("DUMP : write(video data) fail for NULL\n");
+               if (validate_dump) {
+                       if (data != NULL)
+                               fwrite(data, 1, buf_size, fp_video_out);
+                       else
+                               g_print("DUMP : write(video data) fail for NULL\n");
+               }
 #endif
 
                if (validate_with_codec)