Power Movie PCI Development Kit 3

型番:PMP-DKIT3
価格:\50,000(税別)


Development Kitの内容

このDevelopment Kitには以下のものが含まれています。

  • Windows NT, Windows 2000, Windows XP用ドライバ(Windows 95/98/98 SE/Me用ドライバはPower Movie PCI本体に付属しています) ※Windows NT, 2000, XP では Video for Windows が利用できません。Windows NT, 2000, XP 用のアプリケーションを開発される場合は、API Quick Reference に記載されているAPIをお使いください。
    ※Video for Windows を利用した一部のサンプルプログラムは、Windows NT, 2000, XP では使用できません。

  • Visual Basic 用コードモジュール
  • C/C++ 用インクルードファイル
  • C/C++ 用ライブラリファイル
  • Visual Basic サンプルプログラム
  • C 言語サンプルプログラム


サンプルプログラム

Development Kitにはこのドキュメントに記載されているファンクションの具体的な使用例として Visual Basic および Visual C++ 用に以下のサンプルが含まれています。作成しようとしているアプリケーションに組み込む機能に応じて各サンプルを参照することができます。

Capture キャプチャプログラム
Overlay 2画面オーバーレイ
Videoout ビデオ出力プログラム

Visual C++ 用のサンプルは C 言語で記述されています。


開発キットに含まれるソースコードの取り扱いについて

 開発キットに含まれるサンプルプログラムはドキュメントを補うための資料となっています。サンプルプログラムのソースコード(以下、「ソースコード」といいます)自体を改変したり、その一部をお客様のアプリケーションに組み込んで利用してください。ただし、お客様のアプリケーションとそこに組み込まれたソースコードの一部との適合性に関してサポートの範囲を限定させていただくこともございますのでご了承ください。

 カノープス株式会社はソースコードの使用と変更に関して完全に自由な権利をお客様に許諾いたします。ただし、お客様の営利を目的としたソフトウェア製品にこれらのコードをソースコードもしくはこれを変更したものの形態のままで含めることはご遠慮願います。

 また、最終的に作成されたアプリケーションの運用結果および目的への適合性につき、カノープス株式会社では一切の責任を負いかねますので予めご了承ください。


プログラム作成時の注意事項

 開発キットでプログラムを作成する場合の注意事項です。

  1. 対応言語
    Visual Basic Version 4.0以降(32bit版のみ)
    Visual C++ Version 4.0以降

  2. 対応OS
    Microsoft Windows 95/98/98SE/Me 日本語版
    Microsoft Windows NT 4.0 日本語版(SP3以降)
    Microsoft Windows 2000 Professional 日本語版
    Microsoft Windows XP Home/Professional 日本語版

  3. Windows 9x用ドライバは含まれていません。Power Movie PCI本体に付属するものをお使いください。

  4. プログレッシブJPEGでエンコードされたファイルは扱えません。

  5. 複数枚のPower Movie PCIを制御することはできません。

  6. 複数のアプリケーションからの同時使用はできません。

  7. Multi Threadには対応していません。

  8. Power Movie MP/V開発キットおよびPower Movie開発キットとの互換性はありません。


プログラム作成の流れ

 実際に開発キットを使用してプログラムを作成する流れを、2つのアプリケーションを例に説明します。


ビデオ表示アプリケーションの作成
 ビデオ表示アプリケーションでは、
  • Power Movie PCIの使用開始
  • ビデオウィンドウの生成
  • ビデオ映像の表示開始
  • ウィンドウの移動およびサイズの変更
  • ビデオ映像の取り込みおよび静止
  • ビデオ映像の表示終了
  • ビデオウィンドウの破棄
  • Power Movie PCIの使用終了
などの機能が必要となります。


Power Movie PCIの使用開始

 Power Movie PCIを使用するアプリケーションは、その使用開始をドライバに許可してもらう必要があります。アプリケーションの初期化時に MGE_Initialize およびMGE_SetCooperativeLevel ファンクションを呼び出してPower Movie PCIの使用を開始します。

HWND _hWndApp; // Applicationのメインウィンドウハンドル(グローバル変数)
HMGE g_hmge; // Power Movie PCIの使用権を保持するハンドル(グローバル変数)
MGERESULT mr;

mr = MGE_Initialize(0, g_hWndApp, &g_hmge);
if(mr != MGE_S_OK) {
// Power Movie PCIが使用できない

エラー処理
}
mr = MGE_SetCooperativeLevel(g_hmge, MGE_SCL_EXCLUSIVE);
if(mr != MGE_S_OK) {
// Power Movie PCIが使用できない

エラー処理
}


ビデオウィンドウの生成

 アプリケーションのウィンドウ生成終了後( CreateWindow実行後)、クライアント領域をVideo Windowとして使用します。ただし、DirectDraw Overlayの制限に触れるような場合は事前にウィンドウのサイズを変更しておく必要があります。

HMGEVSRC g_hmgevsDDraw; //Video Decoderのハンドル(グローバル変数)
HMGESURFACE g_hmgesrfSurfaceDDraw;
//Ddraw Overlay Surfaceのハンドル(グローバル変数)
HMGESTREAM g_hmgestmStreamDDraw;
//Ddraw Overlay Streamのハンドル(グローバル変数)

RECT rcCrop, rcFrame, rcWindow, rcView;
RECT rcClient;
DWORD dwWindowWidth;
DWORD dwViewWidth;
DWORD dwWindowHeight;
DWORD dwViewHeight;
DWORD dwCropWidth;
DWORD dwCropHeight;

//現在のClient領域の大きさを取得
GetClientRect(g_hWndApp, &rcClient);
ClientToScreen(g_hWndApp, (LPPOINT)&rcClient);
ClientToScreen(g_hWndApp, (LPPOINT)&rcClient + 1

//Crop用の領域初期化
rcCrop.left = 0;
rcCrop.top = 0;
rcCrop.right =640;
rcCrop.bottom = 480;
rcFrame.left = 0;
rcFrame.top = 0;
rcFrame.right = 640;
rcFrame.bottom =480;

// View用の領域初期化
rcView.left = 0;
rcView.top = 0;
rcView.right = 640;
rcView.bottom = 480;


ビデオ映像の表示開始

 ビデオ映像をアプリケーションウィンドウのクライアント領域に表示させます。
他のウィンドウが上に重なった場合に、オーバーレイされるビデオ映像がそのウィンドウの上に表示されないようにキーカラー(Color Key)を有効にします。
 キーカラーを有効にするためには、ウィンドウのクライアント領域をキーカラーで塗りつぶす必要があります。これはウィンドウのバックグラウンドカラーをキーカラーと同じ色にすることで簡単に実現できます。
 ビデオオーバーレイの表示開始後にウィンドウ内のキーカラーで塗りつぶすようにすれば、キーカラーそのものの色が見える内容にすることもできます。

MGECOLORKEY ck;
HBRUSH hBrush;

// キーカラーをマゼンタにして表示を開始する
ck.dwColorLow = 0x00ff00ff; // マゼンタ
ck.dwColorHigh = 0x00ff00ff;

MGE_SurfaceSetColorKey(g_hmgesrfSurfaceDDraw, &ck);
MGE_VStreamStart(g_hmgestmStreamDDraw);
MGE_SurfaceStartOverlay(g_hmgesrfSurfaceDDraw);

hBrush = CreateSolidBrush(RGB(255, 0, 255));
SetClassLong(g_hWndApp, GCL_HBRBACKGROUND, (LONG)hBrush);
InvalidateRect(g_hWndApp, NULL, TRUE);
UpdateWindow(g_hWndApp);


ウィンドウの移動およびサイズ変更

 ユーザーの操作により、アプリケーションのウィンドウを移動させた時や、ウィンドウのサイズを変更した場合には、ビデオウィンドウを新しい位置に移動させたり、サイズを変更します。

case WM_WINDOWPOSCHANGED:
{
RECT rcWindow;
RECT rcView;
RECT rcCrop;
DWORD dwWindowWidth;
DWORD dwViewWidth;
DWORD dwWindowHeight;
DWORD dwViewHeight;
DWORD cwCropWidth;
DWORD dwCropHeight;

GetClientRect(g_hWndApp, &rcWindow);
ClientToScreen(g_hWndApp, (LPPOINT)&rcWindow);
ClientToScreen(g_hWndApp, (LPPOINT)&rcWindow + 1);

MGE_VStreamGetRect(g_hmgestmStreamDDraw, MGEStreamRectCrop, &rcCrop);
rcView = rcCrop;

// DirectDraw Overlayの制限を回避するために各矩形を補正する。
dwWindowWidth = rcWindow.right - rcWindow.left;
dwViewWidth = rcView.right - rcView.left;
dwCropWidth = rcCrop.right - rcCrop.left;

while(dwViewWidth > dwWindowWidth) {
dwViewWidth /= 2;
if(dwViewWidth * 4 < dwCropWidth) {
/* we can not */
return;
}
}
rcView.right = rcView.left + dwViewWidth;


ビデオ映像の取り込みおよび静止

 ビデオ映像の取り込みおよび静止を行ないます。
この例では現在の状態を取得して、取り込みと静止を交互に切り替えます。

MGESTREAMSTATE ss;

MGE_VStreamGetState(g_hmgestmStreamDDraw, &ss);
if(ss == MGEStreamStatePause) {
MGE_VStreamRestart(g_hmgestmStreamDDraw);
}
else if(ss == MGEStreamStateStarted) {
MGE_VStreamPause(g_hmgestmStreamDDraw);
}
else {
// ビデオがスタートしていない。
}


ビデオ映像の表示終了

 ビデオ映像の表示を終了させます。
 ビデオオーバーレイの表示終了前にウィンドウ内を適当な色で塗りつぶすようにすれば、キーカラーそのものの色を見えないようにすることができます。

HBRUSH hBrush;

// バックグラウンドカラーを黒にする
hBrush = GetStockObject(BLACK_BRUSH);
hBrush = (HBRUSH)SetClassLong(g_hWndApp, GCL_HBRBACKGROUND, (LONG)hBrush);
InvalidateRect(g_hWndApp, NULL, TRUE);
UpdateWindow(g_hWndApp);

// 表示を終了させる。
MGE_SurfaceStopOverlay(g_hmgesrfSurfaceDDraw);
MGE_VStreamStop(g_hmgestmStreamDDraw);

// キーカラーのブラシを削除する
if(hBrush)
DeleteObject(hBrush);


ビデオウィンドウの破棄

 ビデオウィンドウを破棄します。WM_DESTROYなどで実行します。

MGE_VStreamDisconnect(g_hmgestmStreamDDraw, g_hmgesrfSurfaceDDraw);
MGE_DestroyVideoStream(g_hmgestmStreamDDraw);
MGE_DestroySurface(g_hmgesrfSurfaceDDraw);
MGE_DestroyVideoDecoder(g_hmgevsDDraw);


Power Movie PCIの使用終了

 Power Movie PCIを使用するアプリケーションは、その使用終了をドライバに通知する必要があります。アプリケーションの終了時などに MGE_Uninitialize ファンクションを呼び出してPower Movie PCIの使用を終了します。

MGE_Uninitialize(g_hmge);


ビデオ出力アプリケーションの作成

 ビデオ出力アプリケーションでは、

  • Power Movie PCIの使用開始
  • ビデオへの出力の準備
  • ビデオへ出力するものを描画する
  • ビデオへの出力の開始
  • ビデオへの出力の終了
  • ビデオへの出力の後処理
  • Power Movie PCIの使用終了
などの機能が必要となります。

この項では静止画像をビデオ出力するアプリケーションの作成について説明します。本文中では C 言語を用いて説明していますが、Visual Basic でも同様のシーケンスでコーディングを行います。


Power Movie PCIの使用開始

 Power Movie PCIを使用するアプリケーションは、その使用開始をドライバに許可してもらう必要があります。アプリケーションの初期化時に MGE_Initialize およびMGE_SetCooperativeLevel ファンクションを呼び出してPower Movie PCIの使用を開始します。

HWND g_hWndApp; // Applicationのメインウインドウハンドル(グローバル変数)
HMGE g_hmge; // Power Movie PCIの使用権を保持するハンドル(グローバル変数)
MGERESULT mr;

mr = MGE_Initialize(0, g_hWndApp, &g_hmge);
if(mr != MGE_S_OK) {
// Power Movie PCIが使用できない
エラー処理
}
mr = MGE_SetCooperativeLevel(g_hmge, MGE_SCL_EXCLUSIVE);
if(mr != MGE_S_OK) {
// Power Movie PCIが使用できない

エラー処理
}


ビデオへの出力の準備

 静止画像をビデオ出力する準備を行ないます。

HMGEVDST g_hmgevdVideoOut; // Video Encoderへのハンドル(グローバル変数)
HMGESTREAM g_hmgestmStreamVideoOut;
// Video out Streamへのハンドル(グローバル変数)
HMGESURFACE g_hmgesrfSurfaceMemory;
// Memory Surfaceへのハンドル(グローバル変数)

RECT rcWindow, rcView;
MGEPFINFO pfinfo;

rcView.left = 0;
rcView.top = 0;
rcView.right = 640;
rcView.bottom = 480;

rcWindow.left = 0;
rcWindow.top = 0;
rcWindow.right = 640;
rcWindow.bottom = 480;

//
// Video outするための各オブジェクトの生成
//
MGE_CreateVideoEncoder(g_hmge, MGEChannel1, &g_hmgevdVideoOut);
MGE_CreateVideoOutStream(g_hmgevdVideoOut, &g_hmgestmStreamVideoOut);
pfinfo.dwSize = sizeof(pfinfo);
MGE_GetPixelFormatInfo(MGEPixelFormatYUY2, &pfinfo);
MGE_CreateMemorySurface(g_hmge, &g_hmgesrfSurfaceMemory, 640, 480, 640 * pfinfo.dwBytesPerPixel, MGEPixelFormatYUY2);
MGE_VStreamConnect(g_hmgestmStreamVideoOut, g_hmgesrfSurfaceMemory);
MGE_VStreamSetRect(g_hmgestmStreamVideoOut, MGEStreamRectView, &rcView, FALSE);
MGE_VStreamSetRect(g_hmgestmStreamVideoOut, MGEStreamRectWindow, &rcWindow, TRUE);


ビデオへ出力するものを描画する

 ビデオへ出力するものを用意します。ここで MGE_SurfaceFillBuffer、MGE_SurfaceSetBitmapBits、 MGE_SurfaceLoadDIB や MGE_SurfaceLoadJPEG などを使用して、オブジェクト(静止画)をサーフェスに描画します。 ここでは MGE_SurfaceFillBuffer を使用します。

DWORD s_ardwColor[] = {
0x00ffffff,
0x00ff0000,
0x0000ff00,
0x000000ff,
0x00000000,
0x00ffff00,
};
RECT rc;
int i;

rc.left = 0;
rc.top = 0;
rc.right = 640;
rc.bottom = 480;

for(i = 0;i < 6;i++) {
MGE_SurfaceFillBuffer(g_hmgesrfSurfaceMemory, &rc, s_ardwColor[i]);
rc.left += 40;
rc.right -= 40;
rc.top += 30;
rc.bottom -= 30;
}


ビデオへの出力の開始

MGE_VStreamStart(g_hmgestmStreamVideo)


Power Movie PCIの使用終了

 Power Movie PCIを使用するアプリケーションは、その使用終了をドライバに通知する必要があります。アプリケーションの終了時などに MGE_Uninitialize ファンクションを呼び出してPower Movie PCIの使用を終了します。

MGE_Uninitialize(g_hmge);


API Quick Reference



  

Generic Functions(初期化)

MGE_Initialize ライブラリの初期化
MGE_Uninitialize ライブラリの終了
MGE_SetCooperativeLevel ライブラリの使用形態を指定する
MGE_SaveConfiguration Video Decoder/Video Encoderの設定をregistryに格納する
MGE_LoadConfiguration Video Decoder/Video Encoderの設定をregistryからロードする


  

Generic Functions(全体)

MGE_Update パラメータを反映させる

  

Information Functions

MGE_GetDeviceInfo ハードウェアの情報を得る
MGE_SetVideoStandard SystemのVideo standard情報を設定する
MGE_GetVideoStandard 現在のSystemのVideo standardを取得する
MGE_GetPixelFormatInfo ピクセルフォーマットの情報を取得する
MGE_GetImageInfo Imageデータの情報を得る


  

Surface Functions

MGE_CreateSuperOvlSurface Super Overlayのサーフェスを作成する
MGE_CreateDDrawOvlSurface DirectDraw Overlayのサーフェスを作成する
MGE_CreateMemorySurface サーフェスをメモリ上に作成する
MGE_DestroySurface サーフェスを破棄する
MGE_SurfaceSetColorKey Key Colorを設定する
MGE_SurfaceGetColorKey 現在のKey Colorを取得する
MGE_SurfaceSetOverlayMode Overlayモードを設定する
MGE_SurfaceStartOverlay Overlayを開始する
MGE_SurfaceStopOverlay Overlayをやめる
MGE_SurfaceSetBitmapBits メモリからSurfaceへBitmapをコピーする
MGE_SurfaceGetBitmapBits SurfaceからメモリへBitmapをコピーする
MGE_SurfaceLoadDIB SurfaceにBitmapをロードする
MGE_SurfaceSaveDIB SurfaceのBitmapをファイルにセーブする
MGE_SurfaceLoadJPEG SurfaceにJPEGデータを展開してロードする
MGE_SurfaceSaveJPEG SurfaceのBitmapをJPEGに圧縮してファイルにセーブする

  

Video Decoder Functions

MGE_CreateVideoDecoder ビデオデコーダオブジェクトを作成する
MGE_DestroyVideoDecoder ビデオデコーダオブジェクトを破棄する
MGE_VDGetInfo ビデオデコーダの情報を取得する
MGE_VDGetStatus ビデオデコーダの状態を取得する
MGE_VDSetParam ビデオデコーダのパラメータを調整する
MGE_VDGetParam ビデオデコーダの現在のパラメータを取得する
MGE_VDGetParamRange ビデオデコーダの調整可能パラメータの範囲を取得する
MGE_VDSetLine ビデオデコーダへの入力を選択する
MGE_VDGetLine 現在のビデオデコーダへの入力を取得する
MGE_VDSaveConfiguration Video decoderの設定をregistryに格納する
MGE_VDLoadConfiguration Video decoderの設定をregistryからロードする

  

Video Encoder Functions

MGE_CreateVideoEncoder ビデオエンコーダオブジェクトを作成する
MGE_DestroyVideoEncoder ビデオエンコーダオブジェクトを破棄する
MGE_VEGetLine ビデオエンコーダの出力を選択する
MGE_VEGetLine 現在のビデオエンコーダの出力ライン番号を取得する
MGE_VESaveConfiguration Video Encoderの設定をregistryに格納する
MGE_VELoadConfiguration Video Encoderの設定をregistryからロードする

  

Video Stream Functions

MGE_CreateVideoInStream 入力用のVideo Streamを作成する
MGE_CreateVideoOutStream 出力用のVudeo Streamを作成する
MGE_DestroyVideoStream Video Streamを破棄する
MGE_VStreamConnect Video StreamをSurfaceに結び付ける
MGE_VStreamDisconnect Video StreamとSurfaceを切り離す
VStreamReplace Video StreamのSurfaceを付け替える
MGE_VSteamSetVideoMode Video Stream上のビデオ信号のモードを設定する
MGE_VStreamGetVideoMode 現在のVideo Stream上のビデオ信号のモードを取得する
MGE_VStreamSetRect 各矩形を指定する
MGE_VStreamGetRect 現在の矩形情報を取得する
MGE_VStreamGetRectRange 各矩形情報を取得する
MGE_VStreamStart Streamを開始する
VStreamPause Streamを一時停止させる
MGE_VSteamRestart Streamを再開させる
MGE_VStreamStop Streamを中止させる
MGE_VStreamGetState 指定したStreamの状態を取得する
MGE_VStreamSetEffect Stream上に特殊効果を付加する
MGE_VStreamGetEffect Stream上の現在の特殊効果を取得する