Здравствуйте, JulFar, Вы писали:
JF>Здравствуйте. JF>1.Как заставить amcap сжимать видео? Желательно иметь возможность выбрать, каким кодеком сжимать. Кто разбирался с амкапом, подскажите, в него заложены возможности сжатия, но они не работают, JF>(hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, JF> gcap.pVCap, IID_IAMVideoCompression, (void **)&gcap.pVC)) или это не то?
Вот таким образом я перебирал видео компрессоры в поисках нужного мне
ICreateDevEnum *pSysDevEnum = NULL;
IEnumMoniker *pEnumCat = NULL;
ULONG cFetched = 0;
IBaseFilter* filter;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum,(void **)&pSysDevEnum);
if (FAILED(hr))
{
MessageBox("Can't create System Device Enumerator");
return;
}
hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnumCat, 0);
if (FAILED(hr))
{
pSysDevEnum->Release();
MessageBox("Can't create Class Enumerator");
return;
}
IMoniker *pMoniker[100];
for ( int j = 0; j < 100; j++)
pMoniker[j] = 0;
pEnumCat->Reset();
pEnumCat->Next(100, pMoniker, &cFetched);
filter = 0;
for ( ULONG i = 0; i < cFetched; i++)
{
hr = pMoniker[i]->BindToObject(0, 0, IID_IBaseFilter, (void **)&filter);
if (SUCCEEDED(hr))
{
//filter->чего надо с ним делать
}
}
for ( i =0; i < cFetched; i++) pMoniker[i]->Release();
if (pEnumCat) pEnumCat->Release();
if (pSysDevEnum) pSysDevEnum->Release();
>Как в тот граф, который там строится, добавить свои фильтры?
С помощью IGraphBuilder'а добавляешь свой фильтр в пустой граф, потом рендеришь файл, и если с фильтром все нормально, то он сам подцепится куда нужно... >А может, есть пример, лучший, чем amcap?
Кто такой амкап, я не знаю, но проще самому собирать граф с помощью интерфейса IGraphBuilder
JF>2. Еще есть такой интересный вопрос: когда мы на avimux-е смешиваем СЖАТЫЕ видео и звук, как обеспечить синхронизацию? Я пробовала строить такой граф в графедите, синхронизации никакой. JF>Спасибо.
Самый простой способ добиться синхронизации это не прерывать работу транскодирующего графа, т.е. дать ему доработать до конца. Если прервать работу графа, то появляются всякие неожиданности типа недописанного звука или видео.