Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2014, 15:31   #21
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Переписывать интерфейсы с Си++ на Дельфи будет слишком долго, т.к. я в Си в этом не силен.
Цитата:
Сообщение от raxp Посмотреть сообщение
он может лежать в виде *.AX файла, также может быть в ресурсах утилиты и выгружаться прямо в память без сохранения на диск.
есть такой. "dcm800.ax" Как его можно подгрузить?
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 30.06.2014, 15:56   #22
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

- не так уж и долго, интерфейсы DirectShow одинаковы, что для Си, что для Delphi
- его достаточно инсталлировать (regsvr32) в системе (а возможно он уже инсталлирован, да вы его не используете) и он будет доступен в списке фильтров в том же графэдите для создания графа, а значит и в своей программе.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.07.2014, 08:36   #23
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
- его достаточно инсталлировать (regsvr32) в системе (а возможно он уже инсталлирован, да вы его не используете) и он будет доступен в списке фильтров в том же графэдите для создания графа, а значит и в своей программе.
В списке нашел, соединилось в графэдите, работает. Буду пробовать подключить.
https://dl.dropboxusercontent.com/u/24818729/3.jpg
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 01.07.2014, 14:19   #24
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Правильной ли будет такая интерпретация?
Код:
	DEFINE_GUID(IID_IDcm800, 0x7a3cfafd, 0x3168, 0x4fa1, 0x99, 0x3a, 0x11, 0xc0, 0x24, 0xf2, 0xb0, 0xb);

	enum eDcm800Size{
		eDcm800Size_3264_2448,
		eDcm800Size_1600_1200,
		eDcm800Size_1280_960,
		eDcm800Size_1024_768,
		eDcm800Size_640_480
	};
	
	typedef void (__cdecl *PFUN_AutoWhiteBalanceCallback)(int RedGain, int GreenGain, int BlueGain, void* Context);

DECLARE_INTERFACE_(IDcm800, IUnknown)
    {
		STDMETHOD(get_PreviewSize) (THIS_ enum eDcm800Size* Dcm800Size) PURE;
		STDMETHOD(put_PreviewSize) (THIS_ enum eDcm800Size Dcm800Size) PURE;
		STDMETHOD(get_StillSize) (THIS_ enum eDcm800Size* Dcm800Size) PURE;
		STDMETHOD(put_StillSize) (THIS_ enum eDcm800Size Dcm800Size) PURE;
		STDMETHOD(get_AutoExposure) (THIS_ BOOL* bAutoExposure) PURE;
		STDMETHOD(put_AutoExposure) (THIS_ BOOL bAutoExposure) PURE;
Получается:
Код:
	const
	  IID_IDcm800 : TGUID = (D1:$7A3CFAFD; D2:$3168; D3:$4FA1; D4:($99, $3A, $11, $C0, $24, $F2, $B0, $B));

type
  eDcm800Size=(eDcm800Size_3264_2448,
		eDcm800Size_1600_1200,
		eDcm800Size_1280_960,
		eDcm800Size_1024_768,
		eDcm800Size_640_480);

   AutoWhiteBalanceCallback = procedure (RedGain: Integer; GreenGain: Integer; BlueGain: Integer; Context: Pointer);

  IDcm800 = interface(IUnknown)
  ['{7A3CFAFD-3168-4fa1-993A-11C024F2B00B}']
  Function GetPreviewSize(var Dcm800Size : ^eDcm800Size): LongInt; stdcall;
  Function PutPreviewSize(const Dcm800Size : eDcm800Size): LongInt; stdcall;
  Function GetStillSize(var Dcm800Size : ^eDcm800Size): LongInt; stdcall;
  Function PutStillSize(const Dcm800Size : eDcm800Size): LongInt; stdcall;
  Function GetAutoExposure(var bAutoExposure : ^boolean): LongInt; stdcall;
  Function PutAutoExposure(const bAutoExposure : boolean): LongInt; stdcall;
...
Еще вопрос: а можно ли как-то соединить этот фильтр без этих "упражнений", указав GUID, или название? Ведь Графэдит же умеет...
Nostra Sunt

Последний раз редактировалось Daemvil; 01.07.2014 в 15:19.
Daemvil вне форума Ответить с цитированием
Старый 02.07.2014, 13:09   #25
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
(а возможно он уже инсталлирован, да вы его не используете) и он будет доступен в списке фильтров в том же графэдите для создания графа, а значит и в своей программе.
Подскажи, пожалуйста, насчет правильной интерпретации кода, у меня не выходит ничего А тут, похоже, кроме тебя никто в DirectShow хорошо не разбирается.
Nostra Sunt
Daemvil вне форума Ответить с цитированием
Старый 14.08.2014, 15:18   #26
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Уважаемые форумчане! такой вопрос: если интерфейс описан не до конца, то можно ли его получить(доступ к описанным методам) по queryInterface?
Переписал на Дельфи несколько методов из интерфейса для камеры:
Код:
	
{$HPPEMIT '#include "dcm800.h"'}
.......
  IID_IDcm800 : TGUID = (D1:$7A3CFAFD;D2:$3168;D3:$4FA1;D4:($99,$3A,$11,$C0,$24,$F2,$B0,$B));
  {$EXTERNALSYM IID_IDCM800}
.......
eDCM800Size = (eDcm800Size_3264_2448, eDcm800Size_1600_1200, eDcm800Size_1280_960, eDcm800Size_1024_768, eDcm800Size_640_480);

  pDCM800Size = ^eDCM800Size;

  {$HPPEMIT 'typedef System::DelphiInterface<IDcm800> _di_IDcm800;'}
  {$EXTERNALSYM IDcm800}
  IDcm800 = interface(IUnknown)
	  ['{7A3CFAFD-3168-4fa1-993A-11C024F2B00B}']
	  function get_PreviewSize(out DCM800Size:pDCM800Size): HRESULT; stdcall;
    function put_PreviewSize(    DCM800Size:eDCM800Size): HRESULT; stdcall;
	  function get_StillSize(out DCM800Size:pDCM800Size): HRESULT; stdcall;
    function put_StillSize(    DCM800Size:eDCM800Size): HRESULT; stdcall;
	  function get_AutoExposure(out bAutoExposure:PBoolean): HRESULT; stdcall;
    function put_AutoExposure(    bAutoExposure:Boolean): HRESULT; stdcall;
	  function get_ExposureTarget(out Target:PByte): HRESULT; stdcall;
    function put_ExposureTarget(    Target:Byte): HRESULT; stdcall;
	  function get_ExposureTime(out Time:PWord): HRESULT; stdcall;
    function put_ExposureTime(    Target:Word): HRESULT; stdcall;
  end;
queryInterface выдает ошибку HRESULT 0x80004002 "интерфейс не поддерживается"(E_NOINTERFACE). Из-за чего она может быть?
Nostra Sunt

Последний раз редактировалось Daemvil; 14.08.2014 в 15:35.
Daemvil вне форума Ответить с цитированием
Старый 14.08.2014, 17:53   #27
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Либо интерфейс действительно не поддерживается либо не правильно GUID написали.
Человек_Борща вне форума Ответить с цитированием
Старый 14.08.2014, 19:40   #28
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Либо интерфейс действительно не поддерживается либо не правильно GUID написали.
Но программа ScopePhoto его как-то использует!
Сравнивал 10 раз с прилагаемым к камере dcm800.h, все один к одному. В графстудии не нашел возможности подключить интерфейс, там в источнике в разделе Interfaces указаны другие хидеры, совсем не dcm800.h, а strmif.h и objidl.h. И IID другие...
в сишном примере для камеры версии dcm310 (для 800 все аналогично) сделано так:
Код:
void DoMySettings(IBaseFilter* pSourceFilter)
{
	IDcm310* pIDcm310;
	HRESULT hr = pSourceFilter->QueryInterface(IID_IDcm310, (void**)&pIDcm310);
	if (SUCCEEDED(hr) && pIDcm310)
	{
		/* Now, we get the interface, so we can do anything we want to do */
		pIDcm310->put_WhiteBlack(TRUE);
		
		BYTE bGamma;
		pIDcm310->get_Gamma(&bGamma);
		bGamma += 10;
		pIDcm310->put_Gamma(bGamma);

		/* ...... */
		pIDcm310->Release();
	}
}
я делаю так:
Код:
  FDCM800             :IDCM800;
..........
  Result:=FBaseFilter.QueryInterface(IID_IDCM800, FDCM800);
В графстудии кстати фильтр dcm800.ax подключается, но там та же картина, совсем не dcm800.h...
Nostra Sunt

Последний раз редактировалось Daemvil; 14.08.2014 в 20:48.
Daemvil вне форума Ответить с цитированием
Старый 14.08.2014, 21:07   #29
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Но программа ScopePhoto его как-то использует!
Я про то, что перевели описание GUID наверное не совсем так.
Человек_Борща вне форума Ответить с цитированием
Старый 14.08.2014, 22:30   #30
Daemvil
Пользователь
 
Регистрация: 23.12.2009
Сообщений: 56
Сообщение

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Я про то, что перевели описание GUID наверное не совсем так.
Для запроса интерфейса так ли важно точное описание его методов? разве для Query важен не только существующий IID (GUID)?
Nostra Sunt

Последний раз редактировалось Daemvil; 15.08.2014 в 09:31.
Daemvil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Камера opengl 2d gufon Мультимедиа в Delphi 1 09.03.2012 16:42
Камера DirectX sfok3 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.02.2012 21:05
Web камера TacoBell Общие вопросы C/C++ 8 01.10.2010 17:59
Web камера mas96 Компьютерное железо 2 24.09.2010 15:38
direct3d9. Камера. VC++. Crivel Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 08.07.2010 16:36