return 0;
}
-GstBuffer *__get_buffer_from_packet(media_packet_h packet)
+GstBuffer *__alloc_buffer_from_packet(media_packet_h packet)
{
int ret;
guchar *data_ptr;
guint64 dts = 0;
guint64 duration = 0;
guint64 size = 0;
- GstBuffer *buffer = NULL;
-
- media_packet_get_extra(packet, (void **)&buffer);
- if (buffer) {
- g_print("external gstbuffer[%p]\n", buffer);
- return buffer;
- }
media_packet_get_buffer_data_ptr(packet, (void **)&data_ptr);
if (data_ptr == NULL) {
}
#ifdef __DEBUG_VALIDATE_MEDIA_PACKET_SOURCE__
- GstBuffer *buffer_from_packet = __get_buffer_from_packet(packet);
- if (!buffer_from_packet) {
- media_packet_destroy(packet);
- g_printerr("buffer_from_packet is NULL\n");
- return;
+ GstBuffer *buffer_from_packet = NULL;
+ bool is_new_buffer = false;
+ media_packet_get_extra(packet, (void **)&buffer_from_packet);
+ if (buffer_from_packet) {
+ g_print("external gstbuffer[%p]\n", buffer_from_packet);
+ } else {
+ buffer_from_packet = __alloc_buffer_from_packet(packet);
+ if (!buffer_from_packet) {
+ media_packet_destroy(packet);
+ return;
+ }
+ is_new_buffer = true;
}
-
GstFlowReturn gst_ret = GST_FLOW_OK;
g_signal_emit_by_name(G_OBJECT(packet_source->appsrc), "push-buffer", buffer_from_packet, &gst_ret, NULL);
if (gst_ret != GST_FLOW_OK)
g_printerr("failed to 'push-buffer', gst_ret[0x%x]\n", gst_ret);
+ if (is_new_buffer)
+ gst_buffer_unref(buffer_from_packet);
#else
if (webrtc_media_packet_source_push_packet(packet_source->webrtc, packet_source->source_id, packet) != WEBRTC_ERROR_NONE)
g_printerr("failed to webrtc_media_packet_source_push_packet()\n");