1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Merge commit 'eccc03c8fbc603a0a3257df66f0705f74fe2581a'

* commit 'eccc03c8fbc603a0a3257df66f0705f74fe2581a':
  cbs_h264: Add support for filler NAL units

Some bitstream -> get_bits.

Merged-by: Mark Thompson <sw@jkqxz.net>
This commit is contained in:
Mark Thompson 2018-02-21 22:43:13 +00:00
commit fbeac5356c
3 changed files with 56 additions and 0 deletions

View File

@ -408,6 +408,12 @@ typedef struct H264RawSlice {
AVBufferRef *data_ref;
} H264RawSlice;
typedef struct H264RawFiller {
H264RawNALUnitHeader nal_unit_header;
uint32_t filler_size;
} H264RawFiller;
typedef struct CodedBitstreamH264Context {
// Reader/writer context in common with the H.265 implementation.

View File

@ -815,6 +815,19 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext *ctx,
}
break;
case H264_NAL_FILLER_DATA:
{
err = ff_cbs_alloc_unit_content(ctx, unit,
sizeof(H264RawFiller), NULL);
if (err < 0)
return err;
err = cbs_h264_read_filler(ctx, &gbc, unit->content);
if (err < 0)
return err;
}
break;
default:
return AVERROR(ENOSYS);
}
@ -1070,6 +1083,14 @@ static int cbs_h264_write_nal_unit(CodedBitstreamContext *ctx,
}
break;
case H264_NAL_FILLER_DATA:
{
err = cbs_h264_write_filler(ctx, pbc, unit->content);
if (err < 0)
return err;
}
break;
default:
av_log(ctx->log_ctx, AV_LOG_ERROR, "Write unimplemented for "
"NAL unit type %"PRIu32".\n", unit->type);

View File

@ -1247,3 +1247,32 @@ static int FUNC(slice_header)(CodedBitstreamContext *ctx, RWContext *rw,
return 0;
}
static int FUNC(filler)(CodedBitstreamContext *ctx, RWContext *rw,
H264RawFiller *current)
{
av_unused int ff_byte = 0xff;
int err;
HEADER("Filler Data");
CHECK(FUNC(nal_unit_header)(ctx, rw, &current->nal_unit_header,
1 << H264_NAL_FILLER_DATA));
#ifdef READ
while (show_bits(rw, 8) == 0xff) {
xu(8, ff_byte, ff_byte, 0xff, 0xff);
++current->filler_size;
}
#else
{
uint32_t i;
for (i = 0; i < current->filler_size; i++)
xu(8, ff_byte, ff_byte, 0xff, 0xff);
}
#endif
CHECK(FUNC(rbsp_trailing_bits)(ctx, rw));
return 0;
}