rtpg729pay: Simplify adapter usage

https://bugzilla.gnome.org/show_bug.cgi?id=606050
This commit is contained in:
Olivier Crête 2009-12-31 16:52:30 -05:00
parent 0a18587792
commit 63a9db5826

View file

@ -156,7 +156,6 @@ gst_rtp_g729_pay_handle_buffer (GstBaseRTPPayload * payload, GstBuffer * buf)
guint minptime_octets = 0; guint minptime_octets = 0;
guint min_payload_len; guint min_payload_len;
guint max_payload_len; guint max_payload_len;
gboolean use_adapter = FALSE;
available = GST_BUFFER_SIZE (buf); available = GST_BUFFER_SIZE (buf);
@ -221,31 +220,25 @@ gst_rtp_g729_pay_handle_buffer (GstBaseRTPPayload * payload, GstBuffer * buf)
adapter = gst_base_rtp_audio_payload_get_adapter (basertpaudiopayload); adapter = gst_base_rtp_audio_payload_get_adapter (basertpaudiopayload);
if (adapter && gst_adapter_available (adapter)) {
/* If there is always data in the adapter, we have to use it */ /* let's reset the base timestamp when the adapter is empty */
gst_adapter_push (adapter, buf); if (gst_adapter_available (adapter) == 0)
available = gst_adapter_available (adapter);
use_adapter = TRUE;
} else {
/* let's set the base timestamp */
basertpaudiopayload->base_ts = GST_BUFFER_TIMESTAMP (buf); basertpaudiopayload->base_ts = GST_BUFFER_TIMESTAMP (buf);
/* If buffer fits on an RTP packet, let's just push it through */ if (gst_adapter_available (adapter) == 0 &&
/* this will check against max_ptime and max_mtu */ GST_BUFFER_SIZE (buf) >= min_payload_len &&
if (GST_BUFFER_SIZE (buf) >= min_payload_len && GST_BUFFER_SIZE (buf) <= max_payload_len) {
GST_BUFFER_SIZE (buf) <= max_payload_len) { ret = gst_base_rtp_audio_payload_push (basertpaudiopayload,
ret = gst_base_rtp_audio_payload_push (basertpaudiopayload, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf),
GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), GST_BUFFER_TIMESTAMP (buf));
GST_BUFFER_TIMESTAMP (buf)); gst_buffer_unref (buf);
gst_buffer_unref (buf); g_object_unref (adapter);
g_object_unref (adapter); return ret;
return ret;
}
available = GST_BUFFER_SIZE (buf);
data = (guint8 *) GST_BUFFER_DATA (buf);
} }
gst_adapter_push (adapter, buf);
available = gst_adapter_available (adapter);
/* as long as we have full frames */ /* as long as we have full frames */
/* this loop will push all available buffers till the last frame */ /* this loop will push all available buffers till the last frame */
while (available >= min_payload_len || while (available >= min_payload_len ||
@ -260,38 +253,18 @@ gst_rtp_g729_pay_handle_buffer (GstBaseRTPPayload * payload, GstBuffer * buf)
(available / G729_FRAME_SIZE) * G729_FRAME_SIZE); (available / G729_FRAME_SIZE) * G729_FRAME_SIZE);
} }
if (use_adapter) { data = gst_adapter_peek (adapter, payload_len);
data = gst_adapter_peek (adapter, payload_len);
}
ret = gst_base_rtp_audio_payload_push (basertpaudiopayload, data, ret = gst_base_rtp_audio_payload_flush (basertpaudiopayload, payload_len,
payload_len, basertpaudiopayload->base_ts); basertpaudiopayload->base_ts);
num = payload_len / G729_FRAME_SIZE; num = payload_len / G729_FRAME_SIZE;
basertpaudiopayload->base_ts += G729_FRAME_DURATION * num; basertpaudiopayload->base_ts += G729_FRAME_DURATION * num;
if (use_adapter) { available = gst_adapter_available (adapter);
gst_adapter_flush (adapter, payload_len);
available = gst_adapter_available (adapter);
} else {
available -= payload_len;
data += payload_len;
}
} }
if (!use_adapter) { g_object_unref (adapter);
if (available != 0 && adapter) {
GstBuffer *buf2;
buf2 = gst_buffer_create_sub (buf,
GST_BUFFER_SIZE (buf) - available, available);
gst_adapter_push (adapter, buf2);
}
gst_buffer_unref (buf);
}
if (adapter) {
g_object_unref (adapter);
}
return ret; return ret;