@@ -227,10 +227,13 @@ static int ring_buffer_set_ipc_params(struct ring_buffer *ring_buffer,
227227 if (ring_buffer -> _hw_params_configured && !force_update )
228228 return 0 ;
229229
230- ring_buffer -> audio_stream_params -> frame_fmt = params -> frame_fmt ;
231- ring_buffer -> audio_stream_params -> rate = params -> rate ;
232- ring_buffer -> audio_stream_params -> channels = params -> channels ;
233- ring_buffer -> audio_stream_params -> buffer_fmt = params -> buffer_fmt ;
230+ struct sof_audio_stream_params * audio_stream_params =
231+ audio_buffer_get_stream_params (& ring_buffer -> audio_buffer );
232+
233+ audio_stream_params -> frame_fmt = params -> frame_fmt ;
234+ audio_stream_params -> rate = params -> rate ;
235+ audio_stream_params -> channels = params -> channels ;
236+ audio_stream_params -> buffer_fmt = params -> buffer_fmt ;
234237
235238 ring_buffer -> _hw_params_configured = true;
236239
@@ -271,9 +274,12 @@ static const struct sink_ops ring_buffer_sink_ops = {
271274 .audio_set_ipc_params = ring_buffer_set_ipc_params_sink ,
272275};
273276
277+ static const struct audio_buffer_ops audio_buffer_ops = {
278+ .free = ring_buffer_free ,
279+ };
280+
274281struct ring_buffer * ring_buffer_create (size_t min_available , size_t min_free_space , uint32_t flags ,
275- uint32_t id ,
276- struct sof_audio_stream_params * audio_stream_params )
282+ uint32_t id )
277283{
278284 struct ring_buffer * ring_buffer ;
279285
@@ -288,19 +294,22 @@ struct ring_buffer *ring_buffer_create(size_t min_available, size_t min_free_spa
288294 return NULL ;
289295
290296 ring_buffer -> _flags = flags ;
291- ring_buffer -> audio_stream_params = audio_stream_params ;
292297
293- CORE_CHECK_STRUCT_INIT (& ring_buffer -> audio_buffer , flags & RING_BUFFER_MODE_SHARED );
294-
295- /* initiate structures */
296- source_init (audio_buffer_get_source (& ring_buffer -> audio_buffer ), & ring_buffer_source_ops ,
297- ring_buffer -> audio_stream_params );
298- sink_init (audio_buffer_get_sink (& ring_buffer -> audio_buffer ), & ring_buffer_sink_ops ,
299- ring_buffer -> audio_stream_params );
298+ /* init base structure. The audio_stream_params is NULL because ring_buffer
299+ * is currently used as a secondary buffer for DP only
300+ *
301+ * pointer in audio_buffer will be overwritten when attaching ring_buffer as a
302+ * secondary buffer
303+ */
304+ audio_buffer_init (& ring_buffer -> audio_buffer , BUFFER_TYPE_RING_BUFFER ,
305+ flags & RING_BUFFER_MODE_SHARED , & ring_buffer_source_ops ,
306+ & ring_buffer_sink_ops , & audio_buffer_ops , NULL );
300307
301308 /* set obs/ibs in sink/source interfaces */
302- sink_set_min_free_space (& ring_buffer -> audio_buffer ._sink_api , min_free_space );
303- source_set_min_available (& ring_buffer -> audio_buffer ._source_api , min_available );
309+ sink_set_min_free_space (audio_buffer_get_sink (& ring_buffer -> audio_buffer ),
310+ min_free_space );
311+ source_set_min_available (audio_buffer_get_source (& ring_buffer -> audio_buffer ),
312+ min_available );
304313
305314 uint32_t max_ibs_obs = MAX (min_available , min_free_space );
306315
@@ -315,15 +324,10 @@ struct ring_buffer *ring_buffer_create(size_t min_available, size_t min_free_spa
315324 if (!ring_buffer -> _data_buffer )
316325 goto err ;
317326
318- ring_buffer -> audio_stream_params -> id = id ;
319327 tr_info (& ring_buffer_tr , "Ring buffer created, id: %u shared: %u min_available: %u min_free_space %u, size %u" ,
320328 id , ring_buffer_is_shared (ring_buffer ), min_available , min_free_space ,
321329 ring_buffer -> data_buffer_size );
322330
323- /* set common buffer api */
324- ring_buffer -> audio_buffer .free = ring_buffer_free ;
325- ring_buffer -> audio_buffer .buffer_type = BUFFER_TYPE_RING_BUFFER ;
326-
327331 /* return a pointer to allocated structure */
328332 return ring_buffer ;
329333err :
0 commit comments