Конференция "Media" » Почему GetStopPosition отдает ноль ??? [D7]
 
  • 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);
    //&#209;&#238;&#231;&#228;&#224;&#229;&#236; AVI_MUX
    CoCreateInstance(CLSID_AVI_Mux, nil, CLSCTX_INPROC, IID_IBaseFilter, pAVI_Mux);
    //&#196;&#238;&#225;&#224;&#226;&#235;&#255;&#229;&#236; &#226; &#227;&#240;&#224;&#244;
    pGraphBuilder.AddFilter(pAVI_Mux,'AVI_Mux');
    //&#209;&#238;&#231;&#228;&#224;&#229;&#236; &#226;&#232;&#228;&#229;&#238; &#240;&#229;&#237;&#228;&#229;&#240;
    CoCreateInstance(CLSID_FileWriter, nil, CLSCTX_INPROC, IID_IBaseFilter, pFileWriter);
    //&#196;&#238;&#225;&#224;&#226;&#235;&#255;&#229;&#236; &#226; &#227;&#240;&#224;&#244;
    pGraphBuilder.AddFilter(pFileWriter,'FileWriter');
    //----------------------------------------------------------//
    //&#241;&#238;&#229;&#228;&#232;&#237;&#255;&#229;&#236; &#244;&#232;&#235;&#252;&#242;&#240;&#251; &#236;&#229;&#230;&#228;&#243; &#241;&#238;&#225;&#238;&#233;
    //----------------------------------------------------------//
    //&#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226;&#251;&#245;&#238;&#228; &#244;&#224;&#233;&#235;&#224; &#226;&#232;&#228;&#229;&#238; &#232; &#224;&#243;&#228;&#232;&#238;
    GetPin(pSourceFile_video, PINDIR_OUTPUT,0,pSourceOut_video);
    if MXFileName_audio <>'' then GetPin(pSourceFile_audio, PINDIR_OUTPUT,0,pSourceOut_audio);
    //&#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226;&#245;&#238;&#228; &#224;&#226;&#232; &#236;&#243;&#234;&#241;&#224;
    GetPin(pAVI_Mux, PINDIR_INPUT,0,pAVI_Mux_IN);
    //&#241;&#238;&#229;&#228;&#232;&#237;&#255;&#229;&#236;  &#194;&#232;&#228;&#229;&#238;
    pGraphBuilder.Connect(pSourceOut_video, pAVI_Mux_IN);
    //&#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226;&#245;&#238;&#228; &#224;&#226;&#232; &#236;&#243;&#234;&#241;&#224;
    if MXFileName_audio <>'' then GetPin(pAVI_Mux, PINDIR_INPUT,1,pAVI_Mux_IN);
    //&#241;&#238;&#229;&#228;&#232;&#237;&#255;&#229;&#236;  &#192;&#243;&#228;&#232;&#238;
    if MXFileName_audio <>'' then pGraphBuilder.Connect(pSourceOut_audio, pAVI_Mux_IN);
    //&#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226;&#251;&#245;&#238;&#228; &#224;&#226;&#232; &#236;&#243;&#234;&#241;&#224;
    GetPin(pAVI_Mux, PINDIR_OUTPUT,0,pAVI_Mux_OUT);
    //&#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226;&#245;&#238;&#228; &#244;&#224;&#233;&#235; &#226;&#240;&#224;&#233;&#242;&#229;&#240;&#224;
    GetPin(pFileWriter, PINDIR_INPUT,0,FileWriter_IN);
    //&#209;&#238;&#229;&#228;&#232;&#237;&#255;&#229;&#236;  &#226;&#251;&#245;&#238;&#228; &#224;&#226;&#232; &#236;&#243;&#234;&#241;&#224; &#232;  &#244;&#224;&#233;&#235; &#226;&#240;&#224;&#233;&#242;&#229;&#240;&#224;
    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.
 
Конференция "Media" » Почему GetStopPosition отдает ноль ??? [D7]
Есть новые Нет новых   [134430   +3][b:0][p:0.009]