Index: libmythtv/DVDRingBuffer.cpp =================================================================== --- libmythtv/DVDRingBuffer.cpp (revision 22859) +++ libmythtv/DVDRingBuffer.cpp (working copy) @@ -57,7 +57,7 @@ m_dvdname(NULL), m_serialnumber(NULL), m_seeking(false), m_seektime(0), m_currentTime(0), - m_parent(0) + m_parent(0), m_isInMenu(false) { memset(&m_dvdMenuButton, 0, sizeof(AVSubtitle)); memset(m_dvdBlockWriteBuf, 0, sizeof(char) * DVD_BLOCK_SIZE); @@ -87,10 +87,14 @@ } } -bool DVDRingBufferPriv::IsInMenu(void) const +bool DVDRingBufferPriv::IsInMenu(bool update) { if (m_dvdnav) - return (!dvdnav_is_domain_vts(m_dvdnav)); + { + if (update) + return ((m_isInMenu = !dvdnav_is_domain_vts(m_dvdnav))); + return m_isInMenu; + } return true; } @@ -136,7 +140,7 @@ QString("Seek() to time %1 failed").arg(time)); return -1; } - else if (!IsInMenu() && !m_runningCellStart) + else if (!IsInMenu(true) && !m_runningCellStart) { m_gotStop = false; if (time > 0 && ffrewSkip == 1) @@ -146,7 +150,7 @@ return m_currentpos; } -void DVDRingBufferPriv::GetDescForPos(QString &desc) const +void DVDRingBufferPriv::GetDescForPos(QString &desc) { if (IsInMenu()) { @@ -249,7 +253,6 @@ int needed = sz; char *dest = (char*) data; int offset = 0; - if (m_gotStop) { VERBOSE(VB_IMPORTANT, LOC + "safe_read: called after DVDNAV_STOP"); @@ -262,7 +265,7 @@ dvdStat = dvdnav_get_next_cache_block( m_dvdnav, &blockBuf, &dvdEvent, &dvdEventSize); - + bool isInMenu = IsInMenu(true); if (dvdStat == DVDNAV_STATUS_ERR) { VERBOSE(VB_IMPORTANT, QString("Error reading block from DVD: %1") @@ -341,8 +344,8 @@ m_cellRepeated = false; m_menupktpts = 0; InStillFrame(false); - - if (IsInMenu()) + + if (isInMenu) { if (m_parent) m_parent->HideDVDButton(true); @@ -375,7 +378,7 @@ ClearSubtitlesOSD(); - if (IsInMenu()) + if (isInMenu) { m_buttonstreamid = 32; int aspect = dvdnav_get_video_aspect(m_dvdnav); @@ -430,7 +433,7 @@ m_vobid = dsi->dsi_gi.vobu_vob_idn; m_cellid = dsi->dsi_gi.vobu_c_idn; if ((m_lastvobid == m_vobid) && (m_lastcellid == m_cellid) - && IsInMenu()) + && isInMenu) { m_cellRepeated = true; } Index: libmythtv/DVDRingBuffer.h =================================================================== --- libmythtv/DVDRingBuffer.h (revision 22859) +++ libmythtv/DVDRingBuffer.h (working copy) @@ -34,11 +34,11 @@ // gets int GetTitle(void) const { return m_title; } int GetPart(void) const { return m_part; } - bool IsInMenu(void) const; + bool IsInMenu(bool update =false); bool IsOpen(void) const { return m_dvdnav; } long long GetReadPosition(void); long long GetTotalReadPosition(void) { return m_titleLength; } - void GetDescForPos(QString &desc) const; + void GetDescForPos(QString &desc); void GetPartAndTitle(int &_part, int &_title) const { _part = m_part; _title = m_title; } uint GetTotalTimeOfTitle(void); @@ -134,6 +134,7 @@ bool m_cellHasStillFrame; bool m_audioStreamsChanged; bool m_dvdWaiting; + bool m_isInMenu; long long m_titleLength; MythTimer m_stillFrameTimer; uint32_t m_clut[16];