diff --git a/libavformat/avc.c b/libavformat/avc.c index def08ba5e9..09f31a15fe 100644 --- a/libavformat/avc.c +++ b/libavformat/avc.c @@ -60,20 +60,23 @@ const uint8_t *ff_avc_find_startcode(const uint8_t *p, const uint8_t *end) return end + 3; } -void ff_avc_parse_nal_units(ByteIOContext *pb, const uint8_t *buf_in, int size) +int ff_avc_parse_nal_units(ByteIOContext *pb, const uint8_t *buf_in, int size) { const uint8_t *p = buf_in; const uint8_t *end = p + size; const uint8_t *nal_start, *nal_end; + size = 0; nal_start = ff_avc_find_startcode(p, end); while (nal_start < end) { while(!*(nal_start++)); nal_end = ff_avc_find_startcode(nal_start, end); put_be32(pb, nal_end - nal_start); put_buffer(pb, nal_start, nal_end - nal_start); + size += 4 + nal_end - nal_start; nal_start = nal_end; } + return size; } static int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size) diff --git a/libavformat/avc.h b/libavformat/avc.h index 45369e8894..2ea938ca16 100644 --- a/libavformat/avc.h +++ b/libavformat/avc.h @@ -25,7 +25,7 @@ #include #include "avio.h" -void ff_avc_parse_nal_units(ByteIOContext *s, const uint8_t *buf, int size); +int ff_avc_parse_nal_units(const uint8_t *buf_in, uint8_t **buf, int *size); int ff_isom_write_avcc(ByteIOContext *pb, const uint8_t *data, int len); const uint8_t *ff_avc_find_startcode(const uint8_t *p, const uint8_t *end);