[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