GstByteWriter bw;
GstBuffer *new_buf;
const gboolean bs = h264parse->format == GST_H264_PARSE_FORMAT_BYTE;
+ gboolean ok;
- gst_byte_writer_init_with_size (&bw, GST_BUFFER_SIZE (buffer), FALSE);
- ok = gst_byte_writer_put_data (&bw, GST_BUFFER_DATA (buffer),
- h264parse->idr_pos);
+ gst_byte_writer_init_with_size (&bw, gst_buffer_get_size (buffer),
+ FALSE);
- gst_byte_writer_put_buffer_unchecked (&bw, buffer, 0,
- h264parse->idr_pos);
++ ok = gst_byte_writer_put_buffer (&bw, buffer, 0, h264parse->idr_pos);
GST_DEBUG_OBJECT (h264parse, "- inserting SPS/PPS");
for (i = 0; i < GST_H264_MAX_SPS_COUNT; i++) {
if ((codec_nal = h264parse->sps_nals[i])) {
+ gsize nal_size = gst_buffer_get_size (codec_nal);
GST_DEBUG_OBJECT (h264parse, "inserting SPS nal");
- gst_byte_writer_put_uint32_be_unchecked (&bw, bs ? 1 : nal_size);
- gst_byte_writer_put_buffer_unchecked (&bw, codec_nal, 0,
- nal_size);
- ok &= gst_byte_writer_put_uint32_be (&bw,
- bs ? 1 : GST_BUFFER_SIZE (codec_nal));
- ok &= gst_byte_writer_put_data (&bw,
- GST_BUFFER_DATA (codec_nal), GST_BUFFER_SIZE (codec_nal));
++ ok &= gst_byte_writer_put_uint32_be (&bw, bs ? 1 : nal_size);
++ ok &= gst_byte_writer_put_buffer (&bw, codec_nal, 0, nal_size);
h264parse->last_report = new_ts;
}
}
for (i = 0; i < GST_H264_MAX_PPS_COUNT; i++) {
if ((codec_nal = h264parse->pps_nals[i])) {
+ gsize nal_size = gst_buffer_get_size (codec_nal);
GST_DEBUG_OBJECT (h264parse, "inserting PPS nal");
- gst_byte_writer_put_uint32_be_unchecked (&bw, bs ? 1 : nal_size);
- gst_byte_writer_put_buffer_unchecked (&bw, codec_nal, 0,
- nal_size);
- ok &= gst_byte_writer_put_uint32_be (&bw,
- bs ? 1 : GST_BUFFER_SIZE (codec_nal));
- ok &= gst_byte_writer_put_data (&bw,
- GST_BUFFER_DATA (codec_nal), GST_BUFFER_SIZE (codec_nal));
++ ok &= gst_byte_writer_put_uint32_be (&bw, bs ? 1 : nal_size);
++ ok &= gst_byte_writer_put_buffer (&bw, codec_nal, 0, nal_size);
h264parse->last_report = new_ts;
}
}
- gst_byte_writer_put_buffer_unchecked (&bw, buffer, h264parse->idr_pos,
- -1);
- ok &= gst_byte_writer_put_data (&bw,
- GST_BUFFER_DATA (buffer) + h264parse->idr_pos,
- GST_BUFFER_SIZE (buffer) - h264parse->idr_pos);
++ ok &=
++ gst_byte_writer_put_buffer (&bw, buffer, h264parse->idr_pos, -1);
/* collect result and push */
new_buf = gst_byte_writer_reset_and_get_buffer (&bw);
- gst_buffer_copy_metadata (new_buf, buffer, GST_BUFFER_COPY_ALL);
+ gst_buffer_copy_into (new_buf, buffer, GST_BUFFER_COPY_METADATA, 0,
+ -1);
/* should already be keyframe/IDR, but it may not have been,
* so mark it as such to avoid being discarded by picky decoder */
GST_BUFFER_FLAG_UNSET (new_buf, GST_BUFFER_FLAG_DELTA_UNIT);
- gst_buffer_replace (&frame->buffer, new_buf);
+ gst_buffer_replace (&frame->out_buffer, new_buf);
gst_buffer_unref (new_buf);
+ /* some result checking seems to make some compilers happy */
+ if (G_UNLIKELY (!ok)) {
+ GST_ERROR_OBJECT (h264parse, "failed to insert SPS/PPS");
+ }
}
}
/* we pushed whatever we had */