Я использую компонент 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?