From: Sebastian Dröge Date: Thu, 14 Nov 2019 11:37:58 +0000 (+0100) Subject: audio-buffer: Don't fail to map buffers with zero samples X-Git-Tag: 1.16.2~10 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d803c3816e5595f83273405592c5d64dd8123768;p=platform%2Fupstream%2Fgst-plugins-base.git audio-buffer: Don't fail to map buffers with zero samples Instead initialize the map infos, etc to NULL like gst_buffer_map() would be doing on a zero-sized buffer. This fixes a crash in audioresample if the first output buffer would contain zero samples. --- diff --git a/gst-libs/gst/audio/audio-buffer.c b/gst-libs/gst/audio/audio-buffer.c index 74b04c7..e016572 100644 --- a/gst-libs/gst/audio/audio-buffer.c +++ b/gst-libs/gst/audio/audio-buffer.c @@ -154,16 +154,22 @@ gst_audio_buffer_map (GstAudioBuffer * buffer, const GstAudioInfo * info, buffer->map_infos = buffer->priv_map_infos_arr; } - for (i = 0; i < buffer->n_planes; i++) { - if (!gst_buffer_find_memory (gstbuffer, meta->offsets[i], - GST_AUDIO_BUFFER_PLANE_SIZE (buffer), &idx, &length, &skip)) - goto no_memory; + if (buffer->n_samples == 0) { + memset (buffer->map_infos, 0, + buffer->n_planes * sizeof (buffer->map_infos[0])); + memset (buffer->planes, 0, buffer->n_planes * sizeof (buffer->planes[0])); + } else { + for (i = 0; i < buffer->n_planes; i++) { + if (!gst_buffer_find_memory (gstbuffer, meta->offsets[i], + GST_AUDIO_BUFFER_PLANE_SIZE (buffer), &idx, &length, &skip)) + goto no_memory; - if (!gst_buffer_map_range (gstbuffer, idx, length, &buffer->map_infos[i], - flags)) - goto cannot_map; + if (!gst_buffer_map_range (gstbuffer, idx, length, + &buffer->map_infos[i], flags)) + goto cannot_map; - buffer->planes[i] = buffer->map_infos[i].data + skip; + buffer->planes[i] = buffer->map_infos[i].data + skip; + } } }