gst: drop empty buffers in pipewiresrc

In case the dequeued buffer is empty or of size 0, skip the buffer
so that the downstream elements do not report an error
This commit is contained in:
Taruntej Kanakamalla 2024-11-29 15:35:21 +05:30
parent 46c89f1e0c
commit 922efaf6ed

View file

@ -655,6 +655,13 @@ static GstBuffer *dequeue_buffer(GstPipeWireSrc *pwsrc)
for (i = 0; i < b->buffer->n_datas; i++) { for (i = 0; i < b->buffer->n_datas; i++) {
struct spa_data *d = &b->buffer->datas[i]; struct spa_data *d = &b->buffer->datas[i];
if (d->chunk->size == 0) {
// Skip the 0 sized chunk, not adding to the buffer
GST_DEBUG_OBJECT(pwsrc, "Chunk size is 0, skipping");
continue;
}
GstMemory *pmem = gst_buffer_peek_memory (data->buf, i); GstMemory *pmem = gst_buffer_peek_memory (data->buf, i);
if (pmem) { if (pmem) {
GstMemory *mem; GstMemory *mem;
@ -664,12 +671,22 @@ static GstBuffer *dequeue_buffer(GstPipeWireSrc *pwsrc)
mem = gst_memory_copy (pmem, d->chunk->offset, d->chunk->size); mem = gst_memory_copy (pmem, d->chunk->offset, d->chunk->size);
gst_buffer_insert_memory (buf, i, mem); gst_buffer_insert_memory (buf, i, mem);
} }
if (d->chunk->flags & SPA_CHUNK_FLAG_CORRUPTED) if (d->chunk->flags & SPA_CHUNK_FLAG_CORRUPTED) {
GST_DEBUG_OBJECT(pwsrc, "Buffer corrupted");
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_CORRUPTED); GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_CORRUPTED);
}
} }
if (!pwsrc->always_copy) if (!pwsrc->always_copy)
gst_buffer_add_parent_buffer_meta (buf, data->buf); gst_buffer_add_parent_buffer_meta (buf, data->buf);
gst_buffer_unref (data->buf); gst_buffer_unref (data->buf);
if (gst_buffer_get_size(buf) == 0)
{
GST_ERROR_OBJECT(pwsrc, "Buffer is empty, dropping this");
gst_buffer_unref(buf);
buf = NULL;
}
return buf; return buf;
} }