mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 14:06:23 +00:00
jifmux: Be safe and check bytewriter returns
Check GstByteWriter returns to know when recombining the image failed and log a warning.
This commit is contained in:
parent
0d637e4f09
commit
72fdd708cf
1 changed files with 14 additions and 6 deletions
|
@ -513,6 +513,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
|
||||||
GstJifMuxMarker *m;
|
GstJifMuxMarker *m;
|
||||||
GList *node;
|
GList *node;
|
||||||
guint size = self->priv->scan_size;
|
guint size = self->priv->scan_size;
|
||||||
|
gboolean writer_status = TRUE;
|
||||||
|
|
||||||
/* iterate list and collect size */
|
/* iterate list and collect size */
|
||||||
for (node = self->priv->markers; node; node = g_list_next (node)) {
|
for (node = self->priv->markers; node; node = g_list_next (node)) {
|
||||||
|
@ -541,27 +542,34 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
|
||||||
|
|
||||||
/* memcopy markers */
|
/* memcopy markers */
|
||||||
writer = gst_byte_writer_new_with_buffer (buf, TRUE);
|
writer = gst_byte_writer_new_with_buffer (buf, TRUE);
|
||||||
for (node = self->priv->markers; node; node = g_list_next (node)) {
|
for (node = self->priv->markers; node && writer_status;
|
||||||
|
node = g_list_next (node)) {
|
||||||
m = (GstJifMuxMarker *) node->data;
|
m = (GstJifMuxMarker *) node->data;
|
||||||
|
|
||||||
gst_byte_writer_put_uint8 (writer, 0xff);
|
writer_status &= gst_byte_writer_put_uint8 (writer, 0xff);
|
||||||
gst_byte_writer_put_uint8 (writer, m->marker);
|
writer_status &= gst_byte_writer_put_uint8 (writer, m->marker);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self, "marker = %2x, size = %u", m->marker, m->size + 2);
|
GST_DEBUG_OBJECT (self, "marker = %2x, size = %u", m->marker, m->size + 2);
|
||||||
|
|
||||||
if (m->size) {
|
if (m->size) {
|
||||||
gst_byte_writer_put_uint16_be (writer, m->size + 2);
|
writer_status &= gst_byte_writer_put_uint16_be (writer, m->size + 2);
|
||||||
gst_byte_writer_put_data (writer, m->data, m->size);
|
writer_status &= gst_byte_writer_put_data (writer, m->data, m->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m->marker == SOS) {
|
if (m->marker == SOS) {
|
||||||
GST_DEBUG_OBJECT (self, "scan data, size = %u", self->priv->scan_size);
|
GST_DEBUG_OBJECT (self, "scan data, size = %u", self->priv->scan_size);
|
||||||
gst_byte_writer_put_data (writer, self->priv->scan_data,
|
writer_status &= gst_byte_writer_put_data (writer, self->priv->scan_data,
|
||||||
self->priv->scan_size);
|
self->priv->scan_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gst_byte_writer_free (writer);
|
gst_byte_writer_free (writer);
|
||||||
|
|
||||||
|
if (!writer_status) {
|
||||||
|
GST_WARNING_OBJECT (self, "Failed to write to buffer, calculated size "
|
||||||
|
"was probably too short");
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
|
||||||
*new_buf = buf;
|
*new_buf = buf;
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue