Sync with 2.4 (Added demuxer support for WAV). 15/51815/2
authorDeepak Srivastava <srivastava.d@samsung.com>
Mon, 16 Nov 2015 09:53:32 +0000 (15:23 +0530)
committerDeepak Srivastava <srivastava.d@samsung.com>
Tue, 17 Nov 2015 03:37:43 +0000 (09:07 +0530)
Change-Id: Ied4a81086878c50bb13d97a7a91cf5d8dc21b8a5
Signed-off-by: Deepak Srivastava <srivastava.d@samsung.com>
include/port_gst/mediademuxer_port_gst.h
src/port_gst/mediademuxer_port_gst.c
test/mediademuxer_test.c

index 908e6b1bcae48d4e95a74b5a57085c8b223cbe94..520b186136ade0a901056f7d48332641827e0623 100755 (executable)
@@ -65,6 +65,7 @@ typedef struct track {
        GstElement *appsink;
        GstElement *fakesink;
        GstElement *queue;
+       media_format_h format;
        struct track *next;
 } track;
 
index 6cee35e1a39c8364140ddf7cb55abaf8c76d6c3a..43cfbc5d088a3e0ea69f5b75eec11b02cc7f4e8b 100755 (executable)
@@ -353,6 +353,8 @@ static int __gst_create_audio_only_pipeline(gpointer data,  GstCaps *caps)
        } else if (strstr(type, "audio/x-amr-nb-sh")
                   || strstr(type, "audio/x-amr-wb-sh")) {
                gst_handle->demux = gst_element_factory_make("amrparse", NULL);
+       } else if (strstr(type, "audio/x-wav")) {
+               gst_handle->demux = gst_element_factory_make("wavparse", NULL);
        }
        g_free(type);
        if (!gst_handle->demux) {
@@ -504,6 +506,7 @@ static void __gst_cb_typefind(GstElement *tf, guint probability,
                        }
                } else if ((strstr(type, "adts"))
                           || (strstr(type, "audio/mpeg"))
+                          || (strstr(type, "audio/x-wav"))
                           || (strstr(type, "application/x-id3"))
                           || (strstr(type, "audio/x-amr-nb-sh"))
                           || (strstr(type, "audio/x-amr-wb-sh"))) {
@@ -906,6 +909,24 @@ int _set_mime_audio(media_format_h format, track *head)
                        bit = 16;       /* default */
                if (media_format_set_audio_bit(format, bit))
                        goto ERROR;
+       } else if (gst_structure_has_name(struc, "audio/x-wav")) {
+               gst_structure_get_int(struc, "channels", &channels);
+               gst_structure_get_int(struc, "rate", &rate);
+               gst_structure_get_int(struc, "bit", &bit);
+               if (media_format_set_audio_mime(format, MEDIA_FORMAT_PCM))
+                       goto ERROR;
+               if (channels == 0)
+                       channels = 2;   /* default */
+               if (media_format_set_audio_channel(format, channels))
+                       goto ERROR;
+               if (rate == 0)
+                       rate = 44100;   /* default */
+               if (media_format_set_audio_samplerate(format, rate))
+                       goto ERROR;
+               if (bit == 0)
+                       bit = 16;       /* default */
+               if (media_format_set_audio_bit(format, bit))
+                       goto ERROR;
        } else {
                MD_I("Audio mime not supported so far\n");
                goto ERROR;
@@ -938,27 +959,31 @@ static int gst_demuxer_get_track_info(MMHandleType pHandle,
                goto ERROR;
        }
 
-       ret = media_format_create(format);
+       while (count != index) {
+               temp = temp->next;
+               count++;
+       }
+
+       ret = media_format_create(&(temp->format));
        if (ret != MEDIA_FORMAT_ERROR_NONE) {
                MD_E("Mediaformat creation failed. returned %d\n", ret);
                ret = MD_INTERNAL_ERROR;
                goto ERROR;
        }
-       while (count != index) {
-               temp = temp->next;
-               count++;
-       }
 
        MD_I("CAPS for selected track [%d] is [%s]\n", index, temp->caps_string);
-       MD_I("format ptr[%p]\n", *format);
+       MD_I("format ptr[%p]\n", temp->format);
        if (temp->name[0] == 'a') {
                MD_I("Setting for Audio \n");
-               _set_mime_audio(*format, temp);
+               _set_mime_audio(temp->format, temp);
        } else if (temp->name[0] == 'v') {
                MD_I("Setting for Video \n");
-               _set_mime_video(*format, temp);
+               _set_mime_video(temp->format, temp);
        } else
-               MD_I("Not supported so far (except audio and video)\n");
+               MD_W("Not supported so far (except audio and video)\n");
+
+       *format = temp->format;
+
        MEDIADEMUXER_FLEAVE();
        return ret;
 ERROR:
@@ -1044,7 +1069,6 @@ static int gst_demuxer_read_sample(MMHandleType pHandle,
        mdgst_handle_t *demuxer = (mdgst_handle_t *) pHandle;
 
        media_packet_h mediabuf = NULL;
-       media_format_h mediafmt = NULL;
        int indx = 0;
        char *codec_data = NULL;
        char *temp_codec_data = NULL;
@@ -1069,56 +1093,13 @@ static int gst_demuxer_read_sample(MMHandleType pHandle,
                }
                indx++;
        }
-       if (atrack->name[0] == 'a') {
-               if (media_format_create(&mediafmt)) {
-                       MD_E("media_format_create failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
 
-               if (media_format_set_audio_mime(mediafmt, MEDIA_FORMAT_AAC)) {
-                       MD_E("media_format_set_audio_mime failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
-
-               if (media_packet_create_alloc(mediafmt, NULL, NULL, &mediabuf)) {
+       if (media_packet_create_alloc(atrack->format, NULL, NULL, &mediabuf)) {
                        MD_E("media_packet_create_alloc failed\n");
                        ret = MD_ERROR;
                        goto ERROR;
                }
-       } else if (atrack->name[0] == 'v') {
-                if (media_format_create(&mediafmt)) {
-                       MD_E("media_format_create failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
 
-               if (media_format_set_video_mime(mediafmt, MEDIA_FORMAT_H264_SP)) {
-                       MD_E("media_format_set_ivideo_mime failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
-               if (media_format_set_video_width(mediafmt, 760)) {
-                       MD_E("media_format_set_video_width failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
-               if (media_format_set_video_height(mediafmt, 480)) {
-                       MD_E("media_format_set_video_height failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
-
-               if (media_packet_create_alloc(mediafmt, NULL, NULL, &mediabuf)) {
-                       MD_E("media_packet_create_alloc failed\n");
-                       ret = MD_ERROR;
-                       goto ERROR;
-               }
-       } else {
-               MD_E("Invalid track format\n");
-               goto ERROR;
-       }
        if (indx != track_indx) {
                MD_E("Invalid track Index\n");
                ret = MD_ERROR_INVALID_ARGUMENT;
index ff1534d4a84e0f532a310b50560fe65d4da6d63d..60119bc0bac509d24a2f3952192878ce4f7baf99 100755 (executable)
@@ -48,7 +48,6 @@ enum {
 |    GLOBAL VARIABLE DEFINITIONS:                                       |
 -----------------------------------------------------------------------*/
 mediademuxer_h demuxer = NULL;
-media_format_h *g_media_format = NULL;
 media_format_mimetype_e v_mime;
 media_format_mimetype_e a_mime;
 int g_menu_state = CURRENT_STATUS_MAINMENU;
@@ -250,44 +249,35 @@ int test_mediademuxer_get_track_info()
        int track = 0;
 
        g_print("test_mediademuxer_get_track_info\n");
-       g_media_format =
-           (media_format_h *) g_malloc(sizeof(media_format_h) * num_tracks);
-       g_print("allocated %p memory for g_media_format\n", g_media_format);
-       if (g_media_format) {
-               for (; track < num_tracks; track++) {
+       for (; track < num_tracks; track++) {
+               media_format_h 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) {
-                               g_print("g_media_format[%d] is created successfully! \n", track);
-                               ret = mediademuxer_get_track_info(demuxer, track, &g_media_format[track]);
-                               if (ret == 0) {
-                                       if (media_format_get_video_info(g_media_format[track], &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",
+                               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[track], &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",
-                                                               a_mime, channel, samplerate, bit);
-                                               media_format_get_audio_aac_type(g_media_format[track], &is_adts);
-                                               aud_track = track;
-                                       } else {
-                                               g_print("Not Supported YET\n");
-                                       }
+                               } 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",
+                                                       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");
                                }
-                               media_format_unref(g_media_format[track]);
-                               g_media_format[track] = NULL;
                        } else {
                                g_print("Error while creating media_format_create\n");
                        }
-               }
-               g_free(g_media_format);
-               g_media_format = NULL;
-       } else {
-               g_print("Error while allocating memory\n");
        }
 
 #if DEMUXER_OUTPUT_DUMP