}
ret = gst_qt_mux_check_and_update_timecode (qtmux, pad, buf, ret);
- if (ret != GST_FLOW_OK)
+ if (ret != GST_FLOW_OK) {
+ if (buf)
+ gst_buffer_unref (buf);
return ret;
+ }
last_buf = pad->last_buf;
+ pad->last_buf = buf;
if (last_buf == NULL) {
#ifndef GST_DISABLE_GST_DEBUG
GST_PAD_NAME (pad->collect.pad));
}
#endif
- pad->last_buf = buf;
qtmux->current_pad = pad;
goto exit;
- } else {
- gst_buffer_ref (last_buf);
}
if (!GST_BUFFER_PTS_IS_VALID (last_buf))
goto no_pts;
/* if this is the first buffer, store the timestamp */
- if (G_UNLIKELY (pad->first_ts == GST_CLOCK_TIME_NONE) && last_buf) {
+ if (G_UNLIKELY (pad->first_ts == GST_CLOCK_TIME_NONE)) {
if (GST_BUFFER_PTS_IS_VALID (last_buf)) {
pad->first_ts = GST_BUFFER_PTS (last_buf);
} else if (GST_BUFFER_DTS_IS_VALID (last_buf)) {
GST_TIME_ARGS (pad->first_ts));
}
- if (last_buf && buf && GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (buf)) &&
+ if (buf && GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (buf)) &&
GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DTS (last_buf)) &&
GST_BUFFER_DTS (buf) < GST_BUFFER_DTS (last_buf)) {
GST_ERROR ("decreasing DTS value %" GST_TIME_FORMAT " < %" GST_TIME_FORMAT,
else
duration = 0;
if (!pad->sparse) {
- if (last_buf && buf && GST_BUFFER_DTS_IS_VALID (buf)
+ if (buf && GST_BUFFER_DTS_IS_VALID (buf)
&& GST_BUFFER_DTS_IS_VALID (last_buf))
duration = GST_BUFFER_DTS (buf) - GST_BUFFER_DTS (last_buf);
- else if (last_buf && buf && GST_BUFFER_PTS_IS_VALID (buf)
+ else if (buf && GST_BUFFER_PTS_IS_VALID (buf)
&& GST_BUFFER_PTS_IS_VALID (last_buf))
duration = GST_BUFFER_PTS (buf) - GST_BUFFER_PTS (last_buf);
}
- gst_buffer_replace (&pad->last_buf, buf);
-
if (qtmux->current_pad != pad || qtmux->current_chunk_offset == -1) {
GST_DEBUG_OBJECT (qtmux,
"Switching to next chunk for pad %s:%s: offset %" G_GUINT64_FORMAT
}
/* for computing the avg bitrate */
- if (G_LIKELY (last_buf)) {
- pad->total_bytes += gst_buffer_get_size (last_buf);
- pad->total_duration += duration;
- }
+ pad->total_bytes += gst_buffer_get_size (last_buf);
+ pad->total_duration += duration;
qtmux->current_chunk_size += gst_buffer_get_size (last_buf);
qtmux->current_chunk_duration += duration;
}
}
- if (buf)
- gst_buffer_unref (buf);
-
exit:
return ret;
/* ERRORS */
bail:
{
- if (buf)
- gst_buffer_unref (buf);
gst_buffer_unref (last_buf);
return GST_FLOW_ERROR;
}