diff options
author | Seungha Yang <seungha.yang@navercorp.com> | 2019-05-02 13:20:30 +0900 |
---|---|---|
committer | Sebastian Dröge <slomo@coaxion.net> | 2019-05-02 07:12:25 +0000 |
commit | fbec447191ce316791c8c7d12ecaadaa22a2a95a (patch) | |
tree | 83a7122b6ed019a64f45831546d6a93ba1f14439 /ext/x265 | |
parent | 538ae98ed2a9c24dd8413c89f0ff2933be642151 (diff) | |
download | gstreamer-plugins-bad-fbec447191ce316791c8c7d12ecaadaa22a2a95a.tar.gz |
x265enc: Do not drop SEI nals from header
SEI message shouldn't be dropped since it contains various informal (or essential)
information.
Diffstat (limited to 'ext/x265')
-rw-r--r-- | ext/x265/gstx265enc.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/ext/x265/gstx265enc.c b/ext/x265/gstx265enc.c index ae48fe571..b790247ee 100644 --- a/ext/x265/gstx265enc.c +++ b/ext/x265/gstx265enc.c @@ -889,6 +889,7 @@ gst_x265_enc_get_header_buffer (GstX265Enc * encoder) gint32 vps_idx, sps_idx, pps_idx; int header_return; GstBuffer *buf; + gsize header_size = 0; header_return = x265_encoder_headers (encoder->x265enc, &nal, &i_nal); if (header_return < 0) { @@ -905,12 +906,17 @@ gst_x265_enc_get_header_buffer (GstX265Enc * encoder) vps_idx = sps_idx = pps_idx = -1; for (i = 0; i < i_nal; i++) { - if (nal[i].type == 32) { + if (nal[i].type == NAL_UNIT_VPS) { vps_idx = i; - } else if (nal[i].type == 33) { + header_size += nal[i].sizeBytes; + } else if (nal[i].type == NAL_UNIT_SPS) { sps_idx = i; - } else if (nal[i].type == 34) { + header_size += nal[i].sizeBytes; + } else if (nal[i].type == NAL_UNIT_PPS) { pps_idx = i; + header_size += nal[i].sizeBytes; + } else if (nal[i].type == NAL_UNIT_PREFIX_SEI) { + header_size += nal[i].sizeBytes; } } @@ -921,15 +927,20 @@ gst_x265_enc_get_header_buffer (GstX265Enc * encoder) } offset = 0; - buf = - gst_buffer_new_allocate (NULL, - nal[vps_idx].sizeBytes + nal[sps_idx].sizeBytes + nal[pps_idx].sizeBytes, - NULL); + buf = gst_buffer_new_allocate (NULL, header_size, NULL); gst_buffer_fill (buf, offset, nal[vps_idx].payload, nal[vps_idx].sizeBytes); offset += nal[vps_idx].sizeBytes; gst_buffer_fill (buf, offset, nal[sps_idx].payload, nal[sps_idx].sizeBytes); offset += nal[sps_idx].sizeBytes; gst_buffer_fill (buf, offset, nal[pps_idx].payload, nal[pps_idx].sizeBytes); + offset += nal[pps_idx].sizeBytes; + + for (i = 0; i < i_nal; i++) { + if (nal[i].type == NAL_UNIT_PREFIX_SEI) { + gst_buffer_fill (buf, offset, nal[i].payload, nal[i].sizeBytes); + offset += nal[i].sizeBytes; + } + } return buf; } |