gst_v4l2_codec_h264_dec_reset_picture (GstV4l2CodecH264Dec * self)
{
if (self->bitstream) {
- gst_memory_unmap (self->bitstream, &self->bitstream_map);
+ if (self->bitstream_map.memory)
+ gst_memory_unmap (self->bitstream, &self->bitstream_map);
g_clear_pointer (&self->bitstream, gst_memory_unref);
self->bitstream_map = (GstMapInfo) GST_MAP_INFO_INIT;
}
GstV4l2Request *request;
GstBuffer *buffer;
GstFlowReturn flow_ret;
+ gsize bytesused;
/* *INDENT-OFF* */
struct v4l2_ext_control control[] = {
return FALSE;
}
+ bytesused = self->bitstream_map.size;
+ gst_memory_unmap (self->bitstream, &self->bitstream_map);
+ self->bitstream_map = (GstMapInfo) GST_MAP_INFO_INIT;
+
if (!gst_v4l2_decoder_queue_sink_mem (self->decoder, request, self->bitstream,
- picture->system_frame_number)) {
+ picture->system_frame_number, bytesused)) {
GST_ELEMENT_ERROR (decoder, RESOURCE, WRITE,
("Driver did not accept the bitstream data."), (NULL));
return FALSE;
gboolean
gst_v4l2_decoder_queue_sink_mem (GstV4l2Decoder * self,
- GstV4l2Request * request, GstMemory * mem, guint32 frame_num)
+ GstV4l2Request * request, GstMemory * mem, guint32 frame_num,
+ gsize bytesused)
{
gint ret;
struct v4l2_plane plane = {
- .bytesused = gst_memory_get_sizes (mem, NULL, NULL),
+ .bytesused = bytesused,
};
struct v4l2_buffer buf = {
.type = direction_to_buffer_type (GST_PAD_SINK),
gboolean gst_v4l2_decoder_queue_sink_mem (GstV4l2Decoder * self,
GstV4l2Request * request,
GstMemory * mem,
- guint32 frame_num);
+ guint32 frame_num,
+ gsize bytesused);
gboolean gst_v4l2_decoder_dequeue_sink (GstV4l2Decoder * self);