2013年6月13日木曜日

現在のタイトルの総再生時間を取得する。

試しに再生したDVDはタイトル3から再生をはじめる。

#include <dshow.h>

int main()
{
 IDvdGraphBuilder *m_pIDvdGB;
 IGraphBuilder *m_pGraph;
 IMediaControl *m_pIMC;
 IDvdInfo2 *m_pIDvdI2;

 CoInitialize(NULL);

 HRESULT hr;

 // DVD グラフ ビルダ オブジェクトのインスタンスを作成する。
 hr = CoCreateInstance(CLSID_DvdGraphBuilder,
  NULL,
  CLSCTX_INPROC_SERVER,
  IID_IDvdGraphBuilder,
  (LPVOID *)&m_pIDvdGB);

 // DVD フィルタ グラフを作成する。
 AM_DVD_RENDERSTATUS buildStatus;
 hr = m_pIDvdGB->RenderDvdVideoVolume(NULL, AM_DVD_HWDEC_PREFER, &buildStatus);

 // フィルタ グラフ マネージャへのポインタを取得する。
 hr = m_pIDvdGB->GetFiltergraph(&m_pGraph);

 // フィルタ グラフを全体として制御するため、
 // グラフ ポインタを使って IMediaControl へのポインタを取得する。
 hr = m_pGraph->QueryInterface(IID_IMediaControl, (LPVOID *)&m_pIMC);

 // DVD ナビゲータ インターフェイスへのポインタを取得する。
 hr = m_pIDvdGB->GetDvdInterface(IID_IDvdInfo2, reinterpret_cast<void**>(&m_pIDvdI2));


 m_pIMC->Run();

 /* タイトル */
 //現在のタイトルの総再生時間を取得する。
 DVD_HMSF_TIMECODE pTotalTime;
 ULONG pulTimeCodeFlags;

 hr = m_pIDvdI2->GetTotalTitleTime(&pTotalTime,&pulTimeCodeFlags);

 if (SUCCEEDED(hr))
 {
  //時、分、秒、フレーム単位の総時間を受け取る
  printf("時::%d\n",pTotalTime.bHours);
  printf("分::%d\n",pTotalTime.bMinutes);
  printf("秒::%d\n",pTotalTime.bSeconds);
  printf("フレーム::%d\n",pTotalTime.bFrames);

  //ディスクが作成されたときの再生フレーム レート
  if(pulTimeCodeFlags == DVD_TC_FLAG_25fps)
  {
   printf("ディスクは、25 フレーム/秒で再生されるようにオーサリングされている。\n");
  }
  else if(pulTimeCodeFlags == DVD_TC_FLAG_30fps)
  {
   printf("ディスクは、30 フレーム/秒で再生されるようにオーサリングされている。\n");
  }
  else if(pulTimeCodeFlags == DVD_TC_FLAG_DropFrame)
  {
   printf("ディスクは、29.97 フレーム/秒で再生されるようにオーサリングされている。\n");
  }
  else if(pulTimeCodeFlags == DVD_TC_FLAG_Interpolated)
  {
   printf("DVD ナビゲータ フィルタによるディスクのフレーム レートの最善の見積りを表す値。\n");
  }
 }

 MessageBox(0, 0, L"OK", 0);

 m_pIDvdI2->Release();
 m_pIDvdGB->Release();

 CoUninitialize();

 return 0;
}




0 件のコメント:

コメントを投稿