Skip to content

Commit

Permalink
Корректировка запоминания/восстановления позиции некоторых DVD.
Browse files Browse the repository at this point in the history
  • Loading branch information
Aleksoid1978 committed Jun 22, 2024
1 parent 8003cc7 commit 2b6f83b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 15 deletions.
35 changes: 21 additions & 14 deletions src/apps/mplayerc/MainFrm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3242,7 +3242,7 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
OpenDVDData* pDVDData = dynamic_cast<OpenDVDData*>(m_lastOMD.get());
ASSERT(pDVDData);

CString Domain('-');
CString Domain(L'-');

switch (m_iDVDDomain) {
case DVD_DOMAIN_FirstPlay:
Expand Down Expand Up @@ -3343,19 +3343,21 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
// if the playback is reinitialized so we clear the saved state
pDVDData->pDvdState.Release();
}
else if (s.bKeepHistory && s.bRememberDVDPos) {
else if (s.bKeepHistory && s.bRememberDVDPos && m_SessionInfo.DVDTitle > 0) {
// restore DVD-Video position
hr = m_pDVDC->PlayTitle(m_SessionInfo.DVDTitle, DVD_CMD_FLAG_Flush, nullptr);
hr = m_pDVDC->PlayTitle(m_SessionInfo.DVDTitle, DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
if (SUCCEEDED(hr)) {
hr = m_pDVDC->Resume(DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
if (SUCCEEDED(hr)) {
hr = m_pDVDC->PlayAtTime(&m_SessionInfo.DVDTimecode, DVD_CMD_FLAG_Flush, nullptr);
} else {
hr = m_pDVDC->PlayChapterInTitle(m_SessionInfo.DVDTitle, 1, DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
if (m_SessionInfo.DVDTimecode.bSeconds > 0 || m_SessionInfo.DVDTimecode.bMinutes > 0 || m_SessionInfo.DVDTimecode.bHours > 0 || m_SessionInfo.DVDTimecode.bFrames > 0) {
hr = m_pDVDC->Resume(DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
if (SUCCEEDED(hr)) {
hr = m_pDVDC->PlayAtTime(&m_SessionInfo.DVDTimecode, DVD_CMD_FLAG_Flush, nullptr);
if (FAILED(hr)) {
hr = m_pDVDC->PlayAtTimeInTitle(m_SessionInfo.DVDTitle, &m_SessionInfo.DVDTimecode, DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
} else {
hr = m_pDVDC->PlayChapterInTitle(m_SessionInfo.DVDTitle, 1, DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
if (SUCCEEDED(hr)) {
hr = m_pDVDC->PlayAtTime(&m_SessionInfo.DVDTimecode, DVD_CMD_FLAG_Flush, nullptr);
if (FAILED(hr)) {
hr = m_pDVDC->PlayAtTimeInTitle(m_SessionInfo.DVDTitle, &m_SessionInfo.DVDTimecode, DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
}
}
}
}
Expand Down Expand Up @@ -3392,6 +3394,8 @@ LRESULT CMainFrame::OnGraphNotify(WPARAM wParam, LPARAM lParam)
m_OSD.DebugMessage(L"%s", Domain);
}

m_iDVDTitleForHistory = m_iDVDTitle;

if (!m_bValidDVDOpen) {
m_bValidDVDOpen = true;
m_pDVDC->ShowMenu(DVD_MENU_Title, DVD_CMD_FLAG_Block | DVD_CMD_FLAG_Flush, nullptr);
Expand Down Expand Up @@ -10266,7 +10270,7 @@ void CMainFrame::AddFavorite(bool bDisplayMessage/* = false*/, bool bShowDialog/
}
else if (GetPlaybackMode() == PM_DVD) {
// RememberPos
if (s.bFavRememberPos) {
if (s.bFavRememberPos && m_iDVDTitleForHistory > 0) {
CDVDStateStream stream;
stream.AddRef();
CComPtr<IDvdState> pStateData;
Expand All @@ -10276,7 +10280,7 @@ void CMainFrame::AddFavorite(bool bDisplayMessage/* = false*/, bool bShowDialog/
&& SUCCEEDED(OleSaveToStream(pPersistStream, (IStream*)&stream))) {
sesInfo.DVDState = stream.m_data;
}
sesInfo.DVDTitle = m_iDVDTitle;
sesInfo.DVDTitle = m_iDVDTitleForHistory;
sesInfo.DVDTimecode = m_SessionInfo.DVDTimecode;
}
AfxGetMyApp()->m_FavoritesFile.AppendFavorite(sesInfo);
Expand Down Expand Up @@ -14572,6 +14576,9 @@ void CMainFrame::CloseMediaPrivate()

m_bIsLiveOnline = false;

m_iDVDTitle = 0;
m_iDVDTitleForHistory = 0;

DLog(L"CMainFrame::CloseMediaPrivate() : end");
}

Expand Down Expand Up @@ -20873,8 +20880,8 @@ void CMainFrame::SaveHistory()
}
historyFile.SaveSessionInfo(m_SessionInfo);
} else if (GetPlaybackMode() == PM_DVD && m_SessionInfo.DVDId) {
if (s.bRememberDVDPos) {
m_SessionInfo.DVDTitle = m_iDVDTitle;
if (s.bRememberDVDPos && m_iDVDTitleForHistory > 0) {
m_SessionInfo.DVDTitle = m_iDVDTitleForHistory;

CDVDStateStream stream;
stream.AddRef();
Expand Down
3 changes: 2 additions & 1 deletion src/apps/mplayerc/MainFrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,8 @@ class CMainFrame : public CFrameWnd, public CDropTarget, public CDPI

SessionInfo m_SessionInfo;
DVD_DOMAIN m_iDVDDomain;
DWORD m_iDVDTitle;
DWORD m_iDVDTitle = 0;
DWORD m_iDVDTitleForHistory = 0;
bool m_bDVDRestorePos = false;
std::vector<CStringW> m_RecentPaths; // used in SetupRecentFilesSubMenu and OnRecentFile
std::list<SessionInfo> m_FavFiles; // used in SetupFavoritesSubMenu and OnFavoritesFile
Expand Down

0 comments on commit 2b6f83b

Please sign in to comment.