From 3538c4fa9c078e43c911e637aa898346584889a9 Mon Sep 17 00:00:00 2001 From: Olivier Crete Date: Mon, 9 Mar 2015 18:20:34 -0400 Subject: [PATCH] gen7_mfd: Optimise start code search Code inspired from GStreamer --- src/gen7_mfd.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c index d166052..4439c3c 100755 --- a/src/gen7_mfd.c +++ b/src/gen7_mfd.c @@ -1043,21 +1043,29 @@ uint32_t mpeg2_get_slice_data_length(dri_bo *slice_data_bo, VASliceParameterBuff uint8_t *buf; uint32_t buf_offset = slice_param->slice_data_offset + (slice_param->macroblock_offset >> 3); uint32_t buf_size = slice_param->slice_data_size - (slice_param->macroblock_offset >> 3); - uint32_t i; + uint32_t i = 0; dri_bo_map(slice_data_bo, 0); buf = (uint8_t *)slice_data_bo->virtual + buf_offset; - for (i = 3; i < buf_size; i++) { - if (buf[i - 3] && - !buf[i - 2] && - !buf[i - 1] && - !buf[i]) { - dri_bo_unmap(slice_data_bo); - return i - 3 + 1; - } + if (buf_size < 4) + return buf_size; + + while (i <= (buf_size - 4)) { + if (buf[i + 2] > 1) { + i += 3; + } else if (buf[i + 1]) { + i += 2; + } else if (buf[i] || buf[i + 2] != 1) { + i++; + } else { + break; + } } + if (i <= (buf_size - 4)) + buf_size = i; + dri_bo_unmap(slice_data_bo); return buf_size; } -- 1.9.1