diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-08-08 12:38:10 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-08-08 12:47:05 +0200 |
commit | c0f2ad3dbdeada7ba43b0510580467718f1334ca (patch) | |
tree | 4793efb53ed74106b572634d86f25808277d48d8 /libavcodec/h264dsp.c | |
parent | 50b7ce12574df47ac5380b05259f10e6b516fb17 (diff) | |
parent | 218d6844b37d339ffbf2044ad07d8be7767e2734 (diff) | |
download | ffmpeg-c0f2ad3dbdeada7ba43b0510580467718f1334ca.tar.gz |
Merge commit '218d6844b37d339ffbf2044ad07d8be7767e2734'
* commit '218d6844b37d339ffbf2044ad07d8be7767e2734':
h264dsp: Factorize code into a new function, h264_find_start_code_candidate
Conflicts:
libavcodec/h264_parser.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/h264dsp.c')
-rw-r--r-- | libavcodec/h264dsp.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libavcodec/h264dsp.c b/libavcodec/h264dsp.c index d7238b11a4..72f699f84d 100644 --- a/libavcodec/h264dsp.c +++ b/libavcodec/h264dsp.c @@ -62,6 +62,34 @@ #include "h264addpx_template.c" #undef BIT_DEPTH +static int h264_find_start_code_candidate_c(const uint8_t *buf, int size) +{ + int i = 0; +#if HAVE_FAST_UNALIGNED + /* we check i < size instead of i + 3 / 7 because it is + * simpler and there must be FF_INPUT_BUFFER_PADDING_SIZE + * bytes at the end. + */ +# if HAVE_FAST_64BIT + while (i < size && + !((~*(const uint64_t *)(buf + i) & + (*(const uint64_t *)(buf + i) - 0x0101010101010101ULL)) & + 0x8080808080808080ULL)) + i += 8; +# else + while (i < size && + !((~*(const uint32_t *)(buf + i) & + (*(const uint32_t *)(buf + i) - 0x01010101U)) & + 0x80808080U)) + i += 4; +# endif +#endif + for (; i < size; i++) + if (!buf[i]) + break; + return i; +} + av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, const int chroma_format_idc) { @@ -149,6 +177,7 @@ av_cold void ff_h264dsp_init(H264DSPContext *c, const int bit_depth, H264_DSP(8); break; } + c->h264_find_start_code_candidate = h264_find_start_code_candidate_c; if (ARCH_ARM) ff_h264dsp_init_arm(c, bit_depth, chroma_format_idc); if (ARCH_PPC) ff_h264dsp_init_ppc(c, bit_depth, chroma_format_idc); |