diff --git a/mythtv/libs/libmythtv/DVDRingBuffer.cpp b/mythtv/libs/libmythtv/DVDRingBuffer.cpp
index 6550fcf..b6f4399 100644
a
|
b
|
DVDRingBufferPriv::DVDRingBufferPriv() |
50 | 50 | m_lastcellid(0), m_vobid(0), |
51 | 51 | m_lastvobid(0), m_cellRepeated(false), |
52 | 52 | m_buttonstreamid(0), m_runningCellStart(false), |
53 | | m_runSeekCellStart(false), |
54 | 53 | m_menupktpts(0), m_curAudioTrack(0), |
55 | 54 | m_curSubtitleTrack(0), |
56 | 55 | m_autoselectsubtitle(true), |
… |
… |
bool DVDRingBufferPriv::IsSameChapter(int tmpcellid, int tmpvobid) |
1252 | 1251 | return false; |
1253 | 1252 | } |
1254 | 1253 | |
1255 | | /** \brief Run SeekCellStart its okay to run seekcellstart |
1256 | | ** ffmpeg for some reason doesnt' output menu spu if seekcellstart |
| 1254 | /** \brief Run SeekCellStart. |
| 1255 | ** ffmpeg for some reason does not output menu spu if seekcellstart |
1257 | 1256 | ** is started too soon after a video codec/resolution change |
1258 | 1257 | */ |
1259 | 1258 | void DVDRingBufferPriv::RunSeekCellStart(void) |
1260 | 1259 | { |
1261 | | if (!m_runSeekCellStart) |
1262 | | return; |
1263 | | |
1264 | 1260 | bool ret = true; |
1265 | 1261 | if (NumMenuButtons() > 0 && !m_buttonExists) |
1266 | 1262 | ret = false; |
1267 | 1263 | |
1268 | 1264 | if (ret) |
1269 | | { |
1270 | 1265 | ret = SeekCellStart(); |
1271 | | m_runSeekCellStart = false; |
1272 | | } |
1273 | 1266 | } |
1274 | 1267 | |
1275 | 1268 | /** \brief seek the beginning of a dvd cell |
diff --git a/mythtv/libs/libmythtv/DVDRingBuffer.h b/mythtv/libs/libmythtv/DVDRingBuffer.h
index 2022aa5..39d8ef6 100644
a
|
b
|
class MPUBLIC DVDRingBufferPriv |
107 | 107 | void JumpToTitle(bool change) { m_jumptotitle = change; } |
108 | 108 | void SetDVDSpeed(void); |
109 | 109 | void SetDVDSpeed(int speed); |
110 | | void SetRunSeekCellStart(bool change) { m_runSeekCellStart = change; } |
111 | 110 | |
112 | 111 | void SetParent(NuppelVideoPlayer *p) { m_parent = p; } |
113 | 112 | |
114 | | |
115 | 113 | protected: |
116 | 114 | dvdnav_t *m_dvdnav; |
117 | 115 | unsigned char m_dvdBlockWriteBuf[DVD_BLOCK_SIZE]; |
… |
… |
class MPUBLIC DVDRingBufferPriv |
155 | 153 | bool m_cellRepeated; |
156 | 154 | int m_buttonstreamid; |
157 | 155 | bool m_runningCellStart; |
158 | | bool m_runSeekCellStart; |
159 | 156 | long long m_menupktpts; |
160 | 157 | int m_curAudioTrack; |
161 | 158 | int8_t m_curSubtitleTrack; |
diff --git a/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp b/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
index b27a757..f80ab51 100644
a
|
b
|
void NuppelVideoPlayer::ReinitVideo(void) |
827 | 827 | DisableCaptions(textDisplayMode, false); |
828 | 828 | SetCaptionsEnabled(true, false); |
829 | 829 | } |
830 | | |
831 | | if (player_ctx->buffer->InDVDMenuOrStillFrame()) |
832 | | player_ctx->buffer->DVD()->SetRunSeekCellStart(true); |
833 | 830 | } |
834 | 831 | |
835 | 832 | QString NuppelVideoPlayer::ReinitAudio(void) |
diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
index 1183a4a..c332004 100644
a
|
b
|
bool AvFormatDecoder::GetFrame(DecodeType decodetype) |
3556 | 3558 | bool cellChanged = ringBuffer->DVD()->CellChanged(); |
3557 | 3559 | bool inDVDStill = ringBuffer->DVD()->InStillFrame(); |
3558 | 3560 | bool inDVDMenu = ringBuffer->DVD()->IsInMenu(); |
| 3561 | int storedPktCount = storedPackets.count(); |
3559 | 3562 | selectedVideoIndex = 0; |
3560 | 3563 | if (dvdTitleChanged) |
3561 | 3564 | { |
3562 | | if ((storedPackets.count() > 10 && !decodeStillFrame) || |
| 3565 | if ((storedPktCount > 10 && !decodeStillFrame) || |
3563 | 3566 | decodeStillFrame) |
3564 | 3567 | { |
3565 | 3568 | storevideoframes = false; |
… |
… |
bool AvFormatDecoder::GetFrame(DecodeType decodetype) |
3573 | 3576 | { |
3574 | 3577 | storevideoframes = false; |
3575 | 3578 | |
3576 | | if (storedPackets.count() < 2 && !decodeStillFrame) |
| 3579 | if (storedPktCount < 2 && !decodeStillFrame) |
3577 | 3580 | storevideoframes = true; |
3578 | 3581 | |
3579 | 3582 | VERBOSE(VB_PLAYBACK+VB_EXTRA, QString("DVD Playback Debugging " |
3580 | 3583 | "inDVDMenu %1 storedPacketcount %2 dvdstill %3") |
3581 | | .arg(inDVDMenu).arg(storedPackets.count()).arg(inDVDStill)); |
3582 | | |
3583 | | if (inDVDMenu && storedPackets.count() > 0) |
3584 | | ringBuffer->DVD()->SetRunSeekCellStart(false); |
3585 | | else if (storedPackets.count() == 0) |
| 3584 | .arg(inDVDMenu).arg(storedPktCount).arg(inDVDStill)); |
| 3585 | |
| 3586 | if (inDVDStill && (storedPktCount == 0) && |
| 3587 | (GetNVP()->getVideoOutput()->ValidVideoFrames() == 0)) |
| 3588 | { |
3586 | 3589 | ringBuffer->DVD()->RunSeekCellStart(); |
| 3590 | } |
3587 | 3591 | } |
3588 | 3592 | if (GetNVP()->AtNormalSpeed() && |
3589 | 3593 | ((cellChanged) || (lastdvdtitle != dvdtitle))) |