summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSreerenj Balachandran <sreerenj.balachandran@intel.com>2016-03-11 17:34:03 +0200
committerTim-Philipp Müller <tim@centricular.com>2016-04-06 14:25:57 +0100
commit4e425d5838bef9f14fa1043f45a01534e6d91d2d (patch)
tree94c295177575f86b19072676007facc4a9820377
parent59ddf0845eee0eb8c8c715e073ccce35b2aec7df (diff)
downloadgstreamer-plugins-bad-4e425d5838bef9f14fa1043f45a01534e6d91d2d.tar.gz
videoparsers: h265: Fix segfault while transforming hevc to nal aligned bytestream
Create temporary ParseFrame and copy the nal size buffer region for each nal unit like we did for h264. https://bugzilla.gnome.org/show_bug.cgi?id=763494
-rw-r--r--gst/videoparsers/gsth265parse.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index 4bbc889f5..4656c7287 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -762,12 +762,21 @@ gst_h265_parse_handle_frame_packetized (GstBaseParse * parse,
/* dispatch per NALU if needed */
if (h265parse->split_packetized) {
+ GstBaseParseFrame tmp_frame;
+
+ gst_base_parse_frame_init (&tmp_frame);
+ tmp_frame.flags |= frame->flags;
+ tmp_frame.offset = frame->offset;
+ tmp_frame.overhead = frame->overhead;
+ tmp_frame.buffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL,
+ nalu.offset, nalu.size);
+
/* note we don't need to come up with a sub-buffer, since
* subsequent code only considers input buffer's metadata.
* Real data is either taken from input by baseclass or
* a replacement output buffer is provided anyway. */
- gst_h265_parse_parse_frame (parse, frame);
- ret = gst_base_parse_finish_frame (parse, frame, nl + nalu.size);
+ gst_h265_parse_parse_frame (parse, &tmp_frame);
+ ret = gst_base_parse_finish_frame (parse, &tmp_frame, nl + nalu.size);
left -= nl + nalu.size;
}