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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема directshow 
:(
    Опции темы
vdm
Дата 15.2.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



хочу воспользеватся интерфейсом, но при присваивании графу, указатель не инициализируется, почему?
hr = m_pGraph->QueryInterface(IID_IAMCameraControl, (void **)&pAMCameraControl);
pAMCameraControl = 0x00000000 в чём дело? Может нужно какой нибудь фильтр вызвать перед этим?
PM MAIL   Вверх
Greeen
Дата 16.2.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 16.2.2008, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



//Вот фильтр:

hr = AddFilterByName(m_pGraph, m_ChipNames[i], CLSID_VideoInputDeviceCategory, &pFilter);

//pFilter получил значение

hr = pFilter->QueryInterface(IID_IAMAnalogVideoDecoder, (void**)&pAMAnalogVideoDecoder);

hr = pAMAnalogVideoDecoder->put_TVFormat(AnalogVideo_PAL_B);

//Здесь, пока всё нормально, при запуске устанавливает PAL_B

hr = pFilter->QueryInterface(IID_IAMVideoControl, (void**)&pAMVideoControl);
//Уже здесь при включеном дебугере фиксирую, что переменная pAMVideoControl не //инициализирована (0x00000000), дальше кидает ошибку directshow конструктора...

В чём дело? smile






PM MAIL   Вверх
Greeen
Дата 16.2.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А ты уверен что фильтр поддерживает данный интерфейс? У тебя ведь тв-тюнер?


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 16.2.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Greeen @ 16.2.2008,  18:20)
А ты уверен что фильтр поддерживает данный интерфейс? У тебя ведь тв-тюнер?

Ты задал очень хороший вопрос smile 

У меня "Video Capture from camera" тюнер. То-есть поддерживает подключение нескольких камер и передают захваченое изображение.

Я не уверен поддерживает ли он этот интерфейс, но и не знаю, как проверить... Может ты знаешь?
PM MAIL   Вверх
Greeen
Дата 16.2.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотри что возвращает QueryInterface. Повторюсь, скорее всего фильтр не поддерживает данный интерфейс. Прочитав некоторые твои посты, я догадываюсь что тебя заинтересовала настройка CameraControl_Roll, т.е. ты хочешь повернуть изображение. Так?


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 16.2.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да, Ты прав. Именно это меня и интересует. А как можно узнать, поддерживает ли фильтр тот или инной интерфейс? И как правельно посмотреть, что возвращает QueryInterface?

Это сообщение отредактировал(а) vdm - 16.2.2008, 22:44
PM MAIL   Вверх
Greeen
Дата 16.2.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vdm @  16.2.2008,  22:42 Найти цитируемый пост)
А как можно узнать, поддерживает ли фильтр тот или инной интерфейс?

Проверь результат QueryInterface на равенство E_NOINTERFACE.

Цитата(vdm @  16.2.2008,  22:42 Найти цитируемый пост)
Именно это меня и интересует

Посмотри интерфейс IVMRMixerControl (особенно его метод SetOutputRect). Запросить его можно у рендерера (VMR).


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 17.2.2008, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



smile Так а при чём здесь IVMRMixerControl, когда перед этим ты упомянул CameraControl_Roll который принадлежит IAMCameraControl интерфейсу.

До этого я выводил через простой Video Renderer, если поменяю выход на Video Mixer Renderer, неполадок быть не должно?


Это сообщение отредактировал(а) vdm - 17.2.2008, 00:22
PM MAIL   Вверх
Greeen
Дата 17.2.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vdm @  17.2.2008,  00:08 Найти цитируемый пост)
неполадок быть не должно

нет, проблем не будет..

Цитата(vdm @  17.2.2008,  00:08 Найти цитируемый пост)
Так а при чём здесь IVMRMixerControl, когда перед этим ты упомянул CameraControl_Roll который принадлежит IAMCameraControl интерфейсу.

ты же убедился что фильтр твоего девайса не поддерживает IAMCameraControl...


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 17.2.2008, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Описание:
The SetOutputRect method sets the position of this stream within the composition rectangle.

При чём здесь SetOutputRect? На сколько я понял он выстанавливает позицию окна в которой будет видео поток. Когда мне нужно повернуть изображение на 90 градусов.

Это сообщение отредактировал(а) vdm - 17.2.2008, 00:27
PM MAIL   Вверх
Greeen
Дата 17.2.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А ты посмотри статью "Positioning and Moving Video Rectangles in Composition Space" и сразу станет ясно...  smile 
Возможности проверить нет, но как то так:
Код

NORMALIZEDRECT rect;
rect.left = 1.0;
rect.top = 0.0;
rect.right = 0.0;
rect.bottom = 1.0;
SetOutputRect(0, &rect);

Не забудь для VMR указать число потоков (IVMRFilterConfig::SetNumberOfStreams) = 1.


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 17.2.2008, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как у тебя только терпения хватает со мной возиться... smile

"Не забудь для VMR указать число потоков (IVMRFilterConfig::SetNumberOfStreams) = 1."

А зачем? получается мне придётся ещё один интерфейс вызывать (IVMRFilterConfig)    Число потоков это Pin 'ы Функция просит DWORD значение. На сколько я понял надо получить количество Pin'ов выводимое VMR renderer'ом? Как это сделать и обязательно ли это? smile



Это сообщение отредактировал(а) vdm - 17.2.2008, 01:04
PM MAIL   Вверх
Greeen
Дата 17.2.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vdm @  17.2.2008,  01:03 Найти цитируемый пост)
А зачем? 

A value of 1 is valid for dwMaxStreams. This value does not cause any extra pins to be created, but it does force the VMR to go into "mixer mode."

Цитата(vdm @  17.2.2008,  01:03 Найти цитируемый пост)
получается мне придётся ещё один интерфейс вызывать (IVMRFilterConfig) 

А что, трудно интерфейс получить?  smile 

Цитата(vdm @  17.2.2008,  01:03 Найти цитируемый пост)
На сколько я понял надо получить количество Pin'ов выводимое VMR renderer'ом?

Зачем?! Если не будешь микшировать потоки просто поставишь 1 для числа потоков и тебе для этого совершенно не нужно знать сколько их было до тебя!


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
vdm
Дата 17.2.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет. А ты уверен, что после вызова интерфейса, IVMRFilterConfig::SetNumberOfStreams(1) это прокатит? Ведь функция ждёт DWORD значения..
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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