[gst-cvs] gstreamer: adapter: avoid comparisions in fast path
Wim Taymans
wtay at kemper.freedesktop.org
Wed May 20 02:13:29 PDT 2009
Module: gstreamer
Branch: master
Commit: 49c4e367e9601f2c877b844bb004119b54ee89fe
URL: http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=49c4e367e9601f2c877b844bb004119b54ee89fe
Author: Wim Taymans <wim.taymans at collabora.co.uk>
Date: Wed May 20 11:12:43 2009 +0200
adapter: avoid comparisions in fast path
Small tweaks to reduce the number of useless compares in loops.
---
libs/gst/base/gstadapter.c | 30 ++++++++++++++++--------------
1 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/libs/gst/base/gstadapter.c b/libs/gst/base/gstadapter.c
index cc7f156..67d5b0a 100644
--- a/libs/gst/base/gstadapter.c
+++ b/libs/gst/base/gstadapter.c
@@ -244,7 +244,7 @@ copy_into_unchecked (GstAdapter * adapter, guint8 * dest, guint skip,
g = adapter->buflist;
buf = g->data;
bsize = GST_BUFFER_SIZE (buf);
- while (skip >= bsize) {
+ while (G_UNLIKELY (skip >= bsize)) {
skip -= bsize;
g = g_slist_next (g);
buf = g->data;
@@ -257,14 +257,14 @@ copy_into_unchecked (GstAdapter * adapter, guint8 * dest, guint skip,
dest += csize;
/* second step, copy remainder */
- while (size > 0) {
+ do {
g = g_slist_next (g);
buf = g->data;
csize = MIN (GST_BUFFER_SIZE (buf), size);
memcpy (dest, GST_BUFFER_DATA (buf), csize);
size -= csize;
dest += csize;
- }
+ } while (size > 0);
}
/**
@@ -747,7 +747,7 @@ gst_adapter_masked_scan_uint32 (GstAdapter * adapter, guint32 mask,
g = adapter->buflist;
buf = g->data;
bsize = GST_BUFFER_SIZE (buf);
- while (skip >= bsize) {
+ while (G_UNLIKELY (skip >= bsize)) {
skip -= bsize;
g = g_slist_next (g);
buf = g->data;
@@ -761,7 +761,7 @@ gst_adapter_masked_scan_uint32 (GstAdapter * adapter, guint32 mask,
state = ~pattern;
/* now find data */
- while (size > 0) {
+ do {
bsize = MIN (bsize, size);
for (i = bsize; i; i--) {
state = ((state << 8) | *bdata++);
@@ -771,15 +771,17 @@ gst_adapter_masked_scan_uint32 (GstAdapter * adapter, guint32 mask,
}
}
size -= bsize;
- if (size > 0) {
- /* nothing found yet, go to next buffer */
- offset += bsize;
- g = g_slist_next (g);
- buf = g->data;
- bsize = GST_BUFFER_SIZE (buf);
- bdata = GST_BUFFER_DATA (buf);
- }
- }
+ if (size == 0)
+ break;
+
+ /* nothing found yet, go to next buffer */
+ offset += bsize;
+ g = g_slist_next (g);
+ buf = g->data;
+ bsize = GST_BUFFER_SIZE (buf);
+ bdata = GST_BUFFER_DATA (buf);
+ } while (TRUE);
+
/* nothing found */
offset = -1;
found:
More information about the Gstreamer-commits
mailing list