TV Bluebox am PC Realisieren

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Ja, es geht echt um Videos. Ok, ich möchte einen gespeicherten Video mit dem Bluebox Effekt Bearbeiten. Live-Streaming auf den PC kommt später....

Ich kann mit der AViFil32 Lib die Bilder aus einem Video auslesen. Das Problem ist aber, das ich diese Bilder wieder zu einem Video zusammenfügen müsste (mit Codecs und Ton). Hat jemand da auch einen Ansatz, wie das gehen könnte?


------------------------------------------------------------------------------------


2. Habe den Ansatz etwas umgeschrieben, damit jedes Pixel berücksichtigt wird. Gibts es Ideen, wie ich den Code noch beschläunigen kann, damit er schneller arbeitet?

Code: Alles auswählen

 StartTime = ElapsedMilliseconds()             ; ermittelt den aktuellen Wert
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()

; höhe/breite des Bildes 
img = CatchImage(#PB_Any, ?image)
INS = CatchImage(#PB_Any, ?insert)
imgH = ImageHeight(img) 
imgW = ImageWidth(img)
insH = ImageHeight(INS) 
INSW = ImageWidth(INS)

ins_out = ImageOutput(INS) 
Dim insColors(INSW,insH) ; farbenarray für insert erstellen 
StartDrawing(ins_out) 
  
  For x=0 To INSW 
    For y=0 To insH 
      insColors(x,y)=Point(x,y);farbwerte im array speichern 
    Next 
  Next 
StopDrawing() 

img_out = ImageOutput(img) 
StartDrawing(img_out) 
  For x=0 To imgW 
    For y=0 To imgH 
      c=Point(x,y) ; farbe des punktes holen und in c (color) speichern 
      If  Blue(c)>90 And Green(c)<100 And Red(c)<50
        Plot(x,y,insColors(x,y)) ; auf das image mit bluebox plotten
     EndIf
    Next 
  Next  
  
 SaveImage(img, "C:\Users\Joel\Desktop\IMAGE__.BMP" , #PB_ImagePlugin_BMP)
 ElapsedTime = ElapsedMilliseconds()-StartTime 
 Debug  ElapsedTime
StopDrawing() 
End 

DataSection 
  image: IncludeBinary "image.jpg" 
  insert: IncludeBinary "insert.jpg" 
EndDataSection
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag von PMTheQuick »

Hier mal ne Vorlage die 425ms braucht für 25 Vorgänge mit einem unterschiedlich belichtetem Bild (10 Pixel Genauigkeit).

Code: Alles auswählen

UseJPEGImageDecoder()
LoadImage(0, "example.jpg")

Procedure Diff(Z1, Z2)
  If(Z1 > Z2) : ProcedureReturn Z1-Z2 : Else : ProcedureReturn Z2-Z1 : EndIf
EndProcedure

#StartRed = 30 ; Startwert Rot
#StartGreen = 118 ; Startwert Grün
#StartBlue = 190 ; Startwert Blau
#MaxDifference = 170 ; Maximale Differenz von R & G & B zusammen
#StepX = 10 ; X-er Schritte
#StepY = 10 ; X-er Schritte

ST = GetTickCount_()
For i = 1 To 25
StartDrawing(ImageOutput(0))
  For x = 0 To ImageWidth(0) Step #StepX
    For y = 0 To ImageHeight(0) Step #StepY
      Color = Point(x, y)
      Difference = Diff(#StartRed, Red(Color)) + Diff(#StartGreen, Green(Color)) + Diff(#StartBlue, Blue(Color))
      If Difference < #MaxDifference
        Box(LX, LY, #StepX, #StepY, RGB(255,255,255)) 
      EndIf
      LX = X
      LY = Y
    Next y
  Next x
StopDrawing()
Next i
Debug "Zeit (25 Vorgänge): "+Str(GetTickCount_()-ST)
Debug "Durchschnittliche Zeit: "+Str((GetTickCount_()-ST)/25)

OpenWindow(0, 0, 0, 1024, 768, "Viewer")
ImageGadget(0, 0, 0, 1024, 768, ImageID(0))
Repeat : Delay(1) : Until WindowEvent() = #PB_Event_CloseWindow
Verbesserungen erwünscht... Vielform per Paint draufgekritzelt...
http://em.q-soft.ch/images/780287example.jpg
Das hier bitte noch runterladen! ;-)

Gruss
PMTheQuick :)

P.S.:

Genauigkeit -> Zeit für einen Vorgang
1Px -> 1722ms
2Px -> 486ms
3Px -> 219ms
4Px -> 129ms
5Px -> 75ms
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Eine Frage von mir wäre (abgesehen davon, dass es in PureBasic wohl nicht so einfach möglich ist): Ist es nicht einfacher, direkt selber im Speicher rumzufummeln, als Point() und überhaupt PureBasics 2D Images zu benutzen?

Man macht sich einfach ein eigenes Array für die Bilddaten und Peekt und Poket da rum wie man lustig ist. Bei der heutigen Technik müsste das jedenfalls um einiges schneller gehen. Die Frage ist bloß, wie man das dann in eine Echtzeit Vorschau verwandelt... :D Ok, man könnte es in komplett in einen Framebuffer bzw. einen Screen kopieren (mit SDL vielleicht), man müsste nur das richtige Pixelformat verwenden.

Solch eine eigene Image Library hatte ich auch mal angefangen, für prozedurale Texturgenerierung, aber schnell verging die Lust daran...
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Gibt es nicht eine möglichkeit, das die grafikkarte alles machen zu lassen. In 3D spielen rechnet die Grafikkarte ja auch unmengen an Daten aus, weil sie die Daten im Grafikspeicher hat und mit eigenem Chip rechnet.

Könnte man nicht einfach die Grafikkarte direkt ansprechen und die das alles machen lassen?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Das hatte ich ja auch schon erwähnt, man könnte versuchen, etwas mit 3D und Blending Modes zu fummeln. Rein theoretisch müsste das gehen. Aber da würde ich auch auf OpenGL zurückgreifen, weil eine Standard Grafikengine für Spiele taugt dafür recht wenig. :lol:

Andernfalls... Viele Programme machen das auch ohne.

Und wenn man die Shader der Grafikkarte benutzen will... Gut, dass ist oben gesagt, 3D API. Als letzte Variante gäbe es die Möglichkeit die Grafikkarte über CUDA anzusprechen (Stichwort: GPGPU). Dann wird die GPU quasi als CPU mitbenutzt, durch nVidia PhysX bereits umgesetzt und in der nVidia Ion auch bereits vorhanden. Aber bezüglich dessen bezweifle ich, dass PureBasic die richtige Sprache dafür ist.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

:D Ok, aber mit OpenGL kenn ich mich überhaupt nicht aus. Hat da jemand Ansätze :mrgreen:
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Vermilion hat geschrieben: Man macht sich einfach ein eigenes Array für die Bilddaten und Peekt und Poket da rum wie man lustig ist. Bei der heutigen Technik müsste das jedenfalls um einiges schneller gehen.
Wenns in nem Array liegt brauch man ja Peek und Poke auch net mehr. Blöderweise bieten die beiden Befehle keinen direkten Zugriff, sondern es finded ein Call zur Poke bzw. Peek Prozedur statt, auch wenn diese nur eine einzige Assemblerinstruktion darstellt. :roll:
Jedenfalls war das in PB 3.x noch so, vieleicht hat sichs ja mittlerweile auch geändert. Deswegen sind Pointer nochmal schneller als Peek und Poke.

Aber das wäre doch auch mal ne nette Sache zur Paralellisierung. Sollte doch recht unproblematisch sein das Bild in mehrere Jobs zu zerlegen und mehrere Kerne werkeln zu lassen.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag von Ground0 »

Hallo Also ein Programm um auch Life Aufnahmen zu machen:

http://heroinewarrior.com/cinelerra_shots.php

Ansonsten noch:

http://jahshaka.org/

Gruss Ground0

PS:Weiss das es nicht mehr ganz 100% reinpasst aber es gehört noch zum anfang ;)
lmon Monitoring Service inkl. Clients
lweb Multi-Threaded Webserver
lbup-server Backup Server applikation
lmanager ERP Applikation.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

@Vermillion: Du hast auf Seite 1 ja mal was von wegen: "Blending Modes" gesagt...

was meinst du damit genau?
was ist das genau?
wie mache ich das in PB?
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Little John

Beitrag von Little John »

Warum ist das hier einklich im Offtopic-Bereich? Gehört wohl nach "Allgemein".
Antworten