aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2018-10-16 22:01:26 +0100
committerMark Thompson <sw@jkqxz.net>2018-10-22 23:01:29 +0100
commit3143fe34f622ae61ca75a65feba3a8f1a497567e (patch)
tree9201b5887b3fa535c8555be4d923332217c5ecdb /libavcodec
parentb737317a8813e671c00b8ac7023c47e48ffeb1c8 (diff)
downloadffmpeg-3143fe34f622ae61ca75a65feba3a8f1a497567e.tar.gz
cbs_h264: Actually decompose end-of-sequence NAL units
64c50c0e978cd556dc2da238dfe0bb367e7c1ab9 declared support for decomposing them but omitted to implement it; this adds an implementation. Also do the same for end-of-stream NAL units, since they are equivalent.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/cbs_h2645.c32
-rw-r--r--libavcodec/cbs_h264_syntax_template.c18
2 files changed, 49 insertions, 1 deletions
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 4b31601c0f..a1b92c87ce 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -872,7 +872,21 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext *ctx,
break;
case H264_NAL_END_SEQUENCE:
- return 0;
+ case H264_NAL_END_STREAM:
+ {
+ err = ff_cbs_alloc_unit_content(ctx, unit,
+ sizeof(H264RawNALUnitHeader),
+ NULL);
+ if (err < 0)
+ return err;
+
+ err = (unit->type == H264_NAL_END_SEQUENCE ?
+ cbs_h264_read_end_of_sequence :
+ cbs_h264_read_end_of_stream)(ctx, &gbc, unit->content);
+ if (err < 0)
+ return err;
+ }
+ break;
default:
return AVERROR(ENOSYS);
@@ -1147,6 +1161,22 @@ static int cbs_h264_write_nal_unit(CodedBitstreamContext *ctx,
}
break;
+ case H264_NAL_END_SEQUENCE:
+ {
+ err = cbs_h264_write_end_of_sequence(ctx, pbc, unit->content);
+ if (err < 0)
+ return err;
+ }
+ break;
+
+ case H264_NAL_END_STREAM:
+ {
+ err = cbs_h264_write_end_of_stream(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 1c8d7d5eae..1a9fb9cfeb 100644
--- a/libavcodec/cbs_h264_syntax_template.c
+++ b/libavcodec/cbs_h264_syntax_template.c
@@ -1375,3 +1375,21 @@ static int FUNC(filler)(CodedBitstreamContext *ctx, RWContext *rw,
return 0;
}
+
+static int FUNC(end_of_sequence)(CodedBitstreamContext *ctx, RWContext *rw,
+ H264RawNALUnitHeader *current)
+{
+ HEADER("End of Sequence");
+
+ return FUNC(nal_unit_header)(ctx, rw, current,
+ 1 << H264_NAL_END_SEQUENCE);
+}
+
+static int FUNC(end_of_stream)(CodedBitstreamContext *ctx, RWContext *rw,
+ H264RawNALUnitHeader *current)
+{
+ HEADER("End of Stream");
+
+ return FUNC(nal_unit_header)(ctx, rw, current,
+ 1 << H264_NAL_END_STREAM);
+}