summaryrefslogtreecommitdiffstats
path: root/libavcodec/h264dsp.h
diff options
context:
space:
mode:
authorBen Avison <bavison@riscosopen.org>2013-08-05 13:12:47 +0100
committerMartin Storsjö <martin@martin.st>2013-08-08 12:08:30 +0300
commit218d6844b37d339ffbf2044ad07d8be7767e2734 (patch)
treebc01481714ca5d7550ecb00d454a4c220cf1e959 /libavcodec/h264dsp.h
parent7a82022ee2f9b1fad991ace0936901e7419444be (diff)
downloadffmpeg-streaming-218d6844b37d339ffbf2044ad07d8be7767e2734.zip
ffmpeg-streaming-218d6844b37d339ffbf2044ad07d8be7767e2734.tar.gz
h264dsp: Factorize code into a new function, h264_find_start_code_candidate
This performs the start code search which was previously part of h264_find_frame_end() - the most CPU intensive part of the function. By itself, this results in a performance regression: Before After Mean StdDev Mean StdDev Change Overall time 2925.6 26.2 3068.5 31.7 -4.7% but this can more than be made up for by platform-optimised implementations of the function. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec/h264dsp.h')
-rw-r--r--libavcodec/h264dsp.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/libavcodec/h264dsp.h b/libavcodec/h264dsp.h
index 1f9f8fe..6249ba7 100644
--- a/libavcodec/h264dsp.h
+++ b/libavcodec/h264dsp.h
@@ -105,6 +105,15 @@ typedef struct H264DSPContext {
/* bypass-transform */
void (*h264_add_pixels8_clear)(uint8_t *dst, int16_t *block, int stride);
void (*h264_add_pixels4_clear)(uint8_t *dst, int16_t *block, int stride);
+
+ /**
+ * Search buf from the start for up to size bytes. Return the index
+ * of a zero byte, or >= size if not found. Ideally, use lookahead
+ * to filter out any zero bytes that are known to not be followed by
+ * one or more further zero bytes and a one byte. Better still, filter
+ * out any bytes that form the trailing_zero_8bits syntax element too.
+ */
+ int (*h264_find_start_code_candidate)(const uint8_t *buf, int size);
} H264DSPContext;
void ff_h264dsp_init(H264DSPContext *c, const int bit_depth,
OpenPOWER on IntegriCloud