#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 件のコメント:
コメントを投稿