static void
gst_rtp_h263_pay_init (GstRtpH263Pay * rtph263pay)
{
- rtph263pay->adapter = gst_adapter_new ();
-
rtph263pay->prop_payload_mode = DEFAULT_MODE_A;
}
rtph263pay = GST_RTP_H263_PAY (object);
- g_object_unref (rtph263pay->adapter);
- rtph263pay->adapter = NULL;
+ gst_buffer_replace (&rtph263pay->current_buffer, NULL);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
* Splat the payload header values
*/
guint8 *header;
- guint8 *payload;
GstFlowReturn ret;
GstRTPBuffer rtp = { NULL };
gst_rtp_buffer_map (package->outbuf, GST_MAP_WRITE, &rtp);
header = gst_rtp_buffer_get_payload (&rtp);
- payload = header + package->mode;
switch (package->mode) {
case GST_RTP_H263_PAYLOAD_HEADER_MODE_A:
return GST_FLOW_ERROR;
}
-
- /*
- * Copy the payload data in the buffer
- */
- GST_DEBUG ("Copying memory");
- memcpy (payload, (guint8 *) package->payload_start, package->payload_len);
-
/*
* timestamp the buffer
*/
gst_rtp_buffer_unmap (&rtp);
+ /*
+ * Copy the payload data in the buffer
+ */
+ GST_DEBUG ("Copying memory");
+ gst_buffer_copy_into (package->outbuf, rtph263pay->current_buffer,
+ GST_BUFFER_COPY_MEMORY, package->payload_start - rtph263pay->map.data,
+ package->payload_len);
+
ret =
gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtph263pay),
package->outbuf);
pack->gobn = context->gobs[first]->gobn;
pack->mode = GST_RTP_H263_PAYLOAD_HEADER_MODE_A;
- pack->outbuf =
- gst_rtp_buffer_new_allocate (pack->payload_len + pack->mode, 0, 0);
+ pack->outbuf = gst_rtp_buffer_new_allocate (pack->mode, 0, 0);
GST_DEBUG ("Sending len:%d data to push function", pack->payload_len);
}
pack->payload_len = pack->payload_end - pack->payload_start + 1;
- pack->outbuf =
- gst_rtp_buffer_new_allocate (pack->payload_len + pack->mode, 0, 0);
+ pack->outbuf = gst_rtp_buffer_new_allocate (pack->mode, 0, 0);
return gst_rtp_h263_pay_push (rtph263pay, context, pack);
}
&boundry.end, &gob->end) != 0) {
GST_ERROR
("The rest of the bits should be 0, exiting, because something bad happend");
- gst_adapter_flush (rtph263pay->adapter, rtph263pay->available_data);
goto decode_error;
}
//The first GOB of a frame "has no" actual header - PICTURE header is his header
GST_DEBUG ("Available data: %d", rtph263pay->available_data);
pack->outbuf =
- gst_rtp_buffer_new_allocate (pack->payload_len +
- GST_RTP_H263_PAYLOAD_HEADER_MODE_A, 0, 0);
+ gst_rtp_buffer_new_allocate (GST_RTP_H263_PAYLOAD_HEADER_MODE_A, 0, 0);
return gst_rtp_h263_pay_push (rtph263pay, context, pack);
}
GST_RTP_H263_PAYLOAD_HEADER_MODE_C);
GST_DEBUG ("MTU: %d", context->mtu);
- rtph263pay->available_data = gst_adapter_available (rtph263pay->adapter);
+ rtph263pay->available_data = gst_buffer_get_size (rtph263pay->current_buffer);
if (rtph263pay->available_data == 0) {
ret = GST_FLOW_OK;
goto end;
}
/* Get a pointer to all the data for the frame */
- rtph263pay->data =
- (guint8 *) gst_adapter_map (rtph263pay->adapter,
- rtph263pay->available_data);
+ gst_buffer_map (rtph263pay->current_buffer, &rtph263pay->map, GST_MAP_READ);
+ rtph263pay->data = (guint8 *) rtph263pay->map.data;
/* Picture header */
context->piclayer = (GstRtpH263PayPic *) rtph263pay->data;
end:
gst_rtp_h263_pay_context_destroy (context,
context->piclayer->ptype_srcformat);
- gst_adapter_unmap (rtph263pay->adapter);
- gst_adapter_flush (rtph263pay->adapter, rtph263pay->available_data);
+ gst_buffer_unmap (rtph263pay->current_buffer, &rtph263pay->map);
+ gst_buffer_replace (&rtph263pay->current_buffer, NULL);
return ret;
}
rtph263pay->first_ts = GST_BUFFER_PTS (buffer);
+ gst_buffer_replace (&rtph263pay->current_buffer, buffer);
+ gst_buffer_unref (buffer);
+
/* we always encode and flush a full picture */
- gst_adapter_push (rtph263pay->adapter, buffer);
ret = gst_rtp_h263_pay_flush (rtph263pay);
GST_DEBUG ("-------------------- END FRAME ---------------");