summaryrefslogtreecommitdiff
path: root/libavcodec/cbs_h2645.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/cbs_h2645.c')
-rw-r--r--libavcodec/cbs_h2645.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index a2d0170e97..666970ed03 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -532,24 +532,30 @@ static int cbs_h2645_fragment_add_nals(CodedBitstreamContext *ctx,
for (i = 0; i < packet->nb_nals; i++) {
const H2645NAL *nal = &packet->nals[i];
size_t size = nal->size;
- uint8_t *data;
// Remove trailing zeroes.
while (size > 0 && nal->data[size - 1] == 0)
--size;
av_assert0(size > 0);
- data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
- if (!data)
- return AVERROR(ENOMEM);
- memcpy(data, nal->data, size);
- memset(data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
+ if (nal->data == nal->raw_data) {
+ err = ff_cbs_insert_unit_data(ctx, frag, -1, nal->type,
+ (uint8_t*)nal->data, size, frag->data_ref);
+ if (err < 0)
+ return err;
+ } else {
+ uint8_t *data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
+ if (!data)
+ return AVERROR(ENOMEM);
+ memcpy(data, nal->data, size);
+ memset(data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
- err = ff_cbs_insert_unit_data(ctx, frag, -1, nal->type,
- data, size, NULL);
- if (err < 0) {
- av_freep(&data);
- return err;
+ err = ff_cbs_insert_unit_data(ctx, frag, -1, nal->type,
+ data, size, NULL);
+ if (err < 0) {
+ av_freep(&data);
+ return err;
+ }
}
}