重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在、ウエブカメラ4台を使うシステムを作成しています。
下記のサイトを参考に、とりあえず動く様に成ったので現場へ送ったら動作しないとの事でした。
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/index- …

原因はPCIバスのバス幅が133Mbであり、たまたま私が開発に使って居たPCがPCI-Expressスロットを持っていた為、バス幅が大きく、その為私のPC上では問題なく動作してしまった様です。

そこでカメラのフレームレートを下げようと色々探したのですが、下記のプログラムを見つけました。
このプログラムを組み込もうとおもったのですが、2行目の"pTimeline"に該当する形式がこのサンプルの中にありません。 何かnewで作成するものか、若しくは
"IAMTimelineObj* pVideoGroupObj;"の様に定義するものか分からず組み込めないで居ます。
私はC自体は長くやっていますが、改造が主で、クラスやDirectXの知識はほとんどありません。
この"pTimeline"はどの様に宣言したら良いのでしょうか、お分かりに成る方、宜しくお教え下さい。
なお、サンプルプログラムは下から取りました。
http://www.erde.co.jp/~katsu/wiki/index.php?%A1% …


IAMTimelineObj* pVideoGroupObj;
pTimeline->CreateEmptyNode(&pVideoGroupObj, TIMELINE_MAJOR_TYPE_GROUP);

IAMTimelineGroup* pVideoGroup;
pVideoGroupObj->QueryInterface(IID_IAMTimelineGroup, (void**)&pVideoGroup);

// グループのメディア タイプを設定
AM_MEDIA_TYPE mtGroup;
ZeroMemory(&mtGroup, sizeof(AM_MEDIA_TYPE));
mtGroup.majortype = MEDIATYPE_Video;
mtGroup.subtype = MEDIASUBTYPE_ARGB32; // alpha blendingする場合はMEDIASUBTYPE_ARGB32

// フォーマット ヘッダーを設定する。
mtGroup.pbFormat = (BYTE*)CoTaskMemAlloc(sizeof(VIDEOINFOHEADER));
if (mtGroup.pbFormat == NULL)
{
return E_OUTOFMEMORY;
}

VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)mtGroup.pbFormat;
ZeroMemory(pVideoHeader, sizeof(VIDEOINFOHEADER));
pVideoHeader->bmiHeader.biBitCount = 32; // 32bit
pVideoHeader->bmiHeader.biWidth = 640;
pVideoHeader->bmiHeader.biHeight = 480;
pVideoHeader->bmiHeader.biPlanes = 1;
pVideoHeader->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pVideoHeader->bmiHeader.biSizeImage = DIBSIZE(pVideoHeader->bmiHeader);

// フォーマット タイプとサイズを設定する。
mtGroup.formattype = FORMAT_VideoInfo;
mtGroup.cbFormat = sizeof(VIDEOINFOHEADER);

// サンプル サイズを設定する。
mtGroup.bFixedSizeSamples = TRUE;
mtGroup.lSampleSize = DIBSIZE(pVideoHeader->bmiHeader);

pVideoGroup->SetMediaType(&mtGroup);
pVideoGroup->SetOutputFPS(30); // フレーム/秒
pTimeline->AddGroup( pVideoGroupObj );

pVideoGroupObj.Release();
CoTaskMemFree(mtGroup.pbFormat);

A 回答 (1件)

詳しい処理の詳細はこういう事をやったことがないので把握していませんが



いかにもDirectXらしい初期化法だなと思ったので
検索してみたら、それらしいものが出てきました

http://msdn.microsoft.com/ja-jp/library/dd148668 …

ここでは

IAMTimeline *pTimeLine;



CoInitialize(NULL);
CoCreateInstance(CLSID_AMTimeline, NULL, CLSCTX_INPROC_SERVER,
IID_IAMTimeline, (void**)&pTimeLine);

となっているようですが、一例としてはこれであってるとしても

CoCreateInstanceでの他の引数に関しては、TinyPineさんご自身の知識と環境などを含めてしっかりとご確認ください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
早速会社で実装してみました。
お蔭様で一応実装出来ましたが・・・・新たな問題が。

お礼日時:2011/12/22 18:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!