summaryrefslogtreecommitdiff
path: root/ext/x265
diff options
context:
space:
mode:
authorSeungha Yang <seungha.yang@navercorp.com>2019-05-02 13:20:30 +0900
committerSebastian Dröge <slomo@coaxion.net>2019-05-02 07:12:25 +0000
commitfbec447191ce316791c8c7d12ecaadaa22a2a95a (patch)
tree83a7122b6ed019a64f45831546d6a93ba1f14439 /ext/x265
parent538ae98ed2a9c24dd8413c89f0ff2933be642151 (diff)
downloadgstreamer-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.c25
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;
}