static void gst_dshowvideodec_finalize (GObject * object) { GstDshowVideoDec *vdec = (GstDshowVideoDec *) (object); if (vdec->segment) { gst_segment_free (vdec->segment); vdec->segment = NULL; } /* signal the COM thread that it sould uninitialize COM */ if (vdec->comInitialized) { g_mutex_lock (vdec->com_deinit_lock); g_cond_signal (vdec->com_uninitialize); g_cond_wait (vdec->com_uninitialized, vdec->com_deinit_lock); g_mutex_unlock (vdec->com_deinit_lock); } g_mutex_free (vdec->com_init_lock); g_mutex_free (vdec->com_deinit_lock); g_cond_free (vdec->com_initialized); g_cond_free (vdec->com_uninitialize); g_cond_free (vdec->com_uninitialized); G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gst_dshowaudiodec_finalize (GObject * object) { GstDshowAudioDec *adec = (GstDshowAudioDec *) (object); if (adec->segment) { gst_segment_free (adec->segment); adec->segment = NULL; } if (adec->codec_data) { gst_buffer_unref (adec->codec_data); adec->codec_data = NULL; } /* signal the COM thread that it sould uninitialize COM */ if (adec->comInitialized) { g_mutex_lock (adec->com_deinit_lock); g_cond_signal (adec->com_uninitialize); g_cond_wait (adec->com_uninitialized, adec->com_deinit_lock); g_mutex_unlock (adec->com_deinit_lock); } g_mutex_free (adec->com_init_lock); g_mutex_free (adec->com_deinit_lock); g_cond_free (adec->com_initialized); g_cond_free (adec->com_uninitialize); g_cond_free (adec->com_uninitialized); G_OBJECT_CLASS (parent_class)->finalize (object); }
static GstFlowReturn gst_dtls_enc_push (GstDtlsEnc * self, GstBuffer * buffer) { GstDtlsBase *base = GST_DTLS_BASE (self); GstEvent *segment_event, *caps_event; gchar *stream_id; stream_id = gst_pad_get_stream_id (base->srcpad); if (stream_id == NULL) { stream_id = gst_pad_get_stream_id (base->sinkpad); if (stream_id == NULL) { stream_id = gst_pad_create_stream_id (base->srcpad, GST_ELEMENT (base), NULL); } gst_pad_push_event (base->srcpad, gst_event_new_stream_start (stream_id)); } g_free (stream_id); caps_event = gst_pad_get_sticky_event (base->srcpad, GST_EVENT_CAPS, 0); if (caps_event == NULL) { GstCaps *caps = gst_caps_from_string ("application/x-dtls"); caps_event = gst_event_new_caps (caps); gst_caps_unref (caps); gst_pad_push_event (base->srcpad, caps_event); } else { gst_event_unref (caps_event); } segment_event = gst_pad_get_sticky_event (base->srcpad, GST_EVENT_SEGMENT, 0); if (segment_event == NULL) { GstSegment *segment = gst_segment_new (); gst_segment_init (segment, GST_FORMAT_BYTES); segment_event = gst_event_new_segment (segment); gst_segment_free (segment); gst_pad_push_event (base->srcpad, segment_event); } else { gst_event_unref (segment_event); } GST_OBJECT_LOCK (self); if (self->src_buffer && self->running_thread == g_thread_self ()) { g_assert (gst_buffer_get_size (buffer) != 181); gst_buffer_copy_into (buffer, self->src_buffer, GST_BUFFER_COPY_METADATA, 0, -1); } GST_OBJECT_UNLOCK (self); return gst_pad_push (base->srcpad, buffer); }
static void gst_dvdec_finalize (GObject * object) { GstDVDec *dvdec = GST_DVDEC (object); gst_segment_free (dvdec->segment); G_OBJECT_CLASS (parent_class)->finalize (object); }
void gst_smart_encoder_dispose (GObject * object) { GstSmartEncoder *smart_encoder = (GstSmartEncoder *) object; if (smart_encoder->segment) gst_segment_free (smart_encoder->segment); smart_encoder->segment = NULL; if (smart_encoder->available_caps) gst_caps_unref (smart_encoder->available_caps); smart_encoder->available_caps = NULL; G_OBJECT_CLASS (gst_smart_encoder_parent_class)->dispose (object); }
static void gst_dshowvideodec_dispose (GObject * object) { GstDshowVideoDec *vdec = (GstDshowVideoDec *) (object); if (vdec->segment) { gst_segment_free (vdec->segment); vdec->segment = NULL; } CoUninitialize (); G_OBJECT_CLASS (parent_class)->dispose (object); }
static GstEvent * gst_timidity_get_new_segment_event (GstTimidity * timidity, GstFormat format, gboolean update) { GstSegment *segment; GstEvent *event; segment = gst_timidity_get_segment (timidity, format, update); event = gst_event_new_new_segment_full (update, segment->rate, segment->applied_rate, segment->format, segment->start, segment->stop, segment->time); gst_segment_free (segment); return event; }
static void gst_dshowaudiodec_dispose (GObject * object) { GstDshowAudioDec *adec = (GstDshowAudioDec *) (object); if (adec->segment) { gst_segment_free (adec->segment); adec->segment = NULL; } if (adec->codec_data) { gst_buffer_unref (adec->codec_data); adec->codec_data = NULL; } if (adec->comInitialized) { CoUninitialize (); adec->comInitialized = FALSE; } G_OBJECT_CLASS (parent_class)->dispose (object); }
static void gst_timidity_loop (GstPad * sinkpad) { GstTimidity *timidity = GST_TIMIDITY (GST_PAD_PARENT (sinkpad)); GstBuffer *out; GstFlowReturn ret; if (timidity->mididata_size == 0) { if (!gst_timidity_get_upstream_size (timidity, &timidity->mididata_size)) { GST_ELEMENT_ERROR (timidity, STREAM, DECODE, (NULL), ("Unable to get song length")); goto paused; } if (timidity->mididata) g_free (timidity->mididata); timidity->mididata = g_malloc (timidity->mididata_size); timidity->mididata_offset = 0; return; } if (timidity->mididata_offset < timidity->mididata_size) { GstBuffer *buffer; gint64 size; GST_DEBUG_OBJECT (timidity, "loading song"); ret = gst_pad_pull_range (timidity->sinkpad, timidity->mididata_offset, -1, &buffer); if (ret != GST_FLOW_OK) { GST_ELEMENT_ERROR (timidity, STREAM, DECODE, (NULL), ("Unable to load song")); goto paused; } size = timidity->mididata_size - timidity->mididata_offset; if (GST_BUFFER_SIZE (buffer) < size) size = GST_BUFFER_SIZE (buffer); memmove (timidity->mididata + timidity->mididata_offset, GST_BUFFER_DATA (buffer), size); gst_buffer_unref (buffer); timidity->mididata_offset += size; GST_DEBUG_OBJECT (timidity, "Song loaded"); return; } if (!timidity->song) { MidIStream *stream; GstTagList *tags = NULL; gchar *text; GST_DEBUG_OBJECT (timidity, "Parsing song"); stream = mid_istream_open_mem (timidity->mididata, timidity->mididata_size, 0); timidity->song = mid_song_load (stream, timidity->song_options); mid_istream_close (stream); if (!timidity->song) { GST_ELEMENT_ERROR (timidity, STREAM, DECODE, (NULL), ("Unable to parse midi")); goto paused; } mid_song_start (timidity->song); timidity->o_len = (GST_MSECOND * (GstClockTime) mid_song_get_total_time (timidity->song)) / timidity->time_per_frame; gst_segment_set_newsegment (timidity->o_segment, FALSE, 1.0, GST_FORMAT_DEFAULT, 0, GST_CLOCK_TIME_NONE, 0); gst_pad_push_event (timidity->srcpad, gst_timidity_get_new_segment_event (timidity, GST_FORMAT_TIME, FALSE)); /* extract tags */ text = mid_song_get_meta (timidity->song, MID_SONG_TEXT); if (text) { tags = gst_tag_list_new (); gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_TITLE, text, NULL); //g_free (text); } text = mid_song_get_meta (timidity->song, MID_SONG_COPYRIGHT); if (text) { if (tags == NULL) tags = gst_tag_list_new (); gst_tag_list_add (tags, GST_TAG_MERGE_APPEND, GST_TAG_COPYRIGHT, text, NULL); //g_free (text); } if (tags) { gst_element_found_tags (GST_ELEMENT (timidity), tags); } GST_DEBUG_OBJECT (timidity, "Parsing song done"); return; } if (timidity->o_segment_changed) { GstSegment *segment = gst_timidity_get_segment (timidity, GST_FORMAT_TIME, !timidity->o_new_segment); GST_LOG_OBJECT (timidity, "sending newsegment from %" GST_TIME_FORMAT "-%" GST_TIME_FORMAT ", pos=%" GST_TIME_FORMAT, GST_TIME_ARGS ((guint64) segment->start), GST_TIME_ARGS ((guint64) segment->stop), GST_TIME_ARGS ((guint64) segment->time)); if (timidity->o_segment->flags & GST_SEEK_FLAG_SEGMENT) { gst_element_post_message (GST_ELEMENT (timidity), gst_message_new_segment_start (GST_OBJECT (timidity), segment->format, segment->start)); } gst_segment_free (segment); timidity->o_segment_changed = FALSE; return; } if (timidity->o_seek) { /* perform a seek internally */ timidity->o_segment->last_stop = timidity->o_segment->time; mid_song_seek (timidity->song, (timidity->o_segment->last_stop * timidity->time_per_frame) / GST_MSECOND); } out = gst_timidity_get_buffer (timidity); if (!out) { GST_LOG_OBJECT (timidity, "Song ended, generating eos"); gst_pad_push_event (timidity->srcpad, gst_event_new_eos ()); timidity->o_seek = FALSE; goto paused; } if (timidity->o_seek) { GST_BUFFER_FLAG_SET (out, GST_BUFFER_FLAG_DISCONT); timidity->o_seek = FALSE; } gst_buffer_set_caps (out, timidity->out_caps); ret = gst_pad_push (timidity->srcpad, out); if (GST_FLOW_IS_FATAL (ret) || ret == GST_FLOW_NOT_LINKED) goto error; return; paused: { GST_DEBUG_OBJECT (timidity, "pausing task"); gst_pad_pause_task (timidity->sinkpad); return; } error: { GST_ELEMENT_ERROR (timidity, STREAM, FAILED, ("Internal data stream error"), ("Streaming stopped, reason %s", gst_flow_get_name (ret))); gst_pad_push_event (timidity->srcpad, gst_event_new_eos ()); goto paused; } }