-
tarakanidze tarakanidzev (27.12.10 20:43) [0]Подскажите почему в данном коде GetStopPosition отдает 0 ?
Вообще требуется создать прогрессбар отображающий процесс конвертирования... если кто то знает способ без GetStopPosition и GetCurrentPosition подскажите плиз.function convert (MXfilename:string;MXFileName_audio:string):boolean;
const ONE_SECOND=10000000;
var
pSourceOut_video : IPin;
pSourceOut_audio : IPin;
pAVI_Mux_IN : IPin;
pAVI_Mux_IN1 : IPin;
pAVI_Mux_OUT : IPin;
FileWriter_IN : IPin;
FileWriter_OUT : IPin;
pDumpIn : IPin;
FMediaSeeking : IMediaSeeking;
Stop, Current: int64;
Duration: int64;
seeking:IMediaSeeking ;
evCode:Integer;
endtime,curenttime:REFERENCE_TIME;
rtEnd,rtStop:int64;
begin
{if opendialog2.Execute then
begin }
//Ñîçäàåì ãðàô
CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IGraphBuilder, pGraphBuilder);
pGraphBuilder.QueryInterface(IID_IMediaSeeking,FMediaSeeking) ;
//Îòêðûâàåì ôàéë âèäåî
pGraphBuilder.AddSourceFilter(StringToOleStr(MXFilename),'',pSourceFile_video);
//Îòêðûâàåì àóäèî
if MXFileName_audio <>'' then pGraphBuilder.AddSourceFilter(StringToOleStr(MXFileName_audio),'',pSourceFile_au dio);
//Ñîçäàåì AVI_MUX
CoCreateInstance(CLSID_AVI_Mux, nil, CLSCTX_INPROC, IID_IBaseFilter, pAVI_Mux);
//Äîáàâëÿåì â ãðàô
pGraphBuilder.AddFilter(pAVI_Mux,'AVI_Mux');
//Ñîçäàåì âèäåî ðåíäåð
CoCreateInstance(CLSID_FileWriter, nil, CLSCTX_INPROC, IID_IBaseFilter, pFileWriter);
//Äîáàâëÿåì â ãðàô
pGraphBuilder.AddFilter(pFileWriter,'FileWriter');
//----------------------------------------------------------//
//ñîåäèíÿåì ôèëüòðû ìåæäó ñîáîé
//----------------------------------------------------------//
//ïîëó÷àåì âûõîä ôàéëà âèäåî è àóäèî
GetPin(pSourceFile_video, PINDIR_OUTPUT,0,pSourceOut_video);
if MXFileName_audio <>'' then GetPin(pSourceFile_audio, PINDIR_OUTPUT,0,pSourceOut_audio);
//ïîëó÷àåì âõîä àâè ìóêñà
GetPin(pAVI_Mux, PINDIR_INPUT,0,pAVI_Mux_IN);
//ñîåäèíÿåì Âèäåî
pGraphBuilder.Connect(pSourceOut_video, pAVI_Mux_IN);
//ïîëó÷àåì âõîä àâè ìóêñà
if MXFileName_audio <>'' then GetPin(pAVI_Mux, PINDIR_INPUT,1,pAVI_Mux_IN);
//ñîåäèíÿåì Àóäèî
if MXFileName_audio <>'' then pGraphBuilder.Connect(pSourceOut_audio, pAVI_Mux_IN);
//ïîëó÷àåì âûõîä àâè ìóêñà
GetPin(pAVI_Mux, PINDIR_OUTPUT,0,pAVI_Mux_OUT);
//ïîëó÷àåì âõîä ôàéë âðàéòåðà
GetPin(pFileWriter, PINDIR_INPUT,0,FileWriter_IN);
//Ñîåäèíÿåì âûõîä àâè ìóêñà è ôàéë âðàéòåðà
pGraphBuilder.Connect(pAVI_Mux_OUT, FileWriter_IN);
(pFileWriter as IFileSinkFilter).SetFileName(StringToOleStr(MXFilename+'.avi'), nil);
pGraphBuilder.QueryInterface(IID_IMediaSeeking, pMediaSeeking);
pGraphBuilder.QueryInterface(IID_IMediaControl, pMediaControl);
pGraphBuilder.QueryInterface(IID_IMediaEvent, pMediaEvent);
pMediaSeeking.GetStopPosition(stop);
showmessage (inttostr(stop));
-
Полвторого (28.12.10 11:16) [1]
> pMediaSeeking
А где ты его объявляешь, если не секрет? -
tarakanidze tarakanidzev (28.12.10 21:31) [2]Объявлен в глобальных переменных в начале кода
Функция работает и ошибок не отдает..... просто GetStopPosition и GetCurrentPosition отдает 0. :( -
Полвторого (28.12.10 22:23) [3]А чем, кстати, не устраивает GetDuration?
Он, судя по http://msdn.microsoft.com/en-us/library/dd407029(v=vs.85).aspx, возвращает нормальный код ошибки, а не тот бред из 3 возможных значений, который возвращает GetStopPosition.
Попробуй заменить, и принять код ошибки.
Далее, как обычно, Гугль в помощь по HRESULT error code.