---
libavcodec/cbs_h264.h | 6 ++++++
libavcodec/cbs_h2645.c | 21 +++++++++++++++++++++
libavcodec/cbs_h264_syntax_template.c | 29 +++++++++++++++++++++++++++++
3 files changed, 56 insertions(+)
diff --git a/libavcodec/cbs_h264.h b/libavcodec/cbs_h264.h
index a59b7be1b..5a7dc2769 100644
--- a/libavcodec/cbs_h264.h
+++ b/libavcodec/cbs_h264.h
@@ -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.
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 7f5972cd7..bb3a11949 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -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, &bc, 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);
diff --git a/libavcodec/cbs_h264_syntax_template.c
b/libavcodec/cbs_h264_syntax_template.c
index 29e973598..1aa788858 100644
--- a/libavcodec/cbs_h264_syntax_template.c
+++ b/libavcodec/cbs_h264_syntax_template.c
@@ -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, ¤t->nal_unit_header,
+ 1 << H264_NAL_FILLER_DATA));
+
+#ifdef READ
+ while (bitstream_peek(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;
+}
--
2.15.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel