From a2efbecc4ed12d287cf29856418c4da4a7648d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Wed, 24 Sep 2014 11:17:04 +0300 Subject: [PATCH] libavformat: Move avc mp4 startcode parsing to a shared file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/avc.c | 17 +++++++++++++++++ libavformat/avc.h | 3 +++ libavformat/rtpenc_h264.c | 19 ++----------------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/libavformat/avc.c b/libavformat/avc.c index 2fd5ac807b..e639ed5593 100644 --- a/libavformat/avc.c +++ b/libavformat/avc.c @@ -191,3 +191,20 @@ int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size) *size = out_size; return 0; } + +const uint8_t *ff_avc_mp4_find_startcode(const uint8_t *start, + const uint8_t *end, + int nal_length_size) +{ + unsigned int res = 0; + + if (end - start < nal_length_size) + return NULL; + while (nal_length_size--) + res = (res << 8) | *start++; + + if (res > end - start) + return NULL; + + return start + res; +} diff --git a/libavformat/avc.h b/libavformat/avc.h index 579756ec0f..2442e5fff6 100644 --- a/libavformat/avc.h +++ b/libavformat/avc.h @@ -30,5 +30,8 @@ int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size); int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len); const uint8_t *ff_avc_find_startcode(const uint8_t *p, const uint8_t *end); int ff_avc_write_annexb_extradata(const uint8_t *in, uint8_t **buf, int *size); +const uint8_t *ff_avc_mp4_find_startcode(const uint8_t *start, + const uint8_t *end, + int nal_length_size); #endif /* AVFORMAT_AVC_H */ diff --git a/libavformat/rtpenc_h264.c b/libavformat/rtpenc_h264.c index 206d9bafa3..395c3a42e9 100644 --- a/libavformat/rtpenc_h264.c +++ b/libavformat/rtpenc_h264.c @@ -29,21 +29,6 @@ #include "avc.h" #include "rtpenc.h" -static const uint8_t *avc_mp4_find_startcode(const uint8_t *start, const uint8_t *end, int nal_length_size) -{ - unsigned int res = 0; - - if (end - start < nal_length_size) - return NULL; - while (nal_length_size--) - res = (res << 8) | *start++; - - if (res > end - start) - return NULL; - - return start + res; -} - static void nal_send(AVFormatContext *s1, const uint8_t *buf, int size, int last) { RTPMuxContext *s = s1->priv_data; @@ -88,14 +73,14 @@ void ff_rtp_send_h264(AVFormatContext *s1, const uint8_t *buf1, int size) s->timestamp = s->cur_timestamp; if (s->nal_length_size) - r = avc_mp4_find_startcode(buf1, end, s->nal_length_size) ? buf1 : end; + r = ff_avc_mp4_find_startcode(buf1, end, s->nal_length_size) ? buf1 : end; else r = ff_avc_find_startcode(buf1, end); while (r < end) { const uint8_t *r1; if (s->nal_length_size) { - r1 = avc_mp4_find_startcode(r, end, s->nal_length_size); + r1 = ff_avc_mp4_find_startcode(r, end, s->nal_length_size); if (!r1) r1 = end; r += s->nal_length_size;