static void type_found (GstElement * typefind, guint probability, GstCaps * caps, GstSplitMuxPartReader * reader) { GstElement *demux; GST_INFO_OBJECT (reader, "Got type %" GST_PTR_FORMAT, caps); /* typefind found a type. Look for the demuxer to handle it */ demux = reader->demux = find_demuxer (caps); if (reader->demux == NULL) { GST_ERROR_OBJECT (reader, "Failed to create demuxer element"); return; } /* Connect to demux signals */ g_signal_connect (demux, "pad-added", G_CALLBACK (new_decoded_pad_added_cb), reader); g_signal_connect (demux, "no-more-pads", G_CALLBACK (no_more_pads), reader); gst_element_set_locked_state (demux, TRUE); gst_bin_add (GST_BIN_CAST (reader), demux); gst_element_link_pads (reader->typefind, "src", demux, NULL); gst_element_set_state (reader->demux, GST_STATE_TARGET (reader)); gst_element_set_locked_state (demux, FALSE); }
void ogm_reader_c::handle_new_stream_and_packets(ogg_page *og) { ogm_demuxer_cptr dmx; handle_new_stream(og); dmx = find_demuxer(ogg_page_serialno(og)); if (dmx) process_header_packets(dmx); }
void ogm_reader_c::process_header_page(ogg_page *og) { ogm_demuxer_cptr dmx; dmx = find_demuxer(ogg_page_serialno(og)); if (!dmx ||dmx->headers_read) return; ogg_stream_pagein(&dmx->os, og); process_header_packets(dmx); }
/* Process the contents of a page. First find the demuxer associated with the page's serial number. If there is no such demuxer then either the OGG file is damaged (very rare) or the page simply belongs to a stream that the user didn't want extracted. If the demuxer is found then hand over all packets in this page to the associated packetizer. */ void ogm_reader_c::process_page(ogg_page *og) { ogm_demuxer_cptr dmx; int64_t granulepos; dmx = find_demuxer(ogg_page_serialno(og)); if (!dmx || !dmx->in_use) return; granulepos = ogg_page_granulepos(og); if ((-1 != granulepos) && (granulepos < dmx->last_granulepos)) { mxwarn_tid(m_ti.m_fname, dmx->track_id, Y("The timecodes for this stream have been reset in the middle of the file. This is not supported. The current packet will be discarded.\n")); return; } ogg_stream_pagein(&dmx->os, og); dmx->process_page(granulepos); dmx->last_granulepos = granulepos; }