Support Request #4683
closedEBPRODUCTSUPPORT-1794 Bugfix DirectShowDevice-Filter
Description
Supportanfrage
Ein Kunde hat ein problem mit der Korrekten Auflösung der Webcam beim DirectShowDevice-Filter. Dieses Problem wurde schonmals in einem alten Supportticket behandelt, weswegen wir dem Kunden den Bugfix aus dem Ticket zukommen ließen.
Das Originalticket hatte bei euch wohl die Ticket-ID 17167KDPEI.
Dieser Bugfix funktioniert leider nicht mehr mit der aktuellen ADTF version:
"Leider scheint dieser Bugfix nicht mit der aktuellen ADTF-Version (2.14.2) kompatibel zu sein. Das Filter-Binary des Bugfixes lässt sich nicht in ADTF einbinden und der Source Code kompiliert nicht, da der Bugfix inkompatibel zum ADTF-SDK (2.14.2), genauer zur Klasse cBaseCaptureDevice in capturedevice.h ist.
Ich habe versucht, den Source Code von "common_directshowcapture" der Device Toolbox 2.7.0 zu kompilieren, aber dies ist an Linker-Problemen gescheitert."
Hier der Linker-Fehler:
1>------ Build started: Project: common_directshowcapture, Configuration: Release x64 ------
1> Creating library D:/work/adtf/addons/adtf-device-toolbox/build/src/plugins/common_directshowcapture/Release/common_directshowcapture.lib and object D:/work/adtf/addons/adtf-device-toolbox/build/src/plugins/common_directshowcapture/Release/common_directshowcapture.exp
1>DSRenderer.obj : error LNK2019: unresolved external symbol "public: cdecl CBaseVideoRenderer::CBaseVideoRenderer(struct _GUID const &,char const *,struct IUnknown *,long *)" (??0CBaseVideoRenderer@QEAA@AEBU_GUID
@PEBDPEAUIUnknown@PEAJ@Z) referenced in function "public: __cdecl cDSRenderer::cDSRenderer(class IDSRendererEventSink *)" (??0cDSRenderer
@QEAA@PEAVIDSRendererEventSink@@Z)
@UEAAPEAXI@Z)
1>strmbase.lib(ctlutil.obj) : error LNK2001: unresolved external symbol "void __cdecl operator delete(void *,unsigned __int64)" (??3@YAXPEAX_K@Z)
1>strmbase.lib(amfilter.obj) : error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,unsigned __int64)" (??3@YAXPEAX_K@Z) referenced in function "public: virtual void * __cdecl CDynamicOutputPin::`scalar deleting destructor'(unsigned int)" (??_GCDynamicOutputPin
1>strmbase.lib(renbase.obj) : error LNK2001: unresolved external symbol "void __cdecl operator delete(void *,unsigned __int64)" (??3@YAXPEAX_K@Z)
1>strmbase.lib(wxutil.obj) : error LNK2001: unresolved external symbol "void __cdecl operator delete(void *,unsigned __int64)" (??3@YAXPEAX_K@Z)
1>strmbase.lib(wxlist.obj) : error LNK2001: unresolved external symbol "void __cdecl operator delete(void *,unsigned __int64)" (??3@YAXPEAX_K@Z)
1>strmbase.lib(amfilter.obj) : error LNK2001: unresolved external symbol __std_terminate
1>strmbase.lib(ctlutil.obj) : error LNK2001: unresolved external symbol __std_terminate
1>strmbase.lib(wxutil.obj) : error LNK2019: unresolved external symbol __imp_stdio_common_vswprintf referenced in function "long __cdecl StringCchPrintfW(wchar_t *,unsigned __int64,wchar_t const *,...)" (?StringCchPrintfW@@YAJPEA_W_KPEB_WZZ)
1>D:\work\adtf\addons\adtf-device-toolbox\build\src\plugins\common_directshowcapture\Release\common_directshowcapture.plb : fatal error LNK1120: 4 unresolved externals
2>------ Skipped Build: Project: INSTALL, Configuration: Release x64 ------
2>Project not selected to build for this solution configuration ========== Build: 0 succeeded, 1 failed, 13 up-to-date, 1 skipped ==========
"Die Library (strmbase.lib), in der der Fehler auftritt, wird von Microsoft nur als Source Code zur Verfügung gestellt und wurde von mir daher selbst kompiliert. Ich habe die aktuelle Windows7-Version dieser Library kompiliert, die Bestandteil des Windows7.1-SDKs ist. Vor etlichen Jahren war diese Library aber anscheinend mal Bestandteil des DirectX SDKs.
In der CMakeLists.txt von "common_directshowcapture" (....\adtf\addons\adtf-device-toolbox\src\plugins\common_directshowcapture\CMakeLists.txt) finden sich folgende Code-Zeilen:
find_path(DIRECTX_DIR include/strmbase/amfilter.h) if (DIRECTX_DIR) include_directories(${DIRECTX_DIR}/include) link_directories(${DIRECTX_DIR}/lib) else (DIRECTX_DIR) message(FATAL_ERROR "Could not find DirectX SDK") endif (DIRECTX_DIR)
Der Include-Path "strmbase" existiert nicht in den aktuellen Sourcen von strmbase.lib wie sie im Windows7.1-SDK enthalten sind. Ein aktuelles DirectX SDK wiederum enthält weder Sourcen noch Binaries zu strmbase.lib.Vermutlich erwartet "common_directshowcapture" irgendeine veraltete Version des DirectX SDKs."
Eine idee, wie wir dem Kunden da helfen können?
Lösung
SDK geliefert, Sourcen stehen zur Verfügung.
Files
Related issues