Erweiterte Ambilight Windows Software für Adalight (Arduino)
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Rein von der Logik her würde ich sagen, dass auch deine Methode bei 4K in der FPS Rate sinken muss, da 4x so viele Daten. Wüsste nicht wieso das dort anders sein sollte. Hieße dann statt 20-30 FPS nur noch um die 5-8 FPS.
Alternativ ginge sicherlich noch die NVIDIA Capture API sowie das Pendant von AMD dazu. Müsste ich mir aber erst angucken ob ich die überhaupt in so einer nicht 3D Anwendung nutzen könnte, aber das würde ich eher später mal machen als Alternative Auswahl zur Desktop Duplication API.
Alternativ ginge sicherlich noch die NVIDIA Capture API sowie das Pendant von AMD dazu. Müsste ich mir aber erst angucken ob ich die überhaupt in so einer nicht 3D Anwendung nutzen könnte, aber das würde ich eher später mal machen als Alternative Auswahl zur Desktop Duplication API.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Ich bin grad dabei ein Capture-Modul in DirectX zu schreibenHoto hat geschrieben:Rein von der Logik her würde ich sagen, dass auch deine Methode bei 4K in der FPS Rate sinken muss, da 4x so viele Daten. Wüsste nicht wieso das dort anders sein sollte. Hieße dann statt 20-30 FPS nur noch um die 5-8 FPS.
Alternativ ginge sicherlich noch die NVIDIA Capture API sowie das Pendant von AMD dazu. Müsste ich mir aber erst angucken ob ich die überhaupt in so einer nicht 3D Anwendung nutzen könnte, aber das würde ich eher später mal machen als Alternative Auswahl zur Desktop Duplication API.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Also mit der Desktop Duplication API? Für PB? Wenn ja hätte ich da natürlich Interesse daran. ^^
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Vorerst nur mit DirectX9Hoto hat geschrieben:Also mit der Desktop Duplication API? Für PB? Wenn ja hätte ich da natürlich Interesse daran. ^^
Damit bekomme ich relativ konstante ~ 30 FPS (gerendert!).
Mit Threads sollte das natürlich nochmal schneller sein.
Um die Duplication API auszuprobieren brauche ich mehr Zeit.
Auch wenn Microsoft sagt GetFrontBufferData() sei langsam - scheint es immer noch besser als GDI zu sein.
So sieht der Code zum Capturen aus, mit DirectX9 ist das noch recht simple:
Code: Alles auswählen
Procedure.i Frame()
If *Device\GetFrontBufferData(#Null,Target\Surface) = #D3D_OK
If Target\Surface\LockRect(@Target\Locked,#Null,#D3DLOCK_NOSYSLOCK|#D3DLOCK_READONLY|#D3DLOCK_DONOTWAIT) = #D3D_OK
Target\Surface\UnlockRect()
ProcedureReturn Target\Locked\pBits
EndIf
EndIf
EndProcedure
Könnte sogar noch schneller sein.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Ah, ok, ist für meine Zwecke aber immer noch zu langsam. Funktioniert das so überhaupt mit dem normalen Desktop?
Es hat sich vor Jahren ja schon mal Jemand dran versucht, aber ob er das zum laufen bekommen hat? Sind auch Funktionen, die ich noch nie benutzt hab, weiß nicht mal wie man das zum laufen kriegen könnte.
https://www.purebasic.fr/english/viewto ... 13&t=59425
Es hat sich vor Jahren ja schon mal Jemand dran versucht, aber ob er das zum laufen bekommen hat? Sind auch Funktionen, die ich noch nie benutzt hab, weiß nicht mal wie man das zum laufen kriegen könnte.
https://www.purebasic.fr/english/viewto ... 13&t=59425
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Ja es funktioniert mit dem normalen Desktop.Hoto hat geschrieben:Ah, ok, ist für meine Zwecke aber immer noch zu langsam. Funktioniert das so überhaupt mit dem normalen Desktop?
Es hat sich vor Jahren ja schon mal Jemand dran versucht, aber ob er das zum laufen bekommen hat? Sind auch Funktionen, die ich noch nie benutzt hab, weiß nicht mal wie man das zum laufen kriegen könnte.
https://www.purebasic.fr/english/viewto ... 13&t=59425
Leider ist es ohne Treiber fast unmöglich den aktuellen Inhalt des V-RAMs zügig auszulesen.
Viel einfacher und schneller ist es den BackBuffer abzugreifen weshalb viele Capture-Programme bei
Spielen (OpenGL/DX-Anwendungen) auf Hooks zurückgreifen und sonst einfach nur den Desktop blitten.
Microsoft versucht mit der Desktop Duplication API eine Schnittstelle bereitzustellen.
Im Prinzip fällt hier nur das Hooking weg aber ich bezweifle das es schneller ist.
Besser geht es wahrscheinlich nur mit Treibern & Software die speziell dafür gemacht ist wie z.B:
NVIDIAs Capture SDK https://developer.nvidia.com/capture-sdk.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Weil PB lieber Zeit darauf verschwendet eine unpopuläre 3D Engine zu pflegen anstelleHoto hat geschrieben: Es hat sich vor Jahren ja schon mal Jemand dran versucht, aber ob er das zum laufen bekommen hat? Sind auch Funktionen, die ich noch nie benutzt hab, weiß nicht mal wie man das zum laufen kriegen könnte.
https://www.purebasic.fr/english/viewto ... 13&t=59425
PB-Nutzern wichtige OS-APIs/ Interfaces/ Structures bereitzustellen.
Momentan ist vieles nur Häppchenweise (immerhin) vorhanden.
Das ist einer der wenigen Kritikpunkte die ich habe.
Auch z.B. verwendet PureBasic SDL/ GTK aber verwährt den direkten Zugriff!?.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Naja, will jetzt keine Grundsatz Diskussion über PB starten, aber PB ist halt nicht nur Windows. Es ist ja gut, dass man vieles überhaupt ans laufen kriegt, ist ja auch nicht selbstverständlich. Bringt aber halt nur meist etwas, wenn man mehr als nur PureBasic kann.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Ich hab mal eine DLL zum rumprobieren erstellt.
Bsp.:
Die Library ist hier zu finden: https://www.dropbox.com/s/zcb6vdnxnkuhe ... L.zip?dl=0
Edit: Jetzt gibt es eine x86 & x64 Version!
Bsp.:
Code: Alles auswählen
;dxsc v.alpha by Mijikai
Import "dxsc64.lib"
dxscInit.i(hWnd.i) ;init directx 9 & screen capture
dxscWidth.i() ;get capture width (screen)
dxscHeight.i() ;get capture height (screen)
dxscFrame.i() ;capture frame to memory (returns abgr buffer)
dxscPixel.i(X.i,Y.i) ;get the xy pixel color within a frame (returns rgb)
dxscSaveBMP.i(File.s) ;make a screenshot and save it as bmp
dxscSaveJPG.i(File.s) ;make a screenshot and save it as jpg
dxscSavePNG.i(File.s) ;make a screenshot and save it as png
dxscRelease.i() ;release all resources
dxscVersion.i() ;version (x.x.x.x)
EndImport
Global Width.i
Global Height.i
Global *Buffer
Global PosX.i
Global PosY.i
Global Event.i
If InitSprite()
If OpenWindow(0,#Null,#Null,400,400,#Null$,#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),#Null,#Null,400,400)
If dxscInit(WindowID(0))
Width = dxscWidth()
Height = dxscHeight()
Repeat
Repeat
Event = WindowEvent()
If Event = #PB_Event_CloseWindow
Break 2
EndIf
Until Event = #Null
ClearScreen(0)
*Buffer = dxscFrame()
If *Buffer
If StartDrawing(ScreenOutput())
For PosX = 0 To 399
For PosY = 0 To 399
Plot(PosX,PosY,dxscPixel(PosX,PosY));slow drawing!
Next
Next
StopDrawing()
EndIf
EndIf
FlipBuffers()
ForEver
dxscRelease()
EndIf
EndIf
EndIf
EndIf
Edit: Jetzt gibt es eine x86 & x64 Version!
Zuletzt geändert von Mijikai am 30.06.2018 19:34, insgesamt 2-mal geändert.
Re: Erweiterte Ambilight Windows Software für Adalight (Ardu
Solltest du vielleicht in einen entsprechenden eigenen Thread schreiben, hier geht das doch etwas unter.