diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2014-10-27 04:22:42 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2014-11-01 18:25:47 +0100 |
commit | 667fe8c75b0b1f666f3215c797e00acb1024b3e5 (patch) | |
tree | 7236176275b9354cef770c1b2c8ffe5ac2b34433 | |
parent | 64624c56784dbcec72d02c6e5c474d73cfa92a04 (diff) | |
download | ffmpeg-667fe8c75b0b1f666f3215c797e00acb1024b3e5.tar.gz |
Move get_avc_nalsize() and find_start_code() to h264.h
This allows sharing them with the h264 parser
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 4898440f6bd19152373969159fff057b532c6374)
Conflicts:
libavcodec/h264.c
libavcodec/h264.h
-rw-r--r-- | libavcodec/h264.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/libavcodec/h264.h b/libavcodec/h264.h index 188e749440..ed0050a4df 100644 --- a/libavcodec/h264.h +++ b/libavcodec/h264.h @@ -1028,6 +1028,42 @@ static av_always_inline int get_dct8x8_allowed(H264Context *h) 0x0001000100010001ULL)); } +static inline int find_start_code(const uint8_t *buf, int buf_size, + int buf_index, int next_avc) +{ + // start code prefix search + for (; buf_index + 3 < next_avc; buf_index++) + // This should always succeed in the first iteration. + if (buf[buf_index] == 0 && + buf[buf_index + 1] == 0 && + buf[buf_index + 2] == 1) + break; + + buf_index += 3; + + if (buf_index >= buf_size) + return buf_size; + + return buf_index; +} + +static inline int get_avc_nalsize(H264Context *h, const uint8_t *buf, + int buf_size, int *buf_index) +{ + int i, nalsize = 0; + + if (*buf_index >= buf_size - h->nal_length_size) + return -1; + + for (i = 0; i < h->nal_length_size; i++) + nalsize = ((unsigned)nalsize << 8) | buf[(*buf_index)++]; + if (nalsize <= 0 || nalsize > buf_size - *buf_index) { + av_log(h->avctx, AV_LOG_ERROR, + "AVC: nal size %d\n", nalsize); + return -1; + } + return nalsize; +} void ff_h264_draw_horiz_band(H264Context *h, int y, int height); int ff_init_poc(H264Context *h, int pic_field_poc[2], int *pic_poc); int ff_pred_weight_table(H264Context *h); |