int loop_track;
track_info *head_track = &(gst_handle->info);
track *head = head_track->head;
+ MEDIADEMUXER_CHECK_NULL_VOID(gst_handle);
gst_handle->selected_tracks =
(bool *) g_malloc(sizeof(bool) * (gst_handle->total_tracks));
MD_I("Allocating %p to core->selected_tracks \n", gst_handle->selected_tracks);
track *tmp = NULL;
mdgst_handle_t *gst_handle = (mdgst_handle_t *)data;
track_info *head_track = &(gst_handle->info);
- GstCaps *caps = gst_pad_get_current_caps(pad);
+ GstCaps *caps = NULL;
+ MEDIADEMUXER_CHECK_NULL_VOID(gst_handle);
+ caps = gst_pad_get_current_caps(pad);
if (!caps) {
MD_E("caps is NULL");
return;
GstPad *pad = NULL;
GstPad *demuxer_pad = NULL;
GstPad *fake_pad = NULL;
- gchar *type;
+ gchar *type = NULL;
+ MEDIADEMUXER_CHECK_NULL_VOID(gst_handle);
type = gst_caps_to_string(caps);
- if (type) {
- MD_I("Media type %s found, probability %d%%\n", type, probability);
- if (strstr(type, "quicktime") || (strstr(type, "audio/x-m4a")) || strstr(type, "x-3gp")
- || strstr(type, "ogg") || strstr(type, "flv") || strstr(type, "x-msvideo")) {
- gst_handle->is_valid_container = true;
- if (strstr(type, "ogg"))
- gst_handle->demux = gst_element_factory_make("oggdemux", NULL);
- else if (strstr(type, "flv"))
- gst_handle->demux = gst_element_factory_make("flvdemux", NULL);
- else if (strstr(type, "x-msvideo"))
- gst_handle->demux = gst_element_factory_make("avidemux", NULL);
- else
- gst_handle->demux = gst_element_factory_make("qtdemux", NULL);
- if (!gst_handle->demux) {
- gst_handle->is_valid_container = false;
- MD_E("factory not able to create qtdemux\n");
- goto ERROR;
- } else {
- g_signal_connect(gst_handle->demux, "pad-added",
- G_CALLBACK(__gst_on_pad_added), gst_handle);
- g_signal_connect(gst_handle->demux, "no-more-pads",
- G_CALLBACK(__gst_no_more_pad), gst_handle);
- if (!gst_bin_add(GST_BIN(gst_handle->pipeline), gst_handle->demux)) {
- gst_object_unref(gst_handle->demux);
- MD_E("fail add demuxer(%s) in pipeline",
- GST_ELEMENT_NAME(gst_handle->demux));
- goto ERROR;
- }
+ if (!type) {
+ MD_E("Fail to get caps string");
+ goto ERROR;
+ }
- pad = gst_element_get_static_pad(gst_handle->typefind, "src");
- if (!pad) {
- MD_E("fail to get typefind src pad.\n");
- goto ERROR;
- }
- demuxer_pad = gst_element_get_static_pad(gst_handle->demux, "sink");
- if (!demuxer_pad) {
- MD_E("fail to get qtdemuc sink pad.\n");
- goto ERROR;
- }
- fake_pad = gst_element_get_static_pad(gst_handle->fakesink, "sink");
- if (!fake_pad) {
- MD_E("fail to get fakesink sink pad.\n");
- goto ERROR;
- }
- gst_pad_unlink(pad, fake_pad);
- MEDIADEMUXER_LINK_PAD(pad, demuxer_pad, ERROR);
-
- MEDIADEMUXER_SYNC_STATE_WITH_PARENT(gst_handle->demux, ERROR);
- if (pad)
- gst_object_unref(pad);
- if (demuxer_pad)
- gst_object_unref(demuxer_pad);
- if (fake_pad)
- gst_object_unref(fake_pad);
- }
- } else if ((strstr(type, "adts"))
- || (strstr(type, "audio/mpeg"))
- || (strstr(type, "audio/x-wav"))
- || (strstr(type, "audio/x-flac"))
- || (strstr(type, "application/x-id3"))
- || (strstr(type, "audio/x-amr-nb-sh"))
- || (strstr(type, "audio/x-amr-wb-sh"))) {
- MD_I("Audio only format is found\n");
- pad = gst_element_get_static_pad(gst_handle->typefind, "src");
- if (!pad) {
- MD_E("fail to get typefind src pad.\n");
- goto ERROR;
- }
- fake_pad = gst_element_get_static_pad(gst_handle->fakesink, "sink");
- if (!fake_pad) {
- MD_E("fail to get fakesink sink pad.\n");
- goto ERROR;
- }
- gst_pad_unlink(pad, fake_pad);
- if (pad)
- gst_object_unref(pad);
- if (fake_pad)
- gst_object_unref(fake_pad);
+ MD_I("Media type %s found, probability %d%%\n", type, probability);
+ if (strstr(type, "quicktime") || strstr(type, "audio/x-m4a") ||
+ strstr(type, "x-3gp") || strstr(type, "ogg") ||
+ strstr(type, "flv") || strstr(type, "x-msvideo")) {
+ gst_handle->is_valid_container = true;
+ if (strstr(type, "ogg"))
+ gst_handle->demux = gst_element_factory_make("oggdemux", NULL);
+ else if (strstr(type, "flv"))
+ gst_handle->demux = gst_element_factory_make("flvdemux", NULL);
+ else if (strstr(type, "x-msvideo"))
+ gst_handle->demux = gst_element_factory_make("avidemux", NULL);
+ else
+ gst_handle->demux = gst_element_factory_make("qtdemux", NULL);
- __gst_create_audio_only_pipeline(data, caps);
- } else {
+ if (!gst_handle->demux) {
gst_handle->is_valid_container = false;
- MD_E("Not supported container %s\n", type);
+ MD_E("factory not able to create qtdemux\n");
+ goto ERROR;
}
- g_free(type);
+ g_signal_connect(gst_handle->demux, "pad-added",
+ G_CALLBACK(__gst_on_pad_added), gst_handle);
+ g_signal_connect(gst_handle->demux, "no-more-pads",
+ G_CALLBACK(__gst_no_more_pad), gst_handle);
+ gst_element_set_locked_state(gst_handle->demux, TRUE);
+ if (!gst_bin_add(GST_BIN(gst_handle->pipeline), gst_handle->demux)) {
+ MD_E("fail add demuxer(%s) in pipeline",
+ GST_ELEMENT_NAME(gst_handle->demux));
+ gst_object_unref(gst_handle->demux);
+ gst_handle->demux = NULL;
+ goto ERROR;
+ }
+
+ pad = gst_element_get_static_pad(gst_handle->typefind, "src");
+ if (!pad) {
+ MD_E("fail to get typefind src pad.\n");
+ goto ERROR;
+ }
+ demuxer_pad = gst_element_get_static_pad(gst_handle->demux, "sink");
+ if (!demuxer_pad) {
+ MD_E("fail to get qtdemuc sink pad.\n");
+ goto ERROR;
+ }
+ fake_pad = gst_element_get_static_pad(gst_handle->fakesink, "sink");
+ if (!fake_pad) {
+ MD_E("fail to get fakesink sink pad.\n");
+ goto ERROR;
+ }
+ gst_pad_unlink(pad, fake_pad);
+ MEDIADEMUXER_LINK_PAD(pad, demuxer_pad, ERROR);
+
+ MEDIADEMUXER_SYNC_STATE_WITH_PARENT(gst_handle->demux, ERROR);
+ gst_element_set_locked_state(gst_handle->demux, FALSE);
+ if (pad)
+ gst_object_unref(pad);
+ if (demuxer_pad)
+ gst_object_unref(demuxer_pad);
+ if (fake_pad)
+ gst_object_unref(fake_pad);
+
+ } else if ((strstr(type, "adts"))
+ || (strstr(type, "audio/mpeg"))
+ || (strstr(type, "audio/x-wav"))
+ || (strstr(type, "audio/x-flac"))
+ || (strstr(type, "application/x-id3"))
+ || (strstr(type, "audio/x-amr-nb-sh"))
+ || (strstr(type, "audio/x-amr-wb-sh"))) {
+ MD_I("Audio only format is found\n");
+ pad = gst_element_get_static_pad(gst_handle->typefind, "src");
+ if (!pad) {
+ MD_E("fail to get typefind src pad.\n");
+ goto ERROR;
+ }
+ fake_pad = gst_element_get_static_pad(gst_handle->fakesink, "sink");
+ if (!fake_pad) {
+ MD_E("fail to get fakesink sink pad.\n");
+ goto ERROR;
+ }
+ gst_pad_unlink(pad, fake_pad);
+ if (pad)
+ gst_object_unref(pad);
+ if (fake_pad)
+ gst_object_unref(fake_pad);
+
+ __gst_create_audio_only_pipeline(data, caps);
+ } else {
+ gst_handle->is_valid_container = false;
+ MD_E("Not supported container %s\n", type);
}
+
+ g_free(type);
MEDIADEMUXER_FLEAVE();
return;
+
ERROR:
gst_handle->is_valid_container = false;
if (type)
g_free(type);
+ if (gst_handle->demux)
+ gst_element_set_locked_state(gst_handle->demux, FALSE);
if (pad)
gst_object_unref(pad);
if (demuxer_pad)
/* Round off the framerate */
if (frame_rate_denominator)
- frame_rate = (int)floor((frame_rate_numerator / frame_rate_denominator) + 0.5);
+ frame_rate = (int)floor(((gdouble)frame_rate_numerator / frame_rate_denominator) + 0.5);
MD_I("set frame rate %d", frame_rate);
if (media_format_set_video_frame_rate(format, frame_rate)) {
void _gst_clear_struct(mdgst_handle_t *gst_handle)
{
MEDIADEMUXER_FENTER();
+ MEDIADEMUXER_CHECK_NULL_VOID(gst_handle);
if (gst_handle->selected_tracks) {
MD_I("Deallocating gst_handle->selected_tracks %p\n",
gst_handle->selected_tracks);