[vdr] [1.3.40] Fast channel switching resets
Klaus Schmidinger
Klaus.Schmidinger at cadsoft.de
Sat Jan 28 12:35:19 CET 2006
Oliver Endriss wrote:
> ...Klaus Schmidinger wrote:
>
>>Oliver Endriss wrote:
>>
>>>Klaus Schmidinger wrote:
>>>
>>>
>>>>Please put a line like
>>>>
>>>> fprintf(stderr, "%04X\n", Key);
>>>>
>>>>at the beginning of cDisplayChannel::ProcessKey() and check
>>>>whether, when you press the Up key, hold it down for a while
>>>>and finally release it, you get
>>>>
>>>>0000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>8000
>>>>4000
>>>>
>>>>The important thing is that there is not a single 0000 between
>>>>all the 8000. If you do get an interruption there, then you
>>>>should trace that back to where it comes from.
>>>
>>>
>>>Ok, here is the log from holding down the 'up' key.
>>>
>>>/dev/input/event2: press 0000000100010021 <-- debug output remote plugin: 'up' key pressed
>>>50 0000 <-- (cDisplayChannel::ProcessKey 1st value = lastTime.Elapsed(), 2nd value = Key
>>>307 0032
>>>323 0032
>>>339 0032
>>>355 0032
>>>371 0032
>>>387 0032
>>>403 0032
>>>/dev/input/event2: repeat 0000000100010021 <-- key repeat kicks-in
>>>404 8000
>>>107 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>92 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>75 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>56 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>68 8000
>>>75 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>56 8000
>>>75 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>64 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>79 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>64 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>66 8000
>>>73 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>56 8000
>>>83 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>71 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>75 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>71 8000
>>>76 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>56 8000
>>>76 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>55 8000
>>>/dev/input/event2: repeat 0000000100010021
>>>60 8000
>>>71 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>56 8000
>>>79 0032
>>>/dev/input/event2: repeat 0000000100010021
>>>56 8000
>>>79 0032
>>>71 0032
>>>87 0032
>>>103 0032
>>>119 0032
>>>135 0032
>>>152 0032
>>>/dev/input/event2: release 0000000100010021 <-- key released
>>>155 4000
>>>540 0032
>>>556 0032
>>>572 0032
>>>588 0032
>>>604 0032
>>>621 0032
>>>636 0032
>>>...
>>>4940 0032
>>>4956 0032
>>>4972 0032
>>>4989 0032
>>>5004 0032
>>>
>>>The 0032 (kNone) keys look suspicious to me.
>>>The are _not_ created by the remote plugin.
>>>
>>>Oliver
>>
>>Well, then they must be created by something else.
>>Here's the same output on my system:
>>
>> 56 0000 <--- Up key pressed
>> 605 8000 <--- right the next Key is kUp|k_Repeat, no intermittent kNone
>> 74 8000
>> 73 8000
>> 76 8000
>> 72 8000
>> 72 8000
>> 73 8000
>> 71 8000
>> 72 8000
>> 72 8000
>> 72 8000
>> 71 8000
>> 67 8000
>> 68 8000
>> 132 8000
>> 72 8000
>> 52 8000
>> 44 8000 lots of kUp|k_Repeat, without any intermittent kNone
>> 52 8000
>> 52 8000
>> 51 8000
>> 44 8000
>> 28 8000
>> 52 8000
>> 72 8000
>> 80 8000
>> 73 8000
>> 59 8000
>> 52 8000
>> 32 8000
>> 52 8000
>> 44 8000
>> 28 8000
>> 32 8000
>> 71 8000
>> 76 8000
>> 71 8000
>> 72 8000
>> 51 8000
>> 52 4000 <--- kUp|k_Release
>>1034 0032 <--- these kNone are normal
>>1058 0032
>>1082 0032
>>1106 0032
>>1130 0032
>>1154 0032
>>1178 0032
>>1202 0032
>>1226 0032
>>1250 0032
>>
>>There must be something on your system that creates these intermittent
>>kNone key events, but I don't see where that would be happening in
>>plain vanilla VDR.
>
>
> It happens with vanilla vdr plus remote plugin. No patches.
>
>
>> From the sequence of kNone right after you pressed the Up key
>>it looks like something is inserting kNone events every 16 ms.
>
>
> On my system vdr is creating kNone events every 16ms as long as the
> channel info is displayed. On your system this interval seems to be
> 24ms.
>
> My system uses a preemtible kernel. HZ is set to 250. Non-NPTL system.
>
> Could you please tell me where these 'normal' events come from?
> I'd like to change the interval and see whether it affects the problem.
>
> Oliver
I believe I found what's causing this.
In cInterface::GetKey() the line
return cRemote::Get(Wait ? 1000 : 10);
tries to fetch the next keypress from the remote control,
and waits at most 10ms in this case. If the remote control
doesn't provide another keypress within this timeout, cRemote::Get()
returns kNone.
I was able to reproduce this here while debugging the case where
the screen gets dark for a moment if pressing "Down" while on
channel 1. Setting the timeout to 100ms, as in
return cRemote::Get(Wait ? 1000 : 100);
fixed it for me.
Can you confim this?
Klaus
More information about the vdr
mailing list