Skip to content

Commit 79151c1

Browse files
DP: add "get Latest Feeding Time" stub to sink_api
this commit adds a stubbed "get_LFT" operation to sink_api Stub of the function is needed because, of circular dependency. As described, calculation of LFT requires calculation of (next) module deadline, which requires calculation of (next) buffer LFT Signed-off-by: Marcin Szkudlinski <marcin.szkudlinski@intel.com>
1 parent 8fd1dac commit 79151c1

5 files changed

Lines changed: 24 additions & 2 deletions

File tree

src/audio/buffers/audio_buffer.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,14 @@ int audio_buffer_source_set_alignment_constants(struct sof_source *source,
182182
return 0;
183183
}
184184

185+
/**
186+
* this is stub, always return Last Feeding Time - 0, meaning "NOW"
187+
*/
188+
uint32_t audio_buffer_sink_get_lft(struct sof_sink *sink)
189+
{
190+
return 0;
191+
}
192+
185193
void audio_buffer_init(struct sof_audio_buffer *buffer, uint32_t buffer_type, bool is_shared,
186194
const struct source_ops *source_ops, const struct sink_ops *sink_ops,
187195
const struct audio_buffer_ops *audio_buffer_ops,

src/audio/buffers/comp_buffer.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,15 @@ static const struct sink_ops comp_buffer_sink_ops = {
177177
.audio_set_ipc_params = audio_buffer_sink_set_ipc_params,
178178
.on_audio_format_set = audio_buffer_sink_on_audio_format_set,
179179
.set_alignment_constants = audio_buffer_sink_set_alignment_constants,
180+
.get_lft = audio_buffer_sink_get_lft,
180181
};
181182

182183
static const struct audio_buffer_ops audio_buffer_ops = {
183184
.free = comp_buffer_free,
184185
.reset = comp_buffer_reset,
185186
.audio_set_ipc_params = comp_buffer_set_ipc_params,
186187
.on_audio_format_set = comp_buffer_format_set,
187-
.set_alignment_constants = comp_buffer_set_alignment_constants
188+
.set_alignment_constants = comp_buffer_set_alignment_constants,
188189
};
189190

190191
static struct comp_buffer *buffer_alloc_struct(void *stream_addr, size_t size,

src/audio/buffers/ring_buffer.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,12 @@ static const struct sink_ops ring_buffer_sink_ops = {
273273
.audio_set_ipc_params = audio_buffer_sink_set_ipc_params,
274274
.on_audio_format_set = audio_buffer_sink_on_audio_format_set,
275275
.set_alignment_constants = audio_buffer_sink_set_alignment_constants,
276+
.get_lft = audio_buffer_sink_get_lft,
276277
};
277278

278279
static const struct audio_buffer_ops audio_buffer_ops = {
279280
.free = ring_buffer_free,
280-
.reset = ring_buffer_reset
281+
.reset = ring_buffer_reset,
281282
};
282283

283284
struct ring_buffer *ring_buffer_create(struct comp_dev *dev, size_t min_available,

src/include/module/audio/sink_api.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ struct sink_ops {
7777
*/
7878
int (*commit_buffer)(struct sof_sink *sink, size_t commit_size);
7979

80+
/**
81+
* get latest feeding time for this sink, result is a number of microseconds since "NOW"
82+
* where "now" means a start of last LL cycle, as described in zephyr_dp_schedule.c
83+
*/
84+
uint32_t (*get_lft)(struct sof_sink *sink);
85+
8086
/**
8187
* OPTIONAL: Notification to the sink implementation about changes in audio format
8288
*
@@ -348,4 +354,9 @@ static inline struct processing_module *sink_get_bound_module(struct sof_sink *s
348354
return sink->bound_module;
349355
}
350356

357+
static inline uint32_t sink_get_last_feeding_time(struct sof_sink *sink)
358+
{
359+
return sink->ops->get_lft(sink);
360+
}
361+
351362
#endif /* __MODULE_AUDIO_SINK_API_H__ */

src/include/sof/audio/audio_buffer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,5 +337,6 @@ int audio_buffer_sink_on_audio_format_set(struct sof_sink *sink);
337337
int audio_buffer_sink_set_alignment_constants(struct sof_sink *sink,
338338
const uint32_t byte_align,
339339
const uint32_t frame_align_req);
340+
uint32_t audio_buffer_sink_get_lft(struct sof_sink *sink);
340341

341342
#endif /* __SOF_AUDIO_BUFFER__ */

0 commit comments

Comments
 (0)