summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2015-08-06 14:33:54 +1000
committerJan Schmidt <jan@centricular.com>2015-08-15 15:39:23 +1000
commitfdac09d843f6fed06f222485e8f43959430d994a (patch)
treed32a87acba262472ba4a2a50b86e034b89bcbd56
parent7a2f5d6b030e414f5d662eb73eb7849e9a5a4a1e (diff)
downloadgstreamer-plugins-bad-fdac09d843f6fed06f222485e8f43959430d994a.tar.gz
h264parse: Clear SPS info after processing.
The SPS struct might be filled out by a call to gst_h264_parser_parse_subset_sps, which fills out dynamically allocated data and requires a call to gst_h264_sps_clear() to free it. Also make sure to clear out any allocated SPS data when returning an error. https://bugzilla.gnome.org/show_bug.cgi?id=753306
-rw-r--r--gst-libs/gst/codecparsers/gsth264parser.c5
-rw-r--r--gst/videoparsers/gsth264parse.c1
2 files changed, 5 insertions, 1 deletions
diff --git a/gst-libs/gst/codecparsers/gsth264parser.c b/gst-libs/gst/codecparsers/gsth264parser.c
index 2648194ad..4092acbb2 100644
--- a/gst-libs/gst/codecparsers/gsth264parser.c
+++ b/gst-libs/gst/codecparsers/gsth264parser.c
@@ -1845,8 +1845,10 @@ gst_h264_parser_parse_subset_sps (GstH264NalParser * nalparser,
if (res == GST_H264_PARSER_OK) {
GST_DEBUG ("adding sequence parameter set with id: %d to array", sps->id);
- if (!gst_h264_sps_copy (&nalparser->sps[sps->id], sps))
+ if (!gst_h264_sps_copy (&nalparser->sps[sps->id], sps)) {
+ gst_h264_sps_clear (sps);
return GST_H264_PARSER_ERROR;
+ }
nalparser->last_sps = &nalparser->sps[sps->id];
}
return res;
@@ -1899,6 +1901,7 @@ gst_h264_parse_subset_sps (GstH264NalUnit * nalu, GstH264SPS * sps,
error:
GST_WARNING ("error parsing \"Subset sequence parameter set\"");
+ gst_h264_sps_clear (sps);
sps->valid = FALSE;
return GST_H264_PARSER_ERROR;
}
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 5bbcc0634..bd0162560 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -746,6 +746,7 @@ gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu)
}
gst_h264_parser_store_nal (h264parse, sps.id, nal_type, nalu);
+ gst_h264_sps_clear (&sps);
h264parse->state |= GST_H264_PARSE_STATE_GOT_SPS;
h264parse->header |= TRUE;
break;