Browse Source

cbs: Add padding to slice data allocations

These may be read by the bitstream reader, so they should include the
necessary padding for overreads.
tags/n4.0
Mark Thompson 8 years ago
parent
commit
7bf3f38046
2 changed files with 12 additions and 3 deletions
  1. +8
    -2
      libavcodec/cbs_h2645.c
  2. +4
    -1
      libavcodec/cbs_mpeg2.c

+ 8
- 2
libavcodec/cbs_h2645.c View File

@@ -781,13 +781,16 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext *ctx,
}

slice->data_size = len - pos / 8;
slice->data = av_malloc(slice->data_size);
slice->data = av_malloc(slice->data_size +
AV_INPUT_BUFFER_PADDING_SIZE);
if (!slice->data) {
av_free(slice);
return AVERROR(ENOMEM);
}
memcpy(slice->data,
unit->data + pos / 8, slice->data_size);
memset(slice->data + slice->data_size, 0,
AV_INPUT_BUFFER_PADDING_SIZE);
slice->data_bit_start = pos % 8;

unit->content = slice;
@@ -943,13 +946,16 @@ static int cbs_h265_read_nal_unit(CodedBitstreamContext *ctx,
}

slice->data_size = len - pos / 8;
slice->data = av_malloc(slice->data_size);
slice->data = av_malloc(slice->data_size +
AV_INPUT_BUFFER_PADDING_SIZE);
if (!slice->data) {
av_free(slice);
return AVERROR(ENOMEM);
}
memcpy(slice->data,
unit->data + pos / 8, slice->data_size);
memset(slice->data + slice->data_size, 0,
AV_INPUT_BUFFER_PADDING_SIZE);
slice->data_bit_start = pos % 8;

unit->content = slice;


+ 4
- 1
libavcodec/cbs_mpeg2.c View File

@@ -181,7 +181,8 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx,
len = unit->data_size;

slice->data_size = len - pos / 8;
slice->data = av_malloc(slice->data_size);
slice->data = av_malloc(slice->data_size +
AV_INPUT_BUFFER_PADDING_SIZE);
if (!slice->data) {
av_free(slice);
return AVERROR(ENOMEM);
@@ -189,6 +190,8 @@ static int cbs_mpeg2_read_unit(CodedBitstreamContext *ctx,

memcpy(slice->data,
unit->data + pos / 8, slice->data_size);
memset(slice->data + slice->data_size, 0,
AV_INPUT_BUFFER_PADDING_SIZE);
slice->data_bit_start = pos % 8;

unit->content = slice;


Loading…
Cancel
Save