static GstBuffer * gst_dtmf_src_create_next_tone_packet (GstDTMFSrc * dtmfsrc, GstDTMFSrcEvent * event) { GstBuffer *buf = NULL; gboolean send_silence = FALSE; GstPad *srcpad = GST_BASE_SRC_PAD (dtmfsrc); GST_LOG_OBJECT (dtmfsrc, "Creating buffer for tone %s", DTMF_KEYS[event->event_number].event_name); /* create buffer to hold the tone */ buf = gst_buffer_new (); if (event->packet_count * dtmfsrc->interval < MIN_INTER_DIGIT_INTERVAL) { send_silence = TRUE; } if (send_silence) { GST_LOG_OBJECT (dtmfsrc, "Generating silence"); gst_dtmf_src_generate_silence (buf, dtmfsrc->interval, dtmfsrc->sample_rate); } else { GST_LOG_OBJECT (dtmfsrc, "Generating tone"); gst_dtmf_src_generate_tone (event, DTMF_KEYS[event->event_number], dtmfsrc->interval, buf, dtmfsrc->sample_rate); } event->packet_count++; /* timestamp and duration of GstBuffer */ GST_BUFFER_DURATION (buf) = dtmfsrc->interval * GST_MSECOND; GST_BUFFER_TIMESTAMP (buf) = dtmfsrc->timestamp; dtmfsrc->timestamp += GST_BUFFER_DURATION (buf); /* Set caps on the buffer before pushing it */ gst_buffer_set_caps (buf, GST_PAD_CAPS (srcpad)); return buf; }
static GstBuffer * gst_dtmf_src_create_next_tone_packet (GstDTMFSrc * dtmfsrc, GstDTMFSrcEvent * event) { GstBuffer *buf = NULL; gboolean send_silence = FALSE; GST_LOG_OBJECT (dtmfsrc, "Creating buffer for tone %s", DTMF_KEYS[event->event_number].event_name); if (event->packet_count * dtmfsrc->interval < MIN_INTER_DIGIT_INTERVAL) { send_silence = TRUE; } if (send_silence) { GST_LOG_OBJECT (dtmfsrc, "Generating silence"); buf = gst_dtmf_src_generate_silence (dtmfsrc->interval, dtmfsrc->sample_rate); } else { GST_LOG_OBJECT (dtmfsrc, "Generating tone"); buf = gst_dtmf_src_generate_tone (event, DTMF_KEYS[event->event_number], dtmfsrc->interval, dtmfsrc->sample_rate); } event->packet_count++; /* timestamp and duration of GstBuffer */ GST_BUFFER_DURATION (buf) = dtmfsrc->interval * GST_MSECOND; GST_BUFFER_TIMESTAMP (buf) = dtmfsrc->timestamp; GST_LOG_OBJECT (dtmfsrc, "Creating new buffer with event %u duration " " gst: %" GST_TIME_FORMAT " at %" GST_TIME_FORMAT, event->event_number, GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); dtmfsrc->timestamp += GST_BUFFER_DURATION (buf); return buf; }