- 1 名前:デフォルトの名無しさん [2006/11/08(水) 00:25:56 ]
- 前スレ
pc8.2ch.net/test/read.cgi/tech/1026666092/
- 98 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:23 ]
- 今、WMVを無圧縮AVIにするプログラムを作っているのですが
(最終的に別のソフトでxvidでmp4にする予定) 出力されるAVIが映像の再生時間だけ2倍になってしまいます (音は普通に再生) Directshowでの調整がうまくいかなかったので一度AVI作成後にRateとScaleとMicroSecPerFrameを調整して AVI状態ならずれの修正はできたのですが、それをmp4に変換すると再生がおかしくなってしまい 原因がつかめなかったのでDirectshowでAVI作成するところまでもどってきたのですが Grapheditでマスターストリーム指定で30秒くらいのファイル一個だけですがうまくいったので<wmv9 IConfigAviMuxをソースに追加してみてSetMasterStreamが成功はしているのですが 結果に反映されてくれません。 ソースは以下のようなものなのですがどこがいけないのでしょうか ------------------------------------------------------------------------- IGraphBuilder*pGraph= NULL; ICaptureGraphBuilder2*pBuilder= NULL; IBaseFilter*pSrc= NULL; IBaseFilter*pMux= NULL; IBaseFilter*pAudioDec= NULL; IBaseFilter*pAVIDec= NULL; IPin*pPinIn= NULL; IPin*pPinOut= NULL; IMediaSeeking*pSeek= NULL; IMediaSeeking*pRate= NULL; IMediaEvent*pMediaEvent= NULL; IMediaControl*pMediaControl; longevCode;
- 99 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:55 ]
- CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraph); CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&pBuilder); IBaseFilter *pAVIMux =NULL;//+id{CLSID_AVI mux}_GUID pAVIMux = searchFilter(pGraph, L"AVI Mux" ); IConfigInterleaving *pConf = NULL; IConfigAviMux *pConfMux = NULL; pGraph->AddFilter(pAVIMux, L"AVI Mux"); LONG lo = -1; pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, OutputFile, &pMux, NULL)); pBuilder->GetFiltergraph(&pGraph)); pGraph->AddSourceFilter( InputFile, L"SourceFilter", &pSrc)); pAVIDec = AVI Decompressorフィルタ取得 pAudioDec = WMAudio Decoder DMOフィルタ取得 pGraph->AddFilter(pAVIDec, L"AVI Decompressor"); pGraph->AddFilter(pAudioDec, L"WMAudio Decoder DMO"); pPinOut = GetPin(pSrc, PINDIR_OUTPUT); pPinIn = GetPin(pAudioDec, PINDIR_INPUT); pGraph->Connect(pPinOut, pPinIn); pBuilder->RenderStream( NULL, NULL, pSrc, pAVIDec, pMux );
- 100 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:10:19 ]
- pBuilder->RenderStream( NULL, NULL, pSrc, NULL, pMux );
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pMediaEvent); pMux->QueryInterface(IID_IMediaSeeking, (void**)&pSeek); CLSID id; pAVIMux->GetClassID(&id); CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux); pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux); pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux); pConfMux->GetMasterStream(&lo); pConfMux->SetMasterStream(1); pConfMux->GetMasterStream(&lo); if (pMediaControl->Run() == S_OK) { 途中経過表示など } //終了処理 if(pRate != NULL) pRate->Release(); if(pConf != NULL) pConf->Release(); if(pAVIMux != NULL) pAVIMux->Release(); if(pConfMux != NULL) pConfMux->Release(); if(pAudioDec != NULL) pAudioDec->Release(); if(pAVIDec != NULL) pAVIDec->Release(); if(pGraph != NULL) pGraph->Release(); if(pBuilder != NULL) pBuilder->Release();
- 101 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:11:22 ]
- if(pSrc != NULL) pSrc->Release();
if(pMux != NULL) pMux->Release(); if(pMediaEvent != NULL) pMediaEvent->Release(); if(pSeek != NULL) pSeek->Release(); if(pMediaControl != NULL) pMediaControl->Release(); if(pPinIn != NULL) pPinIn->Release(); if(pPinOut != NULL) pPinOut->Release(); CoUninitialize(); ----------------------------------------------------------------------- いろいろ試行錯誤していたので少し読みにくくてもうしわけありません。
- 102 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:21:22 ]
- CLSID id;
pAVIMux->GetClassID(&id); CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux); pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux); pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux); の辺りを主にいじっていました(コードを実行する場所をかえたりなども)
|

|