mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
rtpg729pay: Simplify adapter usage
https://bugzilla.gnome.org/show_bug.cgi?id=606050
This commit is contained in:
parent
0a18587792
commit
63a9db5826
1 changed files with 20 additions and 47 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue