mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
qtmux: fix corner case buffer handling for reorder method
This commit is contained in:
parent
283b30e312
commit
4df05e76ed
1 changed files with 13 additions and 10 deletions
|
@ -1734,11 +1734,6 @@ gst_qt_mux_stop_file (GstQTMux * qtmux)
|
|||
GstCollectData *cdata = (GstCollectData *) walk->data;
|
||||
GstQTPad *qtpad = (GstQTPad *) cdata;
|
||||
|
||||
if (!qtpad->last_buf) {
|
||||
GST_DEBUG_OBJECT (qtmux, "Pad %s has no buffers",
|
||||
GST_PAD_NAME (qtpad->collect.pad));
|
||||
continue;
|
||||
}
|
||||
/* send last buffer */
|
||||
GST_DEBUG_OBJECT (qtmux, "Sending the last buffer for pad %s",
|
||||
GST_PAD_NAME (qtpad->collect.pad));
|
||||
|
@ -1747,6 +1742,13 @@ gst_qt_mux_stop_file (GstQTMux * qtmux)
|
|||
GST_WARNING_OBJECT (qtmux, "Failed to send last buffer for %s, "
|
||||
"flow return: %s", GST_PAD_NAME (qtpad->collect.pad),
|
||||
gst_flow_get_name (ret));
|
||||
|
||||
if (!GST_CLOCK_TIME_IS_VALID (qtpad->first_ts)) {
|
||||
GST_DEBUG_OBJECT (qtmux, "Pad %s has no buffers",
|
||||
GST_PAD_NAME (qtpad->collect.pad));
|
||||
continue;
|
||||
}
|
||||
|
||||
/* determine max stream duration */
|
||||
if (!GST_CLOCK_TIME_IS_VALID (first_ts) ||
|
||||
(GST_CLOCK_TIME_IS_VALID (qtpad->first_ts) &&
|
||||
|
@ -2069,7 +2071,7 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf)
|
|||
gint64 pts_offset = 0;
|
||||
gboolean sync = FALSE, do_pts = FALSE;
|
||||
gboolean drain = (buf == NULL);
|
||||
GstFlowReturn ret;
|
||||
GstFlowReturn ret = GST_FLOW_OK;
|
||||
|
||||
if (!pad->fourcc)
|
||||
goto not_negotiated;
|
||||
|
@ -2080,15 +2082,15 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf)
|
|||
}
|
||||
|
||||
again:
|
||||
last_buf = pad->last_buf;
|
||||
if (G_UNLIKELY (qtmux->dts_method == DTS_METHOD_REORDER)) {
|
||||
buf = gst_qt_mux_get_asc_buffer_ts (qtmux, pad, buf);
|
||||
if (!buf) {
|
||||
GST_DEBUG_OBJECT (qtmux, "no reordered buffer yet");
|
||||
if (!buf && !last_buf) {
|
||||
GST_DEBUG_OBJECT (qtmux, "no reordered buffer");
|
||||
return GST_FLOW_OK;
|
||||
}
|
||||
}
|
||||
|
||||
last_buf = pad->last_buf;
|
||||
if (last_buf == NULL) {
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
if (buf == NULL) {
|
||||
|
@ -2102,7 +2104,7 @@ again:
|
|||
}
|
||||
#endif
|
||||
pad->last_buf = buf;
|
||||
return GST_FLOW_OK;
|
||||
goto exit;
|
||||
} else
|
||||
gst_buffer_ref (last_buf);
|
||||
|
||||
|
@ -2352,6 +2354,7 @@ again:
|
|||
ret = gst_qt_mux_send_buffer (qtmux, last_buf, &qtmux->mdat_size, TRUE);
|
||||
}
|
||||
|
||||
exit:
|
||||
if (G_UNLIKELY (drain && qtmux->dts_method == DTS_METHOD_REORDER &&
|
||||
ret == GST_FLOW_OK)) {
|
||||
buf = NULL;
|
||||
|
|
Loading…
Reference in a new issue