Erweiterte Ambilight Windows Software für Adalight (Arduino)

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Hoto »

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.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Mijikai »

Hoto 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.
Ich bin grad dabei ein Capture-Modul in DirectX zu schreiben :)
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Hoto »

Also mit der Desktop Duplication API? Für PB? Wenn ja hätte ich da natürlich Interesse daran. ^^
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Mijikai »

Hoto hat geschrieben:Also mit der Desktop Duplication API? Für PB? Wenn ja hätte ich da natürlich Interesse daran. ^^
Vorerst nur mit DirectX9 :)
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
DirectDraw (DirectX7) wäre evtl. auch noch eine Möglichkeit.
Könnte sogar noch schneller sein.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Hoto »

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
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Mijikai »

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
Ja es funktioniert mit dem normalen Desktop.

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.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Mijikai »

Hoto 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
Weil PB lieber Zeit darauf verschwendet eine unpopuläre 3D Engine zu pflegen anstelle
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!?.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Hoto »

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.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Mijikai »

Ich hab mal eine DLL zum rumprobieren erstellt.

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 
Die Library ist hier zu finden: https://www.dropbox.com/s/zcb6vdnxnkuhe ... L.zip?dl=0

Edit: Jetzt gibt es eine x86 & x64 Version!
Zuletzt geändert von Mijikai am 30.06.2018 19:34, insgesamt 2-mal geändert.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Re: Erweiterte Ambilight Windows Software für Adalight (Ardu

Beitrag von Hoto »

Solltest du vielleicht in einen entsprechenden eigenen Thread schreiben, hier geht das doch etwas unter.
Antworten