mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 11:55:39 +00:00
adapter: Take account of the skip in gst_adapter_take_buffer_fast()
Include regression test
This commit is contained in:
parent
5920491597
commit
915f418cc4
2 changed files with 32 additions and 4 deletions
|
@ -776,12 +776,12 @@ gst_adapter_take_buffer_fast (GstAdapter * adapter, gsize nbytes)
|
|||
gsize size;
|
||||
|
||||
cur = item->data;
|
||||
size = MIN (gst_buffer_get_size (cur), left);
|
||||
size = MIN (gst_buffer_get_size (cur) - skip, left);
|
||||
|
||||
GST_LOG_OBJECT (adapter, "appending %" G_GSIZE_FORMAT " bytes"
|
||||
" via region copy", size);
|
||||
if (buffer)
|
||||
gst_buffer_copy_into (buffer, cur, GST_BUFFER_COPY_MEMORY, 0, size);
|
||||
gst_buffer_copy_into (buffer, cur, GST_BUFFER_COPY_MEMORY, skip, size);
|
||||
else
|
||||
buffer = gst_buffer_copy_region (cur, GST_BUFFER_COPY_ALL, skip, size);
|
||||
skip = 0;
|
||||
|
|
|
@ -858,13 +858,41 @@ GST_START_TEST (test_take_buffer_fast)
|
|||
|
||||
buffer = gst_adapter_take_buffer_fast (adapter, 30);
|
||||
fail_unless (gst_adapter_available (adapter) == 0);
|
||||
|
||||
fail_unless (gst_buffer_n_memory (buffer) == 3);
|
||||
fail_unless (gst_buffer_get_sizes_range (buffer, 0, 1, NULL, NULL) == 5);
|
||||
fail_unless (gst_buffer_get_sizes_range (buffer, 1, 1, NULL, NULL) == 10);
|
||||
fail_unless (gst_buffer_get_sizes_range (buffer, 2, 1, NULL, NULL) == 15);
|
||||
|
||||
gst_buffer_unref (buffer);
|
||||
|
||||
fail_unless (gst_adapter_available (adapter) == 0);
|
||||
|
||||
buffer = gst_buffer_new_and_alloc (10);
|
||||
fail_if (buffer == NULL);
|
||||
gst_adapter_push (adapter, buffer);
|
||||
|
||||
buffer = gst_buffer_new_and_alloc (20);
|
||||
fail_if (buffer == NULL);
|
||||
gst_adapter_push (adapter, buffer);
|
||||
|
||||
gst_adapter_flush (adapter, 2);
|
||||
fail_unless (gst_adapter_available (adapter) == 28);
|
||||
|
||||
buffer = gst_adapter_take_buffer_fast (adapter, 10);
|
||||
fail_unless (gst_buffer_n_memory (buffer) == 2);
|
||||
fail_unless (gst_buffer_get_sizes_range (buffer, 0, 1, NULL, NULL) == 8);
|
||||
fail_unless (gst_buffer_get_sizes_range (buffer, 1, 1, NULL, NULL) == 2);
|
||||
fail_unless (gst_adapter_available (adapter) == 18);
|
||||
gst_buffer_unref (buffer);
|
||||
|
||||
buffer = gst_adapter_take_buffer_fast (adapter, 8);
|
||||
fail_unless (gst_buffer_n_memory (buffer) == 1);
|
||||
fail_unless (gst_buffer_get_size (buffer) == 8);
|
||||
fail_unless (gst_adapter_available (adapter) == 10);
|
||||
gst_buffer_unref (buffer);
|
||||
|
||||
gst_adapter_clear (adapter);
|
||||
fail_unless (gst_adapter_available (adapter) == 0);
|
||||
|
||||
g_object_unref (adapter);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue