static GstEvent * gst_vader_event_new(GstVader *c, GstEventType type, GstClockTime timestamp) { GstEvent *e; e = gst_event_new_custom(type, NULL); GST_EVENT_TIMESTAMP(e) = timestamp; return e; }
static void gst_event_init (GstEventImpl * event, GstEventType type) { gst_mini_object_init (GST_MINI_OBJECT_CAST (event), 0, _gst_event_type, (GstMiniObjectCopyFunction) _gst_event_copy, NULL, (GstMiniObjectFreeFunction) _gst_event_free); GST_EVENT_TYPE (event) = type; GST_EVENT_TIMESTAMP (event) = GST_CLOCK_TIME_NONE; GST_EVENT_SEQNUM (event) = gst_util_seqnum_next (); }
static GstEvent * _gst_event_copy (GstEvent * event) { GstEvent *copy; copy = (GstEvent *) gst_mini_object_new (GST_TYPE_EVENT); GST_EVENT_TYPE (copy) = GST_EVENT_TYPE (event); GST_EVENT_TIMESTAMP (copy) = GST_EVENT_TIMESTAMP (event); GST_EVENT_SEQNUM (copy) = GST_EVENT_SEQNUM (event); if (GST_EVENT_SRC (event)) { GST_EVENT_SRC (copy) = gst_object_ref (GST_EVENT_SRC (event)); } if (event->structure) { copy->structure = gst_structure_copy (event->structure); gst_structure_set_parent_refcount (copy->structure, ©->mini_object.refcount); } return copy; }
static GstEvent * _gst_event_copy (GstEvent * event) { GstEventImpl *copy; GstStructure *s; copy = g_slice_new0 (GstEventImpl); gst_event_init (copy, GST_EVENT_TYPE (event)); GST_EVENT_TIMESTAMP (copy) = GST_EVENT_TIMESTAMP (event); GST_EVENT_SEQNUM (copy) = GST_EVENT_SEQNUM (event); s = GST_EVENT_STRUCTURE (event); if (s) { GST_EVENT_STRUCTURE (copy) = gst_structure_copy (s); gst_structure_set_parent_refcount (GST_EVENT_STRUCTURE (copy), ©->event.mini_object.refcount); } else { GST_EVENT_STRUCTURE (copy) = NULL; } return GST_EVENT_CAST (copy); }
/* takes ownership of tag list */ static gboolean gst_icydemux_send_tag_event (GstICYDemux * icydemux, GstTagList * tags) { GstEvent *event; gst_element_post_message (GST_ELEMENT (icydemux), gst_message_new_tag (GST_OBJECT (icydemux), gst_tag_list_copy (tags))); event = gst_event_new_tag (tags); GST_EVENT_TIMESTAMP (event) = 0; GST_DEBUG_OBJECT (icydemux, "Sending tag event on src pad"); return gst_pad_push_event (icydemux->srcpad, event); }
static void gst_event_init (GstEvent * event) { GST_EVENT_TIMESTAMP (event) = GST_CLOCK_TIME_NONE; }
static gboolean gst_pocketsphinx_event(GstPad *pad, GstEvent *event) { GstPocketSphinx *ps; ps = GST_POCKETSPHINX(GST_OBJECT_PARENT(pad)); /* Pick out VAD events. */ switch (event->type) { case GST_EVENT_NEWSEGMENT: /* Initialize the decoder once the audio starts, if it's not * there yet. */ if (ps->ps == NULL) { ps->ps = ps_init(ps->config); if (ps->ps == NULL) { GST_ELEMENT_ERROR(GST_ELEMENT(ps), LIBRARY, INIT, ("Failed to initialize PocketSphinx"), ("Failed to initialize PocketSphinx")); return FALSE; } } return gst_pad_event_default(pad, event); case GST_EVENT_VADER_START: ps->listening = TRUE; ps_start_utt(ps->ps, NULL); /* Forward this event. */ return gst_pad_event_default(pad, event); case GST_EVENT_EOS: case GST_EVENT_VADER_STOP: { GstBuffer *buffer; int32 score; char const *hyp; char const *uttid; hyp = NULL; if (ps->listening) { ps->listening = FALSE; ps_end_utt(ps->ps); hyp = ps_get_hyp(ps->ps, &score, &uttid); /* Dump the lattice if requested. */ if (ps->latdir) { char *latfile = string_join(ps->latdir, "/", uttid, ".lat", NULL); ps_lattice_t *dag; if ((dag = ps_get_lattice(ps->ps))) ps_lattice_write(dag, latfile); ckd_free(latfile); } } if (hyp) { /* Emit a signal for applications. */ g_signal_emit(ps, gst_pocketsphinx_signals[SIGNAL_RESULT], 0, hyp, uttid); /* Forward this result in a buffer. */ buffer = gst_buffer_new_and_alloc(strlen(hyp) + 2); strcpy((char *)GST_BUFFER_DATA(buffer), hyp); GST_BUFFER_DATA(buffer)[strlen(hyp)] = '\n'; GST_BUFFER_DATA(buffer)[strlen(hyp)+1] = '\0'; GST_BUFFER_TIMESTAMP(buffer) = GST_EVENT_TIMESTAMP(event); gst_buffer_set_caps(buffer, GST_PAD_CAPS(ps->srcpad)); gst_pad_push(ps->srcpad, buffer); } /* Forward this event. */ return gst_pad_event_default(pad, event); } default: /* Don't bother with other events. */ return gst_pad_event_default(pad, event); } }