Когда телефон лежит в кармане, а я с него слушаю музыку - он моргает подсветкой при смене треков в плеере. Во-первых, мне это не нравится, во-вторый - это совершенно лишний раз жрет батарейку.
Первое и самое интересное - почему подсветка вообще дергается при смене трека? Потомучто есть такая штука, как power constraints, которая регулирует, насколько далеко устройству можно уходить в сберегающих режимах. Вполне естественно, что телефон не может играть музыку, когда он находится в слипе.
Исходя из этого здравого рассуждения, медиасервер запрещает уходить в слип, когда проигрывает что-то. Когда проигрываение останавливается, плеер снимает разрешение.
И тут закрадываются внеземная логика работников тролльтех: при смене power constraint, нужно включить подсветку. При чем это делает кто-то аж изнутри QtGui, а код там загадочен.
Делаю ход конем: режим меняется не тогда, когда меняется состояние плеера "играю-неиграю", а через две секунды. Проверяю: не работает. То есть работает, но подсветка все равно мигает на смене трека. Для проверки, убираю из медиасервера управление питанием - моргает. Магия... Стоп, магии же не бывает.
Смотрю код медиадвижка, благо багов там обычно есть: он питание вообще не трогает. Смотрю код плеера и вижу чудеса: плеер запрещает выключать подсветку, когда проигрывает видео. Это меня не касается - видео я не смотрю. Для проверки, убираю из плеера код управление питанием -
не моргает. Оппа, "
связистор опять выловил что-то за хвост из болота", как сказал тридемоделятор azcapone.
Судя по коду, в плеере есть некий "медиавиджет", который создается при наличии видео. Если виджет есть - питание трогаем, если нету - не трогаем. Но виджета же нету, почему тогда мограет? Нахожу замечательный факт:
notifier = new QMediaControlNotifier( QMediaVideoControl::name(), this );
connect( notifier, SIGNAL(valid()), this, SLOT(activateVideo()) );
connect( notifier, SIGNAL(invalid()), this, SLOT(deactivateVideo()) );
при чем в
deactivateVideo() дергается управление питанием без проверки виджета.
Опять патч в одну строку, а началось все с того, что я хотел замерить, сколько телефон живет от одного заряда батареи.