mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-11 18:05:37 +00:00
v4l2slh264dec: Factor out bitstream allocation
No functional changes. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1395>
This commit is contained in:
parent
779f331bd4
commit
bc1a0323a9
1 changed files with 30 additions and 20 deletions
|
@ -723,6 +723,34 @@ gst_v4l2_codec_h264_dec_new_sequence (GstH264Decoder * decoder,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_v4l2_codec_h264_dec_ensure_bitstream (GstV4l2CodecH264Dec * self)
|
||||||
|
{
|
||||||
|
if (self->bitstream)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
self->bitstream = gst_v4l2_codec_allocator_alloc (self->sink_allocator);
|
||||||
|
|
||||||
|
if (!self->bitstream) {
|
||||||
|
GST_ELEMENT_ERROR (self, RESOURCE, NO_SPACE_LEFT,
|
||||||
|
("Not enough memory to decode H264 stream."), (NULL));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!gst_memory_map (self->bitstream, &self->bitstream_map, GST_MAP_WRITE)) {
|
||||||
|
GST_ELEMENT_ERROR (self, RESOURCE, WRITE,
|
||||||
|
("Could not access bitstream memory for writing"), (NULL));
|
||||||
|
g_clear_pointer (&self->bitstream, gst_memory_unref);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
/* We use this field to track how much we have written */
|
||||||
|
self->bitstream_map.size = 0;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_v4l2_codec_h264_dec_start_picture (GstH264Decoder * decoder,
|
gst_v4l2_codec_h264_dec_start_picture (GstH264Decoder * decoder,
|
||||||
GstH264Picture * picture, GstH264Slice * slice, GstH264Dpb * dpb)
|
GstH264Picture * picture, GstH264Slice * slice, GstH264Dpb * dpb)
|
||||||
|
@ -733,26 +761,8 @@ gst_v4l2_codec_h264_dec_start_picture (GstH264Decoder * decoder,
|
||||||
if (!self->sink_allocator)
|
if (!self->sink_allocator)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Ensure we have a bitstream to write into */
|
if (!gst_v4l2_codec_h264_dec_ensure_bitstream (self))
|
||||||
if (!self->bitstream) {
|
|
||||||
self->bitstream = gst_v4l2_codec_allocator_alloc (self->sink_allocator);
|
|
||||||
|
|
||||||
if (!self->bitstream) {
|
|
||||||
GST_ELEMENT_ERROR (decoder, RESOURCE, NO_SPACE_LEFT,
|
|
||||||
("Not enough memory to decode H264 stream."), (NULL));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
if (!gst_memory_map (self->bitstream, &self->bitstream_map, GST_MAP_WRITE)) {
|
|
||||||
GST_ELEMENT_ERROR (decoder, RESOURCE, WRITE,
|
|
||||||
("Could not access bitstream memory for writing"), (NULL));
|
|
||||||
g_clear_pointer (&self->bitstream, gst_memory_unref);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We use this field to track how much we have written */
|
|
||||||
self->bitstream_map.size = 0;
|
|
||||||
|
|
||||||
gst_v4l2_codec_h264_dec_fill_pps (self, slice->header.pps);
|
gst_v4l2_codec_h264_dec_fill_pps (self, slice->header.pps);
|
||||||
gst_v4l2_codec_h264_dec_fill_scaling_matrix (self, slice->header.pps);
|
gst_v4l2_codec_h264_dec_fill_scaling_matrix (self, slice->header.pps);
|
||||||
|
|
Loading…
Reference in a new issue