diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2019-07-29 21:56:53 +0200 |
---|---|---|
committer | Mark Thompson <sw@jkqxz.net> | 2019-07-29 22:25:10 +0100 |
commit | ae49993ce6e547b8c240fd5c230630cc25930966 (patch) | |
tree | 563baa4e94324944c134e70ea0ef02f829084810 /libavcodec/cbs_h2645.c | |
parent | 4e7e30bbe0fbe54d44cadc398d4071905d3063e8 (diff) |
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>
Diffstat (limited to 'libavcodec/cbs_h2645.c')
-rw-r--r-- | libavcodec/cbs_h2645.c | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index 1c35be51e7..69ea6dc6bb 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; |