[mythtv-commits] Ticket #1452: mythfrontend stops responding to input after channel change
MythTV
mythtv at cvs.mythtv.org
Sat Apr 8 06:15:40 UTC 2006
#1452: mythfrontend stops responding to input after channel change
-----------------------------------+----------------------------------------
Reporter: ihateyou0 at hotmail.com | Owner: ijr
Type: defect | Status: new
Priority: minor | Milestone:
Component: mythtv | Version: 0.19
Severity: medium | Resolution:
-----------------------------------+----------------------------------------
Comment (by johan at vulturest.com):
Here are my findings on this issue (which I experience quite regularly
after random channel changes with DVB-T) which were posted to the mailing
list.
-----
1. Inserted VERBOSE debugging statements in
MythMainWindow::TranslateKeyPress (line 622
libs/libmythui/mythmainwindow.cpp) and LircClient::Process (line 61
libs/libmyth/lirc.cpp)
RESULT:
Debugging continues to be printed each time a key is pressed on either
the remote or the keyboard after LiveTV has ceased to respond
thus indicating Myth is still receiving my input.
-----
2. Inserted VERBOSE statements inside each if block in
TV::ProcessKeypress (line 1853 libs/libmythtv/tv_play.cpp).
RESULT:
After LiveTV has stopped responding the following condition is true.
2057: if (dialogname != "" && GetOSD() &&
GetOSD()->DialogShowing(dialogname))
2058: {
-----
3. Some more debugging indicates that the dialog that the OSD still
thinks is showing is the "channel_timed_out" dialog. Pushing escape
results in the GetOSD->AbortDialog(dialogname) (~ line 2075, give or
take some debugging) and the GetOSD->TurnOffDialog (~ line 2079) both
geting called. The routine then steps into the following loop from which
it never returns (~ line 2157):
while (GetOSD()->DialogShowing(dialogname))
{
usleep(1000);
}
-----
3. So, an OSD issue then, apparently the "channel_timed_out" dialog is
never getting closed. A quick look in libs/libmythtv/osd.cpp shows the
OSD::TurnDialogOff retrieves the current OSDSet and makes a call to
OSDSet::Hide:
void OSDSet::Hide(void)
{
m_timeleft = -1;
m_fadetime = 0;
m_notimeout = false;
m_displaying = false;
if (currentOSDFunctionalType)
{
emit OSDClosed(currentOSDFunctionalType);
currentOSDFunctionalType = 0;
}
}
Debugging in here shows that the "if (currentOSDFunctionalType)" is
never entered as this value is never set to anything other than 0 when a
"channel_timed_out" dialog is created by OSD::NewDialogBox when it calls
OSDSet::Display.
-----
4. A grep for OSDFunctionalType gave me this enum in libs/libmythtv/osd.h:
enum OSDFunctionalType
{
kOSDFunctionalType_Default = 0,
kOSDFunctionalType_PictureAdjust,
kOSDFunctionalType_RecPictureAdjust,
kOSDFunctionalType_SmartForward,
kOSDFunctionalType_TimeStretchAdjust,
kOSDFunctionalType_AudioSyncAdjust
};
This seems to indicate that a functionaltype of 0 is not uncommon and is
in fact the rule, rather than the exception. I fail to understand then
how OSDSet::Hide and also the duplicated code at line 619 of
osdtypes.cpp in OSDSet::Draw can succeed in hiding OSD dialogs.
--
Ticket URL: <http://svn.mythtv.org/trac/ticket/1452>
MythTV <http://www.mythtv.org/>
MythTV
More information about the mythtv-commits
mailing list