Directshow текущее положение AVIMUX - PullRequest
1 голос
/ 23 мая 2019

Я использую компонент winsoft WCamera с C ++ Builder и хотел бы попытаться получить текущую временную позицию из части AVIMUX графика Directshow.Capture работает нормально, но когда я смотрю на сгенерированный файл, он всегда кажется дольше, чем затраченное мной время с использованием GetTickCount.

Поскольку компонент WCamera не предоставляет текущую позицию мультимедиа, я использую GetTickCount, чтобы дать мнеприблизительная позиция в записи видео, чтобы отметить события, которые произошли.Однако я нахожу, что видео всегда длиннее, чем время, которое я измеряю.Я хотел бы попытаться получить текущую позицию от AVI MUX и посмотреть, является ли это более точным, но я не уверен, как это сделать.

Я пытался


    HRESULT FindFilterInterface(
        IGraphBuilder *pGraph, // Pointer to the Filter Graph Manager.
        REFGUID iid,           // IID of the interface to retrieve.
        void **ppUnk)          // Receives the interface pointer.
{
    if (!pGraph || !ppUnk) return E_POINTER;

    HRESULT hr = E_FAIL;
    IEnumFilters *pEnum = NULL;
    IBaseFilter *pF = NULL;
    if (FAILED(pGraph->EnumFilters(&pEnum)))
    {
        return E_FAIL;
    }
    // Query every filter for the interface.
    while (S_OK == pEnum->Next(1, &pF, 0))
    {
        hr = pF->QueryInterface(iid, ppUnk);
        pF->Release();
        if (SUCCEEDED(hr))
        {
            break;
        }
    }
    pEnum->Release();
    return hr;
}

Но этовыдает ошибку

[bcc64 Error] main.cpp (29): неконстантная lvalue-ссылка на тип '_di_IEnumFilters' (также известная как DelphiInterface) не может привязаться к временному типу Wdirectshow9 :: IEnumFilters **'WDirectShow9.hpp (1392): передача аргумента параметру' ppEnum 'здесь [ошибка bcc64] main.cpp (34): неконстантная ссылка lvalue на тип' _di_IBaseFilter '(он же DelphiInterface) не может привязаться к временному типу'Wdirectshow9 :: IBaseFilter **' WDirectShow9.hpp (1402): передача аргумента параметру 'ppFilter' здесь

hpp-файл определяет это как

    __interface IEnumFilters;
typedef System::DelphiInterface<IEnumFilters> _di_IEnumFilters;

Любые предложения относительно того, как я могуполучить доступ к IEnumFilters?

...