Advertisement
Guest User

Seb

a guest
Jan 30th, 2010
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.82 KB | None | 0 0
  1. Index: language/English/strings.xml
  2. ===================================================================
  3. --- language/English/strings.xml (revision 27295)
  4. +++ language/English/strings.xml (working copy)
  5. @@ -2168,7 +2168,7 @@
  6. <string id="33083">Enable custom script button</string>
  7.  
  8. <string id="33100">DsPlayer</string>
  9. - <string id="33101">Force Windows xp default renderer VMR9</string>
  10. - <string id="33102">Force Windows Vista and higher default renderer EVR</string>
  11. + <string id="33101">Use VMR9 instead of EVR Renderer</string>
  12. + <string id="33102">Use EVR instead of VMR9 Renderer</string>
  13. <string id="33103">Audio Renderer</string>
  14. </strings>
  15. Index: language/French/strings.xml
  16. ===================================================================
  17. --- language/French/strings.xml (revision 27295)
  18. +++ language/French/strings.xml (working copy)
  19. @@ -2248,4 +2248,9 @@
  20. <string id="33081">Ce fichier est empil�, s�lectionnez la partie que vous souhaitez lire.</string>
  21. <string id="33082">Chemin du script</string>
  22. <string id="33083">Activer le bouton de script personnalis�</string>
  23. +
  24. + <string id="33100">DsPlayer</string>
  25. + <string id="33101">Utiliser VMR9 au lieu d'EVR</string>
  26. + <string id="33102">Utiliser EVR au lieu de VMR9</string>
  27. + <string id="33103">Audio Renderer</string>
  28. </strings>
  29. \ No newline at end of file
  30. Index: xbmc/cores/DSPlayer/DSConfig.cpp
  31. ===================================================================
  32. --- xbmc/cores/DSPlayer/DSConfig.cpp (revision 27295)
  33. +++ xbmc/cores/DSPlayer/DSConfig.cpp (working copy)
  34. @@ -37,6 +37,7 @@
  35. m_pIMpcDecFilter = NULL;
  36. m_pIMpaDecFilter = NULL;
  37. m_pIAMStreamSelect = NULL;
  38. + m_pIAMExtendedSeeking = NULL;
  39. m_pSplitter = NULL;
  40. }
  41.  
  42. @@ -45,6 +46,7 @@
  43. SAFE_RELEASE(m_pIMpaDecFilter);
  44. SAFE_RELEASE(m_pIMpcDecFilter);
  45. SAFE_RELEASE(m_pIAMStreamSelect);
  46. + SAFE_RELEASE(m_pIAMExtendedSeeking);
  47. SAFE_RELEASE(m_pSplitter);
  48.  
  49. for (std::map<long, IAMStreamSelectInfos *>::iterator it = m_pAudioStreams.begin();
  50. @@ -62,6 +64,21 @@
  51. //SAFE_RELEASE(it->second->pUnk);
  52. delete it->second;
  53. }
  54. +
  55. + while (! m_pPropertiesFilters.empty())
  56. + {
  57. + SAFE_RELEASE(m_pPropertiesFilters.back());
  58. + m_pPropertiesFilters.pop_back();
  59. + }
  60. +
  61. + for (std::map<long, ChapterInfos *>::iterator it = m_pChapters.begin();
  62. + it != m_pChapters.end(); ++it)
  63. + {
  64. + //SAFE_RELEASE(it->second->pObj);
  65. + //SAFE_RELEASE(it->second->pUnk);
  66. + delete it->second;
  67. + }
  68. +
  69. }
  70.  
  71. HRESULT CDSConfig::LoadGraph(IFilterGraph2* pGB, IBaseFilter * splitter)
  72. @@ -81,9 +98,12 @@
  73. {
  74. GetMpcVideoDec(pBF);
  75. GetMpaDec(pBF);
  76. + LoadPropertiesPage(pBF);
  77. }
  78. EndEnumFilters(pEF, pBF)
  79. - LoadAudioStreams();
  80. + LoadStreams();
  81. + if (! LoadChapters())
  82. + CLog::Log(LOGNOTICE, "%s No chapters found", __FUNCTION__);
  83. }
  84.  
  85. HRESULT CDSConfig::UnloadGraph()
  86. @@ -117,7 +137,7 @@
  87. return hr;
  88. }
  89.  
  90. -bool CDSConfig::LoadAudioStreams()
  91. +bool CDSConfig::LoadStreams()
  92. {
  93. CStdString splitterName;
  94. g_charsetConverter.wToUTF8(DShowUtil::GetFilterName(m_pSplitter), splitterName);
  95. @@ -307,6 +327,105 @@
  96. return false;
  97. }
  98.  
  99. +bool CDSConfig::LoadPropertiesPage(IBaseFilter *pBF)
  100. +{
  101. + ISpecifyPropertyPages *pSpec;
  102. + HRESULT hr = pBF->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pSpec);
  103. + if(hr == S_OK)
  104. + {
  105. + pBF->AddRef();
  106. + m_pPropertiesFilters.push_back(pBF);
  107. + /*hr = pSpec->GetPages(&cauuid);
  108. + hr = OleCreatePropertyFrame(g_hWnd, 0, 0, NULL , 1,
  109. + (IUnknown **)&pBF, cauuid.cElems,
  110. + (GUID *)cauuid.pElems, 0, 0, NULL);
  111. + CoTaskMemFree(cauuid.pElems);
  112. + pSpec->Release();*/
  113. + CStdString filterName;
  114. + g_charsetConverter.wToUTF8(DShowUtil::GetFilterName(pBF), filterName);
  115. + CLog::Log(LOGNOTICE, "%s \"%s\" expose ISpecifyPropertyPages", __FUNCTION__, filterName.c_str());
  116. +
  117. + return true;
  118. + } else
  119. + return false;
  120. +}
  121. +bool CDSConfig::LoadChapters(void)
  122. +{
  123. + if (! m_pSplitter)
  124. + return false;
  125. +
  126. + CStdString splitterName;
  127. + g_charsetConverter.wToUTF8(DShowUtil::GetFilterName(m_pSplitter), splitterName);
  128. +
  129. + CLog::Log(LOGDEBUG, "%s Looking for chapters in \"%s\"", __FUNCTION__, splitterName.c_str());
  130. +
  131. + if (SUCCEEDED(m_pSplitter->QueryInterface(IID_IAMExtendedSeeking, (void **) &m_pIAMExtendedSeeking)))
  132. + {
  133. + long chaptersCount = -1;
  134. + m_pIAMExtendedSeeking->get_MarkerCount(&chaptersCount);
  135. + if (chaptersCount <= 0)
  136. + {
  137. + SAFE_RELEASE(m_pIAMExtendedSeeking);
  138. + return false;
  139. + }
  140. +
  141. + ChapterInfos *infos = NULL;
  142. + BSTR chapterName;
  143. + for (int i = 1; i < chaptersCount + 1; i++)
  144. + {
  145. + infos = new ChapterInfos();
  146. + infos->name = ""; infos->time = 0;
  147. +
  148. + if (SUCCEEDED(m_pIAMExtendedSeeking->GetMarkerName(i, &chapterName)))
  149. + {
  150. + g_charsetConverter.wToUTF8(chapterName, infos->name);
  151. + SysFreeString(chapterName);
  152. + } else
  153. + infos->name = "Unknown chapter";
  154. +
  155. + m_pIAMExtendedSeeking->GetMarkerTime(i, &infos->time);
  156. +
  157. + infos->time *= 1000; // To ms
  158. + CLog::Log(LOGNOTICE, "%s Chapter \"%s\" found. Start time: %f", __FUNCTION__, infos->name.c_str(), infos->time);
  159. + m_pChapters.insert( std::pair<long, ChapterInfos *>(i, infos) );
  160. + }
  161. +
  162. + m_lCurrentChapter = 1;
  163. +
  164. + return true;
  165. + } else
  166. + {
  167. + CLog::Log(LOGERROR, "%s The splitter \"%s\" doesn't support chapters", __FUNCTION__, splitterName.c_str());
  168. + return false;
  169. + }
  170. +
  171. +}
  172. +void CDSConfig::UpdateChapters( __int64 currentTime )
  173. +{
  174. + if (!m_pChapters.empty()
  175. + && GetChapterCount() > 1)
  176. + {
  177. +
  178. + m_pIAMExtendedSeeking->get_CurrentMarker(&m_lCurrentChapter);
  179. +
  180. + /*for (std::map<long, ChapterInfos *>::iterator it = m_pChapters.begin();
  181. + it != m_pChapters.end(); ++it)
  182. + {
  183. + if (it->first == GetChapterCount())
  184. + {
  185. + m_lCurrentChapter = it->first;
  186. + return;
  187. + }
  188. +
  189. + if ((currentTime >= (__int64)(it->second->time)) &&
  190. + (currentTime < (__int64)(m_pChapters[it->first + 1]->time)))
  191. + {
  192. + m_lCurrentChapter = it->first;
  193. + return;
  194. + }
  195. + }*/
  196. + }
  197. +}
  198. int CDSConfig::GetAudioStreamCount()
  199. {
  200. /* if (!m_pIAMStreamSelect)
  201. @@ -319,21 +438,7 @@
  202. {
  203. if (m_pAudioStreams.size() == 0)
  204. return -1;
  205. - //DWORD nStreams = 0, flags, group, prevgroup = -1;
  206. - //LCID lcid;
  207. - //WCHAR* wname = NULL;
  208. - //IUnknown* pObj;
  209. - //IUnknown* pUnk;
  210. - //m_pIAMStreamSelect->Count(&nStreams);
  211. - //flags = 0;
  212. - //group = 0;
  213. - //wname = NULL;
  214. - //for(DWORD i = 0; i < nStreams; i++, pObj = NULL, pUnk = NULL)
  215. - //{
  216. - // m_pIAMStreamSelect->Info(i, NULL, &flags, &lcid, &group, &wname, &pObj, &pUnk);
  217. - // if ( ((int)flags) == 1 )//AMSTREAMSELECTENABLE_ENABLE = 1
  218. - // return (int)i;
  219. - //}
  220. +
  221. int i = 0;
  222. for (std::map<long, IAMStreamSelectInfos *>::const_iterator it = m_pAudioStreams.begin();
  223. it != m_pAudioStreams.end(); ++it, i++)
  224. @@ -361,32 +466,6 @@
  225. }
  226. }
  227.  
  228. -void CDSConfig::SetAudioStream(int iStream)
  229. -{
  230. -
  231. - if (!m_pIAMStreamSelect)
  232. - return;
  233. -
  234. - //DWORD nCount = m_pAudioStreams.size();
  235. - int i =0; long lIndex = 0;
  236. - for (std::map<long, IAMStreamSelectInfos *>::const_iterator it = m_pAudioStreams.begin();
  237. - it != m_pAudioStreams.end(); ++it, i++)
  238. - {
  239. - /* Delete all streams */
  240. - m_pIAMStreamSelect->Enable(it->first, 0);
  241. - it->second->flags = 0;
  242. - if (iStream == i)
  243. - lIndex = it->first;
  244. - }
  245. -
  246. - if (SUCCEEDED(m_pIAMStreamSelect->Enable(lIndex, AMSTREAMSELECTENABLE_ENABLE)))
  247. - {
  248. - m_pAudioStreams[lIndex]->flags = AMSTREAMSELECTINFO_ENABLED;
  249. - CLog::Log(LOGDEBUG, "%s Sucessfully selected audio stream", __FUNCTION__);
  250. - }
  251. -}
  252. -
  253. -
  254. int CDSConfig::GetSubtitleCount()
  255. {
  256. return m_pEmbedSubtitles.size();
  257. @@ -546,4 +625,28 @@
  258.  
  259. }
  260. return true;
  261. +}
  262. +
  263. +int CDSConfig::GetChapterCount()
  264. +{
  265. + if (! m_pChapters.empty())
  266. + return m_pChapters.size();
  267. + else
  268. + return -1;
  269. +}
  270. +int CDSConfig::GetChapter()
  271. +{
  272. + if ( m_pChapters.empty())
  273. + return -1;
  274. + else
  275. + return m_lCurrentChapter;
  276. +}
  277. +
  278. +void CDSConfig::GetChapterName(CStdString& strChapterName)
  279. +{
  280. + int currentChapter = GetChapter();
  281. + if (currentChapter == -1)
  282. + return;
  283. +
  284. + strChapterName = m_pChapters[currentChapter]->name;
  285. }
  286. \ No newline at end of file
  287. Index: xbmc/cores/DSPlayer/DSConfig.h
  288. ===================================================================
  289. --- xbmc/cores/DSPlayer/DSConfig.h (revision 27295)
  290. +++ xbmc/cores/DSPlayer/DSConfig.h (working copy)
  291. @@ -25,6 +25,9 @@
  292. #include <streams.h>
  293. #include <map>
  294.  
  295. +// IAMExtendedSeeking
  296. +#include <qnetwork.h>
  297. +
  298. #include "igraphbuilder2.h"
  299. #include "Filters/IMpaDecFilter.h"
  300. #include "Filters/IMPCVideoDecFilter.h"
  301. @@ -40,6 +43,12 @@
  302. DWORD group;
  303. };
  304.  
  305. +struct ChapterInfos
  306. +{
  307. + CStdString name;
  308. + double time; // in ms
  309. +};
  310. +
  311. class CDSConfig
  312. {
  313. public:
  314. @@ -50,36 +59,47 @@
  315.  
  316. CStdString GetDxvaMode() { return m_pStdDxva; };
  317. std::map<long, IAMStreamSelectInfos *> GetAudioStreams() { return m_pAudioStreams; }
  318. + std::map<long, ChapterInfos *> GetChapters() { return m_pChapters; }
  319. IAMStreamSelect * GetStreamSelector() { return m_pIAMStreamSelect; }
  320.  
  321. //AudioStream
  322. virtual int GetAudioStreamCount();
  323. virtual int GetAudioStream();
  324. virtual void GetAudioStreamName(int iStream, CStdString &strStreamName);
  325. - virtual void SetAudioStream(int iStream);
  326.  
  327. virtual int GetSubtitleCount();
  328. virtual int GetSubtitle();
  329. virtual void GetSubtitleName(int iStream, CStdString &strStreamName);
  330. virtual void SetSubtitle(int iStream);
  331. +
  332. + // Chapters
  333. + virtual int GetChapterCount();
  334. + virtual int GetChapter();
  335. + virtual void GetChapterName(CStdString& strChapterName);
  336. + void UpdateChapters( __int64 currentTime );
  337.  
  338. protected:
  339. - bool LoadAudioStreams();
  340. + bool LoadStreams();
  341. + bool LoadPropertiesPage(IBaseFilter *pBF);
  342. + bool LoadChapters();
  343. bool GetMpaDec(IBaseFilter* pBF);
  344. bool GetMpcVideoDec(IBaseFilter* pBF);
  345. bool GetffdshowVideo(IBaseFilter* pBF);
  346. void LoadFilters();
  347. CCritSec m_pLock;
  348. - //
  349.  
  350. private:
  351. //Direct Show Filters
  352. + long m_lCurrentChapter;
  353. IFilterGraph2* m_pGraphBuilder;
  354. IMPCVideoDecFilter* m_pIMpcDecFilter;
  355. IMpaDecFilter* m_pIMpaDecFilter;
  356. IAMStreamSelect* m_pIAMStreamSelect;
  357. + IAMExtendedSeeking* m_pIAMExtendedSeeking;
  358. IBaseFilter* m_pSplitter;
  359. CStdString m_pStdDxva;
  360. std::map<long, IAMStreamSelectInfos *> m_pAudioStreams;
  361. std::map<long, IAMStreamSelectInfos *> m_pEmbedSubtitles;
  362. + std::vector<IBaseFilter *> m_pPropertiesFilters;
  363. + std::map<long, ChapterInfos *> m_pChapters;
  364. };
  365. Index: xbmc/cores/DSPlayer/DSGraph.cpp
  366. ===================================================================
  367. --- xbmc/cores/DSPlayer/DSGraph.cpp (revision 27295)
  368. +++ xbmc/cores/DSPlayer/DSGraph.cpp (working copy)
  369. @@ -454,8 +454,20 @@
  370. }
  371. void CDSGraph::Seek(bool bPlus, bool bLargeStep)
  372. {
  373. + // Chapter support
  374. + if (bLargeStep && GetChapterCount() > 1)
  375. + {
  376. + if (bPlus)
  377. + SeekChapter(GetChapter() + 1);
  378. + else
  379. + SeekChapter(GetChapter() - 1);
  380. +
  381. + return;
  382. + }
  383. +
  384. if (!m_pMediaSeeking || !m_pMediaControl)
  385. return;
  386. +
  387. __int64 seek;
  388. if (g_advancedSettings.m_videoUseTimeSeeking && GetTotalTime() > 2*g_advancedSettings.m_videoTimeSeekForwardBig)
  389. {
  390. @@ -575,13 +587,13 @@
  391. SeekInMilliSec((LPARAM)lParam);
  392. break;
  393. case ID_SEEK_FORWARDSMALL:
  394. - Seek(true,false);
  395. - CLog::Log(LOGDEBUG,"%s ID_SEEK_FORWARDSMALL",__FUNCTION__);
  396. - break;
  397. + Seek(true, false);
  398. + CLog::Log(LOGDEBUG,"%s ID_SEEK_FORWARDSMALL",__FUNCTION__);
  399. + break;
  400. case ID_SEEK_FORWARDLARGE:
  401. - Seek(true,true);
  402. - CLog::Log(LOGDEBUG,"%s ID_SEEK_FORWARDLARGE",__FUNCTION__);
  403. - break;
  404. + Seek(true, true);
  405. + CLog::Log(LOGDEBUG,"%s ID_SEEK_FORWARDLARGE",__FUNCTION__);
  406. + break;
  407. case ID_SEEK_BACKWARDSMALL:
  408. Seek(false,false);
  409. CLog::Log(LOGDEBUG,"%s ID_SEEK_BACKWARDSMALL",__FUNCTION__);
  410. @@ -697,3 +709,27 @@
  411. }
  412.  
  413. }
  414. +
  415. +int CDSGraph::SeekChapter(int iChapter)
  416. +{
  417. + if (GetChapterCount() > 0)
  418. + {
  419. + if (iChapter < 1)
  420. + iChapter = 1;
  421. + if (iChapter > GetChapterCount())
  422. + return 0;
  423. +
  424. + // Seek to the chapter.
  425. + CLog::Log(LOGDEBUG, "%s Seeking to chapter %d", __FUNCTION__, iChapter);
  426. + SeekInMilliSec( m_pGraphBuilder->GetDsConfig()->GetChapters()[iChapter]->time );
  427. + }
  428. + else
  429. + {
  430. + // Do a regular big jump.
  431. + if (iChapter > GetChapter())
  432. + Seek(true, true);
  433. + else
  434. + Seek(false, true);
  435. + }
  436. + return 0;
  437. +}
  438. Index: xbmc/cores/DSPlayer/DSGraph.h
  439. ===================================================================
  440. --- xbmc/cores/DSPlayer/DSGraph.h (revision 27295)
  441. +++ xbmc/cores/DSPlayer/DSGraph.h (working copy)
  442. @@ -102,6 +102,13 @@
  443. virtual void GetSubtitleName(int iStream, CStdString &strStreamName) { return m_pGraphBuilder->GetDsConfig()->GetSubtitleName(iStream, strStreamName); };
  444. virtual void SetSubtitle(int iStream) { return m_pGraphBuilder->GetDsConfig()->SetSubtitle(iStream); };
  445.  
  446. + // Chapters
  447. + virtual int GetChapterCount() { return m_pGraphBuilder->GetDsConfig()->GetChapterCount(); }
  448. + virtual int GetChapter() { return m_pGraphBuilder->GetDsConfig()->GetChapter(); }
  449. + virtual void GetChapterName(CStdString& strChapterName) { m_pGraphBuilder->GetDsConfig()->GetChapterName(strChapterName); }
  450. + virtual int SeekChapter(int iChapter); // { return m_pGraphBuilder->GetDsConfig()->SeekChapter(iChapter); }
  451. + void UpdateChapters( __int64 currentTime ) { m_pGraphBuilder->GetDsConfig()->UpdateChapters(currentTime); }
  452. +
  453. HRESULT SetFile(const CFileItem& file, const CPlayerOptions &options);
  454. void OnPlayStop();
  455. void CloseFile();
  456. Index: xbmc/cores/DSPlayer/DSPlayer.cpp
  457. ===================================================================
  458. --- xbmc/cores/DSPlayer/DSPlayer.cpp (revision 27295)
  459. +++ xbmc/cores/DSPlayer/DSPlayer.cpp (working copy)
  460. @@ -168,6 +168,7 @@
  461. void CDSPlayer::Process()
  462. {
  463. m_callback.OnPlayBackStarted();
  464. +
  465. bool pStartPosDone = true;
  466. // allow renderer to switch to fullscreen if requested
  467. //m_pDsGraph.EnableFullscreen(true);
  468. @@ -202,6 +203,7 @@
  469. {
  470. Sleep(250);
  471. m_pDsGraph.UpdateTime();
  472. + m_pDsGraph.UpdateChapters( m_pDsGraph.GetTime() );
  473. }
  474. if (m_pDsGraph.FileReachedEnd())
  475. {
  476. @@ -301,16 +303,16 @@
  477. if (bPlus)
  478. {
  479. if (!bLargeStep)
  480. - SendMessage(g_hWnd,WM_COMMAND, ID_SEEK_FORWARDSMALL,0);
  481. - else
  482. - SendMessage(g_hWnd,WM_COMMAND, ID_SEEK_FORWARDLARGE,0);
  483. + SendMessage(g_hWnd, WM_COMMAND, ID_SEEK_FORWARDSMALL,0);
  484. + else
  485. + SendMessage(g_hWnd, WM_COMMAND, ID_SEEK_FORWARDLARGE,0);
  486. }
  487. else
  488. {
  489. if (!bLargeStep)
  490. - SendMessage(g_hWnd,WM_COMMAND, ID_SEEK_BACKWARDSMALL,0);
  491. - else
  492. - SendMessage(g_hWnd,WM_COMMAND, ID_SEEK_BACKWARDLARGE,0);
  493. + SendMessage(g_hWnd, WM_COMMAND, ID_SEEK_BACKWARDSMALL,0);
  494. + else
  495. + SendMessage(g_hWnd, WM_COMMAND, ID_SEEK_BACKWARDLARGE,0);
  496. }
  497. }
  498.  
  499. @@ -332,8 +334,25 @@
  500. switch(action.id)
  501. {
  502. case ACTION_NEXT_ITEM:
  503. - Stop();
  504. - break;
  505. + case ACTION_PAGE_UP:
  506. + if(GetChapterCount() > 0)
  507. + {
  508. + SeekChapter( GetChapter() + 1 );
  509. + g_infoManager.SetDisplayAfterSeek();
  510. + return true;
  511. + }
  512. + else
  513. + break;
  514. + case ACTION_PREV_ITEM:
  515. + case ACTION_PAGE_DOWN:
  516. + if(GetChapterCount() > 0)
  517. + {
  518. + SeekChapter( GetChapter() - 1 );
  519. + g_infoManager.SetDisplayAfterSeek();
  520. + return true;
  521. + }
  522. + else
  523. + break;
  524. }
  525.  
  526. // return false to inform the caller we didn't handle the message
  527. Index: xbmc/cores/DSPlayer/DSPlayer.h
  528. ===================================================================
  529. --- xbmc/cores/DSPlayer/DSPlayer.h (revision 27295)
  530. +++ xbmc/cores/DSPlayer/DSPlayer.h (working copy)
  531. @@ -66,6 +66,13 @@
  532. virtual void GetSubtitleName(int iStream, CStdString &strStreamName) { return m_pDsGraph.GetSubtitleName(iStream, strStreamName); };
  533. virtual void SetSubtitle(int iStream) { return m_pDsGraph.SetSubtitle(iStream); };
  534.  
  535. + // Chapters
  536. +
  537. + virtual int GetChapterCount() { return m_pDsGraph.GetChapterCount(); }
  538. + virtual int GetChapter() { return m_pDsGraph.GetChapter(); }
  539. + virtual void GetChapterName(CStdString& strChapterName) { m_pDsGraph.GetChapterName(strChapterName); }
  540. + virtual int SeekChapter(int iChapter) { return m_pDsGraph.SeekChapter(iChapter); }
  541. +
  542. void Update(bool bPauseDrawing) { m_pDsGraph.Update(bPauseDrawing); }
  543. void GetVideoRect(CRect& SrcRect, CRect& DestRect) { m_pDsGraph.GetVideoRect(SrcRect, DestRect); }
  544. virtual void GetVideoAspectRatio(float& fAR) { fAR = m_pDsGraph.GetAspectRatio(); }
  545. Index: xbmc/cores/DSPlayer/FGLoader.cpp
  546. ===================================================================
  547. --- xbmc/cores/DSPlayer/FGLoader.cpp (revision 27295)
  548. +++ xbmc/cores/DSPlayer/FGLoader.cpp (working copy)
  549. @@ -118,7 +118,7 @@
  550. SAFE_RELEASE(pFS);
  551. return hr;
  552. } else {
  553. - CLog::Log(LOGERROR, "%s Source filter \"%s\" can't open file \"%s\"", __FUNCTION__, m_pStrSource.c_str(), pWinFilePath.c_str());
  554. + CLog::Log(LOGERROR, "%s Source filter \"%s\" can't open file \"%s\" (result: %X)", __FUNCTION__, m_pStrSource.c_str(), pWinFilePath.c_str(), hr);
  555. }
  556. SAFE_RELEASE(pFS);
  557. }
  558. @@ -282,27 +282,35 @@
  559.  
  560. CDirectShowEnumerator p_dsound;
  561. std::vector<DSFilterInfo> deviceList = p_dsound.GetAudioRenderers();
  562. - std::vector<DSFilterInfo>::const_iterator iter = deviceList.begin();
  563. +
  564. //see if there a config first
  565. - for (int i=0; iter != deviceList.end(); i++)
  566. + for (std::vector<DSFilterInfo>::const_iterator iter = deviceList.begin();
  567. + iter != deviceList.end(); ++iter)
  568. {
  569. DSFilterInfo dev = *iter;
  570. if (g_guiSettings.GetString("dsplayer.audiorenderer").Equals(dev.lpstrName))
  571. {
  572. currentGuid = dev.lpstrGuid;
  573. currentName = dev.lpstrName;
  574. + break;
  575. }
  576. - ++iter;
  577. }
  578. if (currentName.IsEmpty())
  579. {
  580. currentGuid = DShowUtil::CStringFromGUID(CLSID_DSoundRender);
  581. currentName.Format("Default DirectSound Device");
  582. }
  583. +
  584. m_pStrAudioRenderer = currentName;
  585. pFGF = new CFGFilterRegistry(DShowUtil::GUIDFromCString(currentGuid));
  586. hr = pFGF->Create(&ppBF);
  587. hr = m_pGraphBuilder->AddFilter(ppBF,DShowUtil::AnsiToUTF16(currentName));
  588. +
  589. + if (SUCCEEDED(hr))
  590. + CLog::Log(LOGNOTICE, "%s Successfully added \"%s\" to the graph", __FUNCTION__, m_pStrAudioRenderer.c_str());
  591. + else
  592. + CLog::Log(LOGNOTICE, "%s Failed to add \"%s\" to the graph (result: %X)", __FUNCTION__, m_pStrAudioRenderer.c_str(), hr);
  593. +
  594. SAFE_RELEASE(ppBF);
  595. return hr;
  596. }
  597. @@ -313,15 +321,19 @@
  598. IBaseFilter* ppBF = NULL;
  599.  
  600. if (g_sysinfo.IsVistaOrHigher())
  601. + {
  602. if (g_guiSettings.GetBool("dsplayer.forcenondefaultrenderer"))
  603. m_CurrentRenderer = DIRECTSHOW_RENDERER_VMR9;
  604. else
  605. m_CurrentRenderer = DIRECTSHOW_RENDERER_EVR;
  606. + }
  607. else
  608. + {
  609. if (g_guiSettings.GetBool("dsplayer.forcenondefaultrenderer"))
  610. m_CurrentRenderer = DIRECTSHOW_RENDERER_EVR;
  611. else
  612. m_CurrentRenderer = DIRECTSHOW_RENDERER_VMR9;
  613. + }
  614.  
  615.  
  616. // Renderers
  617. Index: xbmc/cores/DSPlayer/Filters/DsRenderer.cpp
  618. ===================================================================
  619. --- xbmc/cores/DSPlayer/Filters/DsRenderer.cpp (revision 27295)
  620. +++ xbmc/cores/DSPlayer/Filters/DsRenderer.cpp (working copy)
  621. @@ -40,15 +40,12 @@
  622. {
  623. m_nCurSurface = 0;
  624. g_renderManager.PreInit(true);
  625. - g_Windowing.Register(this);
  626. -
  627. -
  628. + g_Windowing.Register(this);
  629. }
  630.  
  631. CDsRenderer::~CDsRenderer()
  632. {
  633. - g_renderManager.UnInit();
  634. -
  635. + g_renderManager.UnInit();
  636. }
  637.  
  638. void CDsRenderer::AddSubtitleStream()
  639. Index: xbmc/GUISettings.cpp
  640. ===================================================================
  641. --- xbmc/GUISettings.cpp (revision 27295)
  642. +++ xbmc/GUISettings.cpp (working copy)
  643. @@ -526,7 +526,7 @@
  644. //Dsplayer
  645. AddCategory(5,"dsplayer",33100);
  646. //If vista or higher non default is vmr9
  647. - AddBool(1, "dsplayer.forcenondefaultrenderer", 33101 ? 33102 : g_sysinfo.IsVistaOrHigher(), false);
  648. + AddBool(1, "dsplayer.forcenondefaultrenderer", g_sysinfo.IsVistaOrHigher() ? 33101 : 33102 , false);
  649. AddSeparator(2,"dsplayer.sep1");
  650. AddString(3, "dsplayer.audiorenderer", 33103, "Default", SPIN_CONTROL_TEXT);
  651.  
  652.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement