diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-09-14 12:06:23 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-09-14 17:27:49 +0200 |
commit | f2191d403c47dda65836e72686a94a94f2dcc0bc (patch) | |
tree | 665490e3936d10c46738ee99de23391b79f8cea9 | |
parent | a0d88d5ff5b266f36e278c3455c6a409b4821949 (diff) | |
download | gstreamer-plugins-bad-f2191d403c47dda65836e72686a94a94f2dcc0bc.tar.gz |
h264parse: init pps and sps structures before parsing
... which arranges for a valid fallback id, and allows to continue best effort
processing even when sps/pps parsing fails.
-rw-r--r-- | gst/videoparsers/gsth264parse.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c index 70f19e8fe..58922c496 100644 --- a/gst/videoparsers/gsth264parse.c +++ b/gst/videoparsers/gsth264parse.c @@ -435,10 +435,11 @@ static void gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu) { guint nal_type; - GstH264PPS pps; - GstH264SPS sps; + GstH264PPS pps = { 0, }; + GstH264SPS sps = { 0, }; GstH264SEIMessage sei; GstH264NalParser *nalparser = h264parse->nalparser; + GstH264ParserResult pres; /* nothing to do for broken input */ if (G_UNLIKELY (nalu->size < 2)) { @@ -455,8 +456,10 @@ gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu) switch (nal_type) { case GST_H264_NAL_SPS: - gst_h264_parser_parse_sps (nalparser, nalu, &sps, TRUE); - /* TODO: check for failure (sps.id not set) */ + pres = gst_h264_parser_parse_sps (nalparser, nalu, &sps, TRUE); + /* arranged for a fallback sps.id, so use that one and only warn */ + if (pres != GST_H264_PARSER_OK) + GST_WARNING_OBJECT (h264parse, "failed to parse SPS:"); GST_DEBUG_OBJECT (h264parse, "triggering src caps check"); h264parse->update_caps = TRUE; @@ -473,8 +476,11 @@ gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu) gst_h264_parser_store_nal (h264parse, sps.id, nal_type, nalu); break; case GST_H264_NAL_PPS: - gst_h264_parser_parse_pps (nalparser, nalu, &pps); - /* TODO: check for failure (pps.id not set) */ + pres = gst_h264_parser_parse_pps (nalparser, nalu, &pps); + /* arranged for a fallback pps.id, so use that one and only warn */ + if (pres != GST_H264_PARSER_OK) + GST_WARNING_OBJECT (h264parse, "failed to parse PPS:"); + /* parameters might have changed, force caps check */ GST_DEBUG_OBJECT (h264parse, "triggering src caps check"); h264parse->update_caps = TRUE; |