Skip to content

Commit 188fffd

Browse files
author
Alex
committed
fix(cec): replace mute toggle with 100 volume-down steps
CEC mute toggle is unreliable — TV may restore previous volume on unmute. Instead, send 100 volume-down steps which guarantees zero volume regardless of TV state. Remove unused _send_mute_toggle(). v1.3.6
1 parent ffa9164 commit 188fffd

File tree

2 files changed

+12
-33
lines changed

2 files changed

+12
-33
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.3.5
1+
1.3.6

viewer/cec_controller.py

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -202,18 +202,18 @@ def set_volume(self, level=None, mute=False):
202202
if not self._ensure_available():
203203
return
204204

205-
# Handle mute toggle
206-
if mute and not self._assumed_mute:
207-
self._send_mute_toggle()
208-
self._assumed_mute = True
209-
self._assumed_volume = 0 # muted = effectively 0
210-
logging.info('CEC: muted TV')
211-
elif not mute and self._assumed_mute:
212-
self._send_mute_toggle()
205+
if mute:
206+
# Instead of mute toggle — 100 steps down (guaranteed 0)
207+
if self._assumed_volume > 0 or not self._assumed_mute:
208+
logging.info('CEC: mute → 100 steps down (was %d)', self._assumed_volume)
209+
self._volume_steps('down', 100)
210+
self._assumed_volume = 0
211+
self._assumed_mute = True
212+
return
213+
214+
# Unmute: already at 0 — just clear the flag
215+
if self._assumed_mute:
213216
self._assumed_mute = False
214-
# After unmute, volume resets to 0 from TV perspective
215-
# (we set it to 0 on mute, so it stays 0)
216-
logging.info('CEC: unmuted TV')
217217

218218
if level is None:
219219
return
@@ -235,31 +235,10 @@ def set_volume(self, level=None, mute=False):
235235
self._assumed_volume = level
236236
except Exception as e:
237237
logging.warning('CEC: volume change failed: %s', e)
238-
# Lost tracking — assume 0 (safest default)
239238
self._assumed_volume = 0
240239

241240
# -- volume internals -------------------------------------------------
242241

243-
def _send_mute_toggle(self):
244-
"""Send a single mute toggle (CEC User Control: Mute)."""
245-
try:
246-
subprocess.run(
247-
[
248-
'cec-ctl', '-d', self._device, '--to', '0',
249-
'--user-control-pressed', 'ui-cmd=mute',
250-
],
251-
capture_output=True, timeout=5,
252-
)
253-
subprocess.run(
254-
[
255-
'cec-ctl', '-d', self._device, '--to', '0',
256-
'--user-control-released',
257-
],
258-
capture_output=True, timeout=5,
259-
)
260-
except Exception as e:
261-
logging.warning('CEC: mute toggle failed: %s', e)
262-
263242
def _volume_steps(self, direction, steps):
264243
"""Send N volume-up or volume-down key presses.
265244

0 commit comments

Comments
 (0)