mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
bufferpool: Fix the buffer size reset code
The offset in gst_buffer_resize() is additive. So to move back the offset to zero, we need to pass the opposite of the current offset. This was raised through the related unit test failingon 32bit as on 64bit the alignment padding was enough to hide the issue. The test was modified to also fail on 64bit. This patch will remove spurious assertions like: assertion 'bufmax >= bufoffs + offset + size' failed Fixes #316
This commit is contained in:
parent
3e2f24955e
commit
8a9b20a18b
2 changed files with 6 additions and 3 deletions
|
@ -1222,8 +1222,11 @@ default_reset_buffer (GstBufferPool * pool, GstBuffer * buffer)
|
||||||
GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
|
GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
|
||||||
|
|
||||||
/* if the memory is intact reset the size to the full size */
|
/* if the memory is intact reset the size to the full size */
|
||||||
if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY))
|
if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY)) {
|
||||||
gst_buffer_resize (buffer, 0, pool->priv->size);
|
gsize offset;
|
||||||
|
gst_buffer_get_sizes (buffer, &offset, NULL);
|
||||||
|
gst_buffer_resize (buffer, -offset, pool->priv->size);
|
||||||
|
}
|
||||||
|
|
||||||
/* remove all metadata without the POOLED flag */
|
/* remove all metadata without the POOLED flag */
|
||||||
gst_buffer_foreach_meta (buffer, remove_meta_unpooled, pool);
|
gst_buffer_foreach_meta (buffer, remove_meta_unpooled, pool);
|
||||||
|
|
|
@ -190,7 +190,7 @@ GST_START_TEST (test_buffer_modify_discard)
|
||||||
gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
|
gst_buffer_pool_acquire_buffer (pool, &buf, NULL);
|
||||||
buffer_track_destroy (buf, &dcount);
|
buffer_track_destroy (buf, &dcount);
|
||||||
/* do resize, as we didn't modify the memory, pool should reuse this buffer */
|
/* do resize, as we didn't modify the memory, pool should reuse this buffer */
|
||||||
gst_buffer_resize (buf, 5, 2);
|
gst_buffer_resize (buf, 8, 2);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
/* buffer should've gone back into pool */
|
/* buffer should've gone back into pool */
|
||||||
|
|
Loading…
Reference in a new issue