#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;
}
2013年6月13日木曜日
現在のタイトルの総再生時間を取得する。
試しに再生したDVDはタイトル3から再生をはじめる。
登録:
コメントの投稿 (Atom)


0 件のコメント:
コメントを投稿