[libav-devel] [PATCH 1/2] lavf: simplify ff_hevc_annexb2mp4_buf
Use ff_hevc_annexb2mp4 instead of duplicating its functionality, and update the documentation to match the new behavior. --- Suggested by Janne on IRC. libavformat/hevc.c | 43 +++ libavformat/hevc.h | 4 ++-- 2 files changed, 5 insertions(+), 42 deletions(-) diff --git a/libavformat/hevc.c b/libavformat/hevc.c index dc45fbf..e3be20c 100644 --- a/libavformat/hevc.c +++ b/libavformat/hevc.c @@ -1066,52 +1066,15 @@ int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out, int *size, int filter_ps, int *ps_count) { AVIOContext *pb; -int num_ps = 0, ret = 0; -uint8_t *buf, *end, *start = NULL; - -if (!filter_ps) { -ret = ff_avc_parse_nal_units_buf(buf_in, buf_out, size); -goto end; -} +int ret; ret = avio_open_dyn_buf(pb); if (ret 0) -goto end; - -ret = ff_avc_parse_nal_units_buf(buf_in, start, size); -if (ret 0) -goto end; - -buf = start; -end = start + *size; - -while (end - buf 4) { -uint32_t len = FFMIN(AV_RB32(buf), end - buf - 4); -uint8_t type = (buf[4] 1) 0x3f; - -buf += 4; - -switch (type) { -case NAL_VPS: -case NAL_SPS: -case NAL_PPS: -num_ps++; -break; -default: -avio_wb32(pb, len); -avio_write(pb, buf, len); -break; -} - -buf += len; -} +return ret; +ret = ff_hevc_annexb2mp4(pb, buf_in, *size, filter_ps, ps_count); *size = avio_close_dyn_buf(pb, buf_out); -end: -free(start); -if (ps_count) -*ps_count = num_ps; return ret; } diff --git a/libavformat/hevc.h b/libavformat/hevc.h index f394342..03c43bd 100644 --- a/libavformat/hevc.h +++ b/libavformat/hevc.h @@ -71,8 +71,8 @@ int ff_hevc_annexb2mp4(AVIOContext *pb, const uint8_t *buf_in, *or to discard them (non-zero) * @param ps_count address of the variable where the number of discarded *parameter set NAL units shall be written, may be NULL - * @return 0 in case of success, a negative value corresponding to an AVERROR - * code in case of failure + * @return the amount (in bytes) of data written in case of success, a negative + * value corresponding to an AVERROR code in case of failure */ int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out, int *size, int filter_ps, int *ps_count); -- 1.8.3.4 (Apple Git-47) ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH 1/2] lavf: simplify ff_hevc_annexb2mp4_buf
On 2014-03-10 17:03:13 +0100, Tim Walker wrote: Use ff_hevc_annexb2mp4 instead of duplicating its functionality, and update the documentation to match the new behavior. --- Suggested by Janne on IRC. libavformat/hevc.c | 43 +++ libavformat/hevc.h | 4 ++-- 2 files changed, 5 insertions(+), 42 deletions(-) diff --git a/libavformat/hevc.c b/libavformat/hevc.c index dc45fbf..e3be20c 100644 --- a/libavformat/hevc.c +++ b/libavformat/hevc.c @@ -1066,52 +1066,15 @@ int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out, int *size, int filter_ps, int *ps_count) { AVIOContext *pb; -int num_ps = 0, ret = 0; -uint8_t *buf, *end, *start = NULL; - -if (!filter_ps) { -ret = ff_avc_parse_nal_units_buf(buf_in, buf_out, size); -goto end; -} +int ret; ret = avio_open_dyn_buf(pb); if (ret 0) -goto end; - -ret = ff_avc_parse_nal_units_buf(buf_in, start, size); -if (ret 0) -goto end; - -buf = start; -end = start + *size; - -while (end - buf 4) { -uint32_t len = FFMIN(AV_RB32(buf), end - buf - 4); -uint8_t type = (buf[4] 1) 0x3f; - -buf += 4; - -switch (type) { -case NAL_VPS: -case NAL_SPS: -case NAL_PPS: -num_ps++; -break; -default: -avio_wb32(pb, len); -avio_write(pb, buf, len); -break; -} - -buf += len; -} +return ret; +ret = ff_hevc_annexb2mp4(pb, buf_in, *size, filter_ps, ps_count); *size = avio_close_dyn_buf(pb, buf_out); -end: -free(start); -if (ps_count) -*ps_count = num_ps; return ret; } diff --git a/libavformat/hevc.h b/libavformat/hevc.h index f394342..03c43bd 100644 --- a/libavformat/hevc.h +++ b/libavformat/hevc.h @@ -71,8 +71,8 @@ int ff_hevc_annexb2mp4(AVIOContext *pb, const uint8_t *buf_in, *or to discard them (non-zero) * @param ps_count address of the variable where the number of discarded *parameter set NAL units shall be written, may be NULL - * @return 0 in case of success, a negative value corresponding to an AVERROR - * code in case of failure + * @return the amount (in bytes) of data written in case of success, a negative + * value corresponding to an AVERROR code in case of failure */ int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out, int *size, int filter_ps, int *ps_count); -- ok Janne ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel