- PR -

VFW(Video For Windows)のEditStreamSetInfo関数について

1
投稿者投稿内容
est
会議室デビュー日: 2007/08/03
投稿数: 12
投稿日時: 2007-10-23 14:36
現在、VFW(Video For Windows)を用いて複数のBMPファイルからAVIファイルを生成しています。
AVIファイル作成時に(AVIコンテナ作成時に)、
AVISTREAMINFO構造体を用意して、
動画のスクリーンサイズや、フレームレートの設定をあらかじめ行っています。

動画のフレームレートを後で変更したい場合、EditStreamSetInfo関数を使えばできるのかな、と思い、AVIコンテナクローズ直前にEditStreamSetInfo関数をコールしてみましたが、エラーが返りました。(値は-2147467262。成功していれば0が返る)

【EditStreamSetInfo関数】
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpmltimd/html/_win32_editstreamsetinfo.asp

【エラーが返る例】
PAVIFILE pavi;
PAVISTREAM pstm;

//=== AVIコンテナオープン(略) ===



//=== AVIコンテナにRAWデータを書き出し(略) ===



//=== AVIファイルクローズ直前 ===
// やりたいこと:フレームレートの変更を行いたい

AVISTREAMINFO newsi;
memset(&newsi, 0, sizeof(newsi));


AVIStreamInfo(pstm, &newsi, lSize);

newsi.dwRate = (int)(変更後のフレームレート値);
newsi.fccType = streamtypeVIDEO;
newsi.fccHandler = mmioFOURCC('d','i','v','x');
newsi.dwFlags = 0;
newsi.dwCaps = 0;
newsi.wPriority = 0;
newsi.wLanguage = 0;
newsi.dwScale = 1;
newsi.dwStart = 0;
newsi.dwLength = (ストリームの長さ);
newsi.dwInitialFrames = 0;
newsi.dwSuggestedBufferSize = 0;
newsi.dwQuality = (DWORD)-1;
newsi.dwSampleSize = 0;
newsi.rcFrame.top = 0;
newsi.rcFrame.left = 0;
newsi.rcFrame.bottom = (動画サイズ 高さ);
newsi.rcFrame.right = (動画サイズ 幅);
newsi.dwEditCount = 0;
newsi.dwFormatChangeCount = 0;

long lSize = sizeof(AVISTREAMINFO);
int iResult = EditStreamSetInfo(pstm, &newsi, lSize);

if(iResult!=0)
{
// エラー
// -2147467262が返っている
;
}

//=== AVIファイルクローズ ===

AVIStreamRelease( pstm );
AVIFileRelease( pavi );
AVIFileExit();



EditStreamSetInfo関数の使い方が誤っているのでしょうか。
わかる方どうかご教授をお願いいたします。

なお、環境はVisual Studio .NET 2003(Managed C++)で、
作成しているAVIファイルはDivXコーデックにて圧縮をかけています。
1

スキルアップ/キャリアアップ(JOB@IT)