diff options
author | James Almer <jamrial@gmail.com> | 2018-03-05 17:04:59 +0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2018-03-05 17:44:51 +0300 |
commit | df3a2ff7670a76c808fa015559b867aecbbdcd54 (patch) | |
tree | 506f724c1d1662a8269b21bafed66843dc30c43b /libavcodec/cbs.c | |
parent | 69995a94d8409a704361dce9bc16ede7f88bdf1a (diff) |
avcodec/cbs: use a reference to the assembled CodedBitstreamFragment buffer when writing packets
This saves one malloc + memcpy per packet
The CodedBitstreamFragment buffer is padded to follow the requirements
of AVPacket.
Reviewed-by: jkqxz
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/cbs.c')
-rw-r--r-- | libavcodec/cbs.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index dcca6430c4..62f60be437 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -308,17 +308,21 @@ int ff_cbs_write_packet(CodedBitstreamContext *ctx, AVPacket *pkt, CodedBitstreamFragment *frag) { + AVBufferRef *buf; int err; err = ff_cbs_write_fragment_data(ctx, frag); if (err < 0) return err; - err = av_new_packet(pkt, frag->data_size); - if (err < 0) - return err; + av_assert0(frag->data_ref); + buf = av_buffer_ref(frag->data_ref); + if (!buf) + return AVERROR(ENOMEM); - memcpy(pkt->data, frag->data, frag->data_size); + av_init_packet(pkt); + pkt->buf = buf; + pkt->data = frag->data; pkt->size = frag->data_size; return 0; |