diff --git a/doc/changes/latest.rst b/doc/changes/latest.rst index c7e159aa8..596dca4a8 100644 --- a/doc/changes/latest.rst +++ b/doc/changes/latest.rst @@ -21,3 +21,4 @@ Version 1.4 - Fix handling of warnings through the logger (:pr:`243` by `Mathieu Scheltienne`_) - Fix handling of CLI arguments through :class:`~mne_lsl.player.PlayerLSL` entry-point (:pr:`246` by `Mathieu Scheltienne`_) +- Fix push operation by a :class:`~mne_lsl.player.PlayerLSL` with a ``chunk_size`` set to 1 to use :meth:`mne_lsl.lsl.StreamOutlet.push_sample` instead of :meth:`mne_lsl.lsl.StreamOutlet.push_chunk` (:pr:`257` by `Mathieu Scheltienne`_) diff --git a/mne_lsl/player/player_lsl.py b/mne_lsl/player/player_lsl.py index d7f5552a6..6c06900db 100644 --- a/mne_lsl/player/player_lsl.py +++ b/mne_lsl/player/player_lsl.py @@ -271,7 +271,10 @@ def _stream(self) -> None: stop, self._target_timestamp, ) - self._outlet.push_chunk(data, timestamp=self._target_timestamp) + if self._chunk_size == 1: + self._outlet.push_sample(data[0, :], timestamp=self._target_timestamp) + else: + self._outlet.push_chunk(data, timestamp=self._target_timestamp) self._stream_annotations(start, stop, start_timestamp) except Exception as exc: logger.error("%s: Stopping due to exception: %s", self._name, exc) diff --git a/mne_lsl/player/tests/test_player_lsl.py b/mne_lsl/player/tests/test_player_lsl.py index bb563e5d0..7ffc76216 100644 --- a/mne_lsl/player/tests/test_player_lsl.py +++ b/mne_lsl/player/tests/test_player_lsl.py @@ -1,3 +1,4 @@ +import os import time from datetime import datetime, timezone from pathlib import Path @@ -411,3 +412,19 @@ def test_player_n_repeat_invalid(raw): Player(raw, n_repeat=-1) with pytest.raises(TypeError, match="must be an integer"): Player(raw, n_repeat="1") + + +@pytest.mark.skipif( + os.getenv("GITHUB_ACTIONS", "") == "true", reason="Unreliable on CIs." +) +def test_player_push_sample(fname): + """Test pushing individual sample with chunk_size=1.""" + name = "Player-test_player_push_sample" + streams = resolve_streams(timeout=0.1) + assert len(streams) == 0 + with Player(fname, name=name, chunk_size=1): + streams = resolve_streams() + assert len(streams) == 1 + assert streams[0].name == name + streams = resolve_streams(timeout=0.1) + assert len(streams) == 0