[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


 1. Inserted VERBOSE debugging statements in
 MythMainWindow::TranslateKeyPress (line 622
 libs/libmythui/mythmainwindow.cpp) and LircClient::Process (line 61

    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).

    After LiveTV has stopped responding the following condition is true.

 2057:    if (dialogname != "" && GetOSD() &&
 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))


 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

    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


 4. A grep for OSDFunctionalType gave me this enum in libs/libmythtv/osd.h:

    enum OSDFunctionalType
      kOSDFunctionalType_Default = 0,

 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/>

More information about the mythtv-commits mailing list