[FFmpeg-cvslog] lavf: simplify ff_hevc_annexb2mp4_buf

Tim Walker git at videolan.org
Mon Mar 10 23:54:27 CET 2014


ffmpeg | branch: master | Tim Walker <tdskywalker at gmail.com> | Mon Mar 10 15:03:13 2014 +0000| [34bbc81de8a49fbddb92b76dc733f40890480b2b] | committer: Vittorio Giovara

lavf: simplify ff_hevc_annexb2mp4_buf

Use ff_hevc_annexb2mp4 instead of duplicating
its functionality, and update the documentation
to match the new behavior.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=34bbc81de8a49fbddb92b76dc733f40890480b2b
---

 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);



More information about the ffmpeg-cvslog mailing list