On 27.03.2018 04:42, Wu Zhigang wrote:
Add the state check in volume_copy function, this can low down the xrun error possibility: For example: when firmware receive the PAUSE command, the HOST and VOLUME component are set to PAUSE state. at this time DMA IRQ happen, the pipeline is scheduled. host_copy() function will be called,
Could this change be done to scheduler instead to avoid in every component need to implement this?
Thanks, Seppo
but jump out immediately because of PAUSE state. but volume_copy() did not have this state check, the xrun will happen.
Signed-off-by: Wu Zhigang zhigang.wu@linux.intel.com Reviewed-by: Keyon Jie yang.jie@linux.intel.com
Tested with apl-gpmrb board
kernel: https://github.com/plbossart/sound.git branch: topic/sof-v4.14 4881a4bd906f8b52bebd209b88ff920005550d53
firmware: git://git.alsa-project.org/sound-open-firmware.git branch: 1.1-stable 1f8c6c4d2018aac6994c75f60cee54765435d424
tools: branch: 1.1-stable cc91c73aa3e91eea35abdeb76d578b97f718feff
src/audio/volume.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/src/audio/volume.c b/src/audio/volume.c index df926c5..2652765 100644 --- a/src/audio/volume.c +++ b/src/audio/volume.c @@ -836,6 +836,9 @@ static int volume_copy(struct comp_dev *dev)
tracev_volume("cpy");
- if (dev->state != COMP_STATE_ACTIVE)
return 0;
- /* volume components will only ever have 1 source and 1 sink buffer */ source = list_first_item(&dev->bsource_list, struct comp_buffer, sink_list); sink = list_first_item(&dev->bsink_list, struct comp_buffer, source_list);