DVDタイトルのチャプター数を取得する

ここでは、DVDタイトルに含まれるチャプター数を取得する方法を説明したいと思います。 (注意)ここの例では、サンプルを簡潔にするためにエラー処理を書いていません。

DVDタイトルのチャプター数取得サンプル

このコードは、DVDがドライブに入っていない場合には動作しません。 私の環境では何故かVisual Studioから起動すると動作しませんでした。 もし、動かない場合にはコマンドプロンプトから実行してみてください。


#include <stdio.h>
#include <dshow.h>

int
main()
{
 IDvdGraphBuilder *pDvdGraphBuilder;
 IDvdInfo2 *pDvdInfo2;

 CoInitialize(NULL);

 CoCreateInstance(CLSID_DvdGraphBuilder,
	NULL,
	CLSCTX_INPROC_SERVER,
	IID_IDvdGraphBuilder,
	(LPVOID *)&pDvdGraphBuilder);

 AM_DVD_RENDERSTATUS stat;
 pDvdGraphBuilder->RenderDvdVideoVolume(NULL,
     AM_DVD_HWDEC_PREFER, &stat);

 pDvdGraphBuilder->GetDvdInterface(IID_IDvdInfo2,
     (LPVOID *)&pDvdInfo2);

 /*
 この例では、0番目(一番最初)のTitleに含まれる
 Chapterの数を取得しています。
 1番目(もしくはそれ以降)のTitleに含まれるChapterの数を
 取得するには、一つ目の引数を変更してご利用ください。
 */
 ULONG numChapters;
 pDvdInfo2->GetNumberOfChapters(0, &numChapters);

 printf("number of chapters in title 0 : %u\n", numChapters);

 pDvdInfo2->Release();
 pDvdGraphBuilder->Release();

 CoUninitialize();

 return 0;
}

GetNumberOfChaptersの一つ目の引数は、全体のChapter数を表します。 GetNumberOfChaptersを利用するためにはTitle番号が必要ですが、DVDに含まれる総Title数はGetDVDVolumeInfoを利用すると取得できます。