Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по DirectShow. Не могу создать "WMAudio Decoder DMO" 
:(
    Опции темы
AndreySol
Дата 4.6.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Пробую создать для добавления в граф фильтр на основе "WMAudio Decoder DMO":
Код

HRESULT hr;
GUID CLSID_WMADecoder;
UuidFromString((unsigned char*)"2EEB4ADF-4578-4D10-BCA7-BB955F56320A", &CLSID_WMADecoder);
IBaseFilter *pAddFilter;
hr = CoCreateInstance(CLSID_WMADecoder, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**) &pAddFilter);
if(hr != S_OK)
{
    CString szError = "";
    TCHAR szErr[MAX_ERROR_TEXT_LEN];
    DWORD dwRes = AMGetErrorText(hr, szErr, MAX_ERROR_TEXT_LEN);
    if(dwRes == 0)
        szError.Format("Неизвестная ошибка: 0x%2x", hr);
    else
    {    CString szMessage = szErr;
        szError.Format("Произошла ошибка DirectShow:\n\n%s", szMessage);}
    MessageBox(szError, TEXT("Ошибка CoCreateInstance WMADecoder!"), MB_OK | MB_ICONERROR);
}

получаю описание ошибки: "Интерфейс не поддерживается", а в GraphEdit из DXSDK этот фильтр нормально добавляется и прекрасно работает (вообще он нужен для воспроизведения .wma и .asf файлов).
Че делать ? 
PM MAIL   Вверх
p0s0l
Дата 8.6.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Так ты создаешь объект DMO (DirectX Media Object), а это не фильтр DirectShow (хотя схож по назначению), его в граф напрямую не засунешь, и поэтому запрашиваемый тобой интерфейс IBaseFilter он не поддерживает... 
Если создавать DMO, то нужно запрашивать не IBaseFilter, а IMediaObject, и тогда с DMO можно работать вручную (без участия DirectShow), установив параметры потоков и передавая ему данные. Вобщем, тут в MSDN об этом хорошо написано:
http://msdn.microsoft.com/library/default....ediaObjects.asp

А в DirectShow же есть специальный фильтр-обертка, который позоволяет использовать объекты DMO в графе - это "DMO Wrapper filter". Этот фильтр берет на себя настройку объекта, передачу и прием данных. 
В общем, нужно создать этот фильтр и вызвать у него метод Init, передав GUID DMO-объекта и его категории:
http://msdn.microsoft.com/archive/default....apperfilter.asp

Т.е. будет примерно так:
Код

// Create the DMO Wrapper filter.
IBaseFilter *pFilter;
HRESULT hr = CoCreateInstance(CLSID_DMOWrapperFilter, NULL, 
    CLSCTX_INPROC, IID_IBaseFilter, (void **)&pFilter);

if (SUCCEEDED(hr)) 
{
    IDMOWrapperFilter *pWrap;
    hr = pFilter->QueryInterface(IID_IDMOWrapperFilter, (void **)&pWrap);

    if (SUCCEEDED(hr)) {     // Initialize the filter.
        hr = pWrap->Init(CLSID_CWMADecMediaObject, CLSID_LegacyAmFilterCategory); 
        pWrap->Release();
...
    }
// кстати, CLSID_CWMADecMediaObject можно не объявлять вручную, он должен быть в wmcodecids.h
 


--------------------
С уважением, г-н Посол.
PM   Вверх
AndreySol
Дата 11.6.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: нет
Всего: 1



Спасибо, все понятно. Вообще мне что-то про DMO Wrapper попадалось в DXSDK,  да видно пропустил. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.2009 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.