mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 09:55:36 +00:00
h265parse: Don't duplicate VPS/SPS/PPS per config-interval if exists
Don't need to manually insert VPS/SPS/PPS since inband data could be useable. Also fixes #824
This commit is contained in:
parent
4f7fe897b9
commit
68a5697c1a
2 changed files with 17 additions and 0 deletions
|
@ -184,6 +184,9 @@ gst_h265_parse_reset_frame (GstH265Parse * h265parse)
|
|||
h265parse->sei_pos = -1;
|
||||
h265parse->keyframe = FALSE;
|
||||
h265parse->header = FALSE;
|
||||
h265parse->have_vps_in_frame = FALSE;
|
||||
h265parse->have_sps_in_frame = FALSE;
|
||||
h265parse->have_pps_in_frame = FALSE;
|
||||
gst_adapter_clear (h265parse->frame_out);
|
||||
}
|
||||
|
||||
|
@ -551,6 +554,7 @@ gst_h265_parse_process_nal (GstH265Parse * h265parse, GstH265NalUnit * nalu)
|
|||
GST_DEBUG_OBJECT (h265parse, "triggering src caps check");
|
||||
h265parse->update_caps = TRUE;
|
||||
h265parse->have_vps = TRUE;
|
||||
h265parse->have_vps_in_frame = TRUE;
|
||||
if (h265parse->push_codec && h265parse->have_pps) {
|
||||
/* VPS/SPS/PPS found in stream before the first pre_push_frame, no need
|
||||
* to forcibly push at start */
|
||||
|
@ -580,6 +584,7 @@ gst_h265_parse_process_nal (GstH265Parse * h265parse, GstH265NalUnit * nalu)
|
|||
GST_DEBUG_OBJECT (h265parse, "triggering src caps check");
|
||||
h265parse->update_caps = TRUE;
|
||||
h265parse->have_sps = TRUE;
|
||||
h265parse->have_sps_in_frame = TRUE;
|
||||
if (h265parse->push_codec && h265parse->have_pps) {
|
||||
/* SPS and PPS found in stream before the first pre_push_frame, no need
|
||||
* to forcibly push at start */
|
||||
|
@ -615,6 +620,7 @@ gst_h265_parse_process_nal (GstH265Parse * h265parse, GstH265NalUnit * nalu)
|
|||
h265parse->update_caps = TRUE;
|
||||
}
|
||||
h265parse->have_pps = TRUE;
|
||||
h265parse->have_pps_in_frame = TRUE;
|
||||
if (h265parse->push_codec && h265parse->have_sps) {
|
||||
/* SPS and PPS found in stream before the first pre_push_frame, no need
|
||||
* to forcibly push at start */
|
||||
|
@ -1949,6 +1955,12 @@ gst_h265_parse_handle_vps_sps_pps_nals (GstH265Parse * h265parse,
|
|||
gboolean send_done = FALSE;
|
||||
GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
||||
|
||||
if (h265parse->have_vps_in_frame && h265parse->have_sps_in_frame
|
||||
&& h265parse->have_pps_in_frame) {
|
||||
GST_DEBUG_OBJECT (h265parse, "VPS/SPS/PPS exist in frame, will not insert");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (h265parse->align == GST_H265_PARSE_ALIGN_NAL) {
|
||||
/* send separate config NAL buffers */
|
||||
GST_DEBUG_OBJECT (h265parse, "- sending VPS/SPS/PPS");
|
||||
|
|
|
@ -76,6 +76,11 @@ struct _GstH265Parse
|
|||
gboolean have_sps;
|
||||
gboolean have_pps;
|
||||
|
||||
/* per frame vps/sps/pps check for periodic push codec decision */
|
||||
gboolean have_vps_in_frame;
|
||||
gboolean have_sps_in_frame;
|
||||
gboolean have_pps_in_frame;
|
||||
|
||||
/* collected SPS and PPS NALUs */
|
||||
GstBuffer *vps_nals[GST_H265_MAX_VPS_COUNT];
|
||||
GstBuffer *sps_nals[GST_H265_MAX_SPS_COUNT];
|
||||
|
|
Loading…
Reference in a new issue