diff options
author | Sreerenj Balachandran <sreerenj.balachandran@intel.com> | 2016-03-11 17:34:03 +0200 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.com> | 2016-04-06 14:25:57 +0100 |
commit | 4e425d5838bef9f14fa1043f45a01534e6d91d2d (patch) | |
tree | 94c295177575f86b19072676007facc4a9820377 | |
parent | 59ddf0845eee0eb8c8c715e073ccce35b2aec7df (diff) | |
download | gstreamer-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.c | 13 |
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; } |