summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2019-07-29 21:56:53 +0200
committerMark Thompson <sw@jkqxz.net>2019-07-29 22:25:10 +0100
commitae49993ce6e547b8c240fd5c230630cc25930966 (patch)
tree563baa4e94324944c134e70ea0ef02f829084810
parent4e7e30bbe0fbe54d44cadc398d4071905d3063e8 (diff)
downloadffmpeg-streaming-ae49993ce6e547b8c240fd5c230630cc25930966.zip
ffmpeg-streaming-ae49993ce6e547b8c240fd5c230630cc25930966.tar.gz
cbs_h264: Improve adding SEI messages
Up until now, if an SEI messages was to be added to a fragment, it was tried to add said SEI message to the first SEI NAL unit of the fragment and if this SEI NAL unit already contained H264_NAL_SEI SEI messages (an arbitrary limit imposed by cbs_h264), adding failed; if there was no SEI NAL unit, a new one has been added. With this commit, the fragment is searched for further NAL units to add the SEI messages to. If all of them are full, a new SEI NAL unit is added. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavcodec/cbs_h2645.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 1c35be5..69ea6dc 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -1588,21 +1588,21 @@ int ff_cbs_h264_add_sei_message(CodedBitstreamContext *ctx,
CodedBitstreamFragment *au,
const H264RawSEIPayload *payload)
{
- H264RawSEI *sei;
- CodedBitstreamUnit *nal = NULL;
+ H264RawSEI *sei = NULL;
int err, i;
// Find an existing SEI NAL unit to add to.
for (i = 0; i < au->nb_units; i++) {
if (au->units[i].type == H264_NAL_SEI) {
- nal = &au->units[i];
- break;
+ sei = au->units[i].content;
+ if (sei->payload_count < H264_MAX_SEI_PAYLOADS)
+ break;
+
+ sei = NULL;
}
}
- if (nal) {
- sei = nal->content;
- } else {
+ if (!sei) {
// Need to make a new SEI NAL unit. Insert it before the first
// slice data NAL unit; if no slice data, add at the end.
AVBufferRef *sei_ref;
@@ -1634,12 +1634,6 @@ int ff_cbs_h264_add_sei_message(CodedBitstreamContext *ctx,
return err;
}
- if (sei->payload_count >= H264_MAX_SEI_PAYLOADS) {
- av_log(ctx->log_ctx, AV_LOG_ERROR, "Too many payloads in "
- "SEI NAL unit.\n");
- return AVERROR(EINVAL);
- }
-
memcpy(&sei->payload[sei->payload_count], payload, sizeof(*payload));
++sei->payload_count;
OpenPOWER on IntegriCloud