RENDERFILEについての質問です
今現在、DIRECTSHOWで動画でいろいろしてみようと思ったのですが、壁に当たりました。
デバッグ無しで開始すると、
RenderFile hr 40258と表示されます。
ソースですが関連するところを書くと
#include <windows.h>
#include <string.h>
#include <dshow.h> // DirectShowのヘッダファイル
#include <qedit.h> // SampleGrabber用
#include <conio.h> // getch()用
#include <stdio.h>
#include "list502.h"
#pragma warning(disable:4996)
void main( void )
{
// インターフェース用のポインタ
// フィルタグラフ用
IGraphBuilder *pigb = NULL;
IMediaControl *pimc = NULL;
IMediaSeeking *pims = NULL;
// サンプルグラバ用
IBaseFilter *pF = NULL;
ISampleGrabber *pGrab = NULL; // これらは後で解放すること。
IMG0 img00; // 表示ウィンドウ用の構造体
BYTE *buffer; // 外部バッファ
AM_MEDIA_TYPE amt;
WCHAR filename[ MAX_PATH ];
HRESULT hr;
img00.hi = (HINSTANCE)GetWindowLong( HWND_DESKTOP, GWL_HINSTANCE );
img00.x = 100; img00.y = 100;
gr_reg(); // 表示用ウィンドウの登録
CoInitialize(NULL); // COMの準備
// FilterGraphの初期化
CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pigb);
// フィルタグラフのインターフェースを得る
pigb -> QueryInterface( IID_IMediaControl, (void **)&pimc );
pigb -> QueryInterface( IID_IMediaSeeking, (void **)&pims );
// グラバフィルタを作りフィルタグラフに追加
CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, (LPVOID *)&pF);
pF -> QueryInterface( IID_ISampleGrabber, (void **)&pGrab );
pigb -> AddFilter( pF, L"SamGra" );
// グラバフィルタの挿入場所の特定のための設定
ZeroMemory( &amt, sizeof(AM_MEDIA_TYPE) );
amt.majortype = MEDIATYPE_Video;
amt.subtype = MEDIASUBTYPE_RGB24;
amt.formattype = FORMAT_VideoInfo;
pGrab -> SetMediaType(&amt);
OPENFILENAME fname;
static char fn[256];
memset(&fname, 0, sizeof(OPENFILENAME));
fname.lStructSize = sizeof(OPENFILENAME);
fname.lpstrFile = fn; // パス付きファイル名が格納されるアドレス
fname.nMaxFile = sizeof(fn);
fname.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if( ! GetOpenFileName( &fname ) ) return ;
// ファイル名の変換
MultiByteToWideChar( CP_ACP, 0, fn, -1, filename, MAX_PATH );
// 再生するファイルを指定、この時点で使用するフィルタが決まる
hr = pigb -> RenderFile( filename, NULL );
printf( "RenderFile hr %x\n", hr );
if(hr != 0) return;
ポイント箇所は
WCHAR filename[ MAX_PATH ];
hr = pigb -> RenderFile( filename, NULL );
printf( "RenderFile hr %x\n", hr );
hrが0だと、成功を意味していると思います。それ以外だとリターンで終了します。
強引にhr=0で強引に0にしてみたら
Just-in-Timeで例外が発生しました。これは強引に0にしたからだと思います。
%xは16進数を意味しているはずです。
余談ですが、動画ファイル以外(テキストファイルなど)を開くと
hr=80040625と出ます。
この数字(16進)はエラーコードなのでしょうか?
どうかhrが40258になってしまう理由および解決策をお教え下さい。
お願いいたします。