AVI再生について – プログラミング – Home

通知
すべてクリア

[解決済] AVI再生について


SH
 SH
(@SH)
ゲスト
結合: 18年前
投稿: 17
Topic starter  

現在、ファイルを開くダイアログを使用してAVIファイルの再生するプログラムを
作成しているのですが、上手くいきません。
上手くいかないというのは、コンパイルは通るのですがAVIを再生する際に何もイベ
ントが起こりません。
ソースを記載いたします。
ちなみに環境はWindows XPでVS2005 VC++です。

void CXXXDlg::OnBnClickedAvi()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
PAVISTREAM lpas;

ifstream fin;
CFileDialog f(TRUE,*.*,",
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
AVIファイル (*.avi)|*.avi|);
if(f.DoModal()==IDOK){
// ファイルを開く
AVIFileInit();

if (AVIStreamOpenFromFile(&lpas, TEXT(test.avi), streamtypeVIDEO,
0, OF_READ, NULL) == 0) {
LONG lSize;
LPBYTE lpBits;
BITMAPINFOHEADER bih;

lSize = sizeof(BITMAPINFOHEADER);
AVIStreamReadFormat(lpas, 0, &bih, &lSize);

lpBits = (LPBYTE)HeapAlloc(GetProcessHeap(), 0,
bih.biSizeImage);
AVIStreamRead(lpas, 0, 1, lpBits, bih.biSizeImage, NULL,
NULL);

AVIStreamRelease(lpas);
}
AVIFileExit();
}
if(fin.fail()){
AfxMessageBox(ファイルを開けません);
fin.close();
}
}

表示しようとしているウィンドはIDC_RECT_WINDOW(m_rectwindw)です。
何が足りないのでしょうか?

よろしくお願いいたします。


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ざっと見ただけですが、イベントって何のイベントが起こることを
期待しているのでしょう?

あと、書かれたコードでは描画部分が全く無いようなので表示はされないと思います。

あと、何処にも関連が無いifstreamのインスタンスが有り、
これに対してcloseをかけているのも気になります。
failを呼んでいるのも意味があるのかどうか。

多分、サンプルソースをそのまま持ってきただけなのではないかと言う気がしますが、
書く関数が何をやるものでこのソースの中で何を処理しているのかを
きちんと理解する必要があると思います。
また、Read系の関数の返却値を全くチェックしていないのも気になります。
エラーを返す可能性がある関数に関してはちゃんとチェックするようにしないと
何処で間違っているかを特定するのも大変になりますので
ちゃんとチェックしましょう。


返信引用
SH
 SH
(@SH)
ゲスト
結合: 18年前
投稿: 17
Topic starter  

PATIOさん

返信ありがとうございます。

AVIの再生の方法を全く変えてみました。

MCIWndCreate関数とMCIWndPlayFrom関数を用いて、

HWND hMMWnd = MCIWndCreate(
             GetDlgItem(IDC_aaa)->m_hWnd,
             AfxGetInstanceHandle(),
             MCIWNDF_NOMENU | MCIWNDF_NOOPEN | MCIWNDF_NOPLAYBAR |
             WS_MAXIMIZE | WS_VISIBLE | WS_CHILD,
             xxx.avi);
 if(hMMWnd != 0)
   MCIWndPlayFrom(hMMWnd, 0); //再生開始

にしてみたら再生はすることに成功しました。

しかし、ファイルを開くダイアログとの関連がなく予め指定しているAVIファイルしか
再生できません。
どうしてもファイルを開くダイアログと関連させたいのですが
よい方法はありませんか?


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

> しかし、ファイルを開くダイアログとの関連がなく予め指定しているAVIファイルしか
> 再生できません。
> どうしてもファイルを開くダイアログと関連させたいのですが
> よい方法はありませんか?

fopen()等でもよく出る問題ですね。

http://itpro.nikkeibp.co.jp/article/COLUMN/20061128/255158/
こちらではscanf()でやっていますが…
やり方は似たようなものです。

「ファイルを開く」のコモンダイアログでファイル名を受け取れますので、
同じように処理すればAPIにファイル名を渡せるでしょう。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

えーと。

そこまで出来ていてうまく行きませんと言っていると言うことは、

「ファイルを開く」のコモンダイアログで選択したファイル名を
受け取る方法を理解できていない。

MCIWndCreate関数の何処にどういう形でファイル名を渡せば良いかを
理解できていない。

この二つのいずれか、もしくは両方が解決できていないからですよね。
問題を一つ一つ順番に解決するように考えて見てください。
「ファイルを開く」のコモンダイアログに関しては使い方を説明したHPは
たくさんあると思いますし、MCIWndCreate関数の仕様に関してもMSDNで
調べる事が可能だと思います。


返信引用
SH
 SH
(@SH)
ゲスト
結合: 18年前
投稿: 17
 

PATIOさん

ご指導ありがとうございます。
おっしゃる通り勉強不足でした。

GetFileName()で読み込むことができました。

皆様、いろいろとありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました