Опять про amcap и directshow. Как добавить кодек?
От: JulFar Украина  
Дата: 25.02.03 13:19
Оценка:
Здравствуйте.
1.Как заставить amcap сжимать видео? Желательно иметь возможность выбрать, каким кодеком сжимать. Кто разбирался с амкапом, подскажите, в него заложены возможности сжатия, но они не работают,
(hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved,
gcap.pVCap, IID_IAMVideoCompression, (void **)&gcap.pVC)) или это не то? Как в тот граф, который там строится, добавить свои фильтры? А может, есть пример, лучший, чем amcap?
2. Еще есть такой интересный вопрос: когда мы на avimux-е смешиваем СЖАТЫЕ видео и звук, как обеспечить синхронизацию? Я пробовала строить такой граф в графедите, синхронизации никакой.
Спасибо.
Re: Опять про amcap и directshow. Как добавить кодек?
От: Saruman Россия none
Дата: 26.02.03 04:36
Оценка:
Здравствуйте, 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>Спасибо.

Самый простой способ добиться синхронизации это не прерывать работу транскодирующего графа, т.е. дать ему доработать до конца. Если прервать работу графа, то появляются всякие неожиданности типа недописанного звука или видео.
Типа того что как бы...
Re[2]: Опять про amcap и directshow. Как добавить кодек?
От: cpp Россия http://www.elecard.com
Дата: 26.02.03 06:03
Оценка:
Уважаемый, Saruman,

успользуйте теги в исходниках, иначе ваш код совсем не интересно читать.


int main()
{
return 0;
}
Сергей.
Re: Опять про amcap и directshow. Как добавить кодек?
От: Денис Майдыковский Россия http://www.maydyk.com
Дата: 26.02.03 11:37
Оценка:
Здравствуйте, JulFar, Вы писали:

Как перечислить кодект тебе уже расскзали. Для того что-бы добавить выбранный кодек см. функцию ICaptureGraphBuilder2::RenderStream(). Предпослений параметр и есть предварительно созданный когдек.
Re: Опять про amcap и directshow. Как добавить кодек?
От: JulFar Украина  
Дата: 27.02.03 10:15
Оценка:
Большое спасибо всем, кто откликается. Кто еще может что-то сказать? Очень интересует мнение специалистов насчет синхронизации. Я пишу видео с usb — камеры, аудио соответственно с аудио входа. Короче, записываем, что происходит в помещении. Обязательно надо сжимать. Пользователь сам решает, когда начать запись, когда остановить.
Re[2]: Опять про amcap и directshow. Как добавить кодек?
От: JulFar Украина  
Дата: 27.02.03 15:32
Оценка:
Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>Здравствуйте, JulFar, Вы писали:


ДМ>Как перечислить кодект тебе уже расскзали. Для того что-бы добавить выбранный кодек см. функцию ICaptureGraphBuilder2::RenderStream(). Предпослений параметр и есть предварительно созданный когдек.


Наконец дошло... Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.