在 2015/3/8 20:14, Michael Niedermayer 写道: > On Sat, Mar 07, 2015 at 11:47:08PM +0800, zhaoxiu.zeng wrote: >> From ab12e3081ba987c2e05d819be97cde96952f1c2a Mon Sep 17 00:00:00 2001 >> From: Zeng Zhaoxiu <zhaoxiu.z...@gmail.com> >> Date: Sat, 7 Mar 2015 23:29:46 +0800 >> Subject: [PATCH 1/1] avcodec/hevc_parser: use avpriv_find_start_code in >> hevc_split() >> >> Signed-off-by: Zeng Zhaoxiu <zhaoxiu.z...@gmail.com> >> --- >> libavcodec/hevc_parser.c | 26 +++++++++++++------------- >> 1 file changed, 13 insertions(+), 13 deletions(-) >> >> diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c >> index a6fdbb7..91fc0d4 100644 >> --- a/libavcodec/hevc_parser.c >> +++ b/libavcodec/hevc_parser.c >> @@ -286,21 +286,21 @@ static int hevc_parse(AVCodecParserContext *s, >> // Split after the parameter sets at the beginning of the stream if they >> exist. >> static int hevc_split(AVCodecContext *avctx, const uint8_t *buf, int >> buf_size) >> { >> - int i; >> + const uint8_t *ptr = buf, end = buf + buf_size; > > end is a uint8_t, that will not work > also please make sure to test the code you change >
Sorry for my carelessness. (I tested with "make fate" only) Thanks! > [...] > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > The new patch: diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c index a6fdbb7..7076897 100644 --- a/libavcodec/hevc_parser.c +++ b/libavcodec/hevc_parser.c @@ -286,21 +286,21 @@ static int hevc_parse(AVCodecParserContext *s, // Split after the parameter sets at the beginning of the stream if they exist. static int hevc_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size) { - int i; + const uint8_t *ptr = buf, *end = buf + buf_size; uint32_t state = -1; - int has_ps = 0; + int has_ps = 0, nut; - for (i = 0; i < buf_size; i++) { - state = (state << 8) | buf[i]; - if (((state >> 8) & 0xFFFFFF) == START_CODE) { - int nut = (state >> 1) & 0x3F; - if (nut >= NAL_VPS && nut <= NAL_PPS) - has_ps = 1; - else if (has_ps) - return i - 3; - else // no parameter set at the beginning of the stream - return 0; - } + while (ptr < end) { + ptr = avpriv_find_start_code(ptr, end, &state); + if ((state >> 8) != START_CODE) + break; + nut = (state >> 1) & 0x3F; + if (nut >= NAL_VPS && nut <= NAL_PPS) + has_ps = 1; + else if (has_ps) + return ptr - 4 - buf; + else // no parameter set at the beginning of the stream + return 0; } return 0; } _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel