Не получается получить список фильтров с пом. acmFormatTagEn
От: LordAhriman  
Дата: 24.04.06 18:34
Оценка:
Вот уже который день парюсь с такой задачей. У меня есть рекордер, который работает с WMM и записывает звук с микрофона (для примера). Здесь всё ок. Сохраняется, читается, отображается… Теперь нужно сжать этот звук. Стал использовать ACM. Вроде ничего. Но когда нужно было установить, какие драйверы (кодеки) поддерживают ТЕКУЩИЙ, выбранный пользователем формат записи… Короче – пока я это делаю выкидыванием “системного” окна с помощью acmFormatChoose. Но меня это не устраивает. Хочу иметь нормальный контрол, заполненный форматами. Стал юзать acmFormatTagEnum и acmFormatEnum. При вызове коллбэка происходит AV Бьюсь головой, ничего не могу понять. Ведь как-то же тот диалог получил ФОРМАТЫ? А почему я не могу?
Короче, если кто работал – поделитесь рабочим кодом, плиз, а то это такая, оказывается «магическая» тема – инфы очень мало. Такое ощущение, что никто с ACM не работал…

Если что – вот мой кусок кода:


BOOL CConvertHelper::IsSupports(HACMDRIVERID hadid,WAVEFORMATEX frmt){
    HACMDRIVER hdriver = NULL;
    if(MMSYSERR_NOERROR==acmDriverOpen(&hdriver,hadid,0)){
        ASSERT(hdriver);
    }else 
        return FALSE;
    
    ACMFORMATTAGDETAILS formatdet;
    memset((void*)&formatdet,0,sizeof(formatdet));
    formatdet.cbStruct = sizeof(formatdet);

    HINSTANCE hInst = GetModuleHandle(NULL);

    MMRESULT ret = acmFormatTagEnum(hdriver,&formatdet,
        (ACMFORMATTAGENUMCB)acmFormatTagEnumCallback,(DWORD_PTR)hInst,0);

    if(ret!=MMSYSERR_NOERROR){
        TraceError(ret);
    }

    // TODO:
    return TRUE;
}

BOOL CConvertHelper::acmFormatTagEnumCallback(HACMDRIVERID hadid,LPACMFORMATTAGDETAILS paftd,DWORD_PTR dwInstance,DWORD dwSupport){
    
        TRACE("");
    return TRUE;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.