Seite 2 von 4

Re: avifil32.dll

Verfasst: 20.07.2011 16:01
von bobobo
@deify ich wollte ja schon .. hatte aber keine Zeit bisher

Re: avifil32.dll

Verfasst: 20.07.2011 17:00
von deify
Also hier nochmal alles als hübsche .zip zum testen (:
http://ft.fckitupload.com/fYEWm/Kegelcam-Projekt.zip

@bobobo: kein Problem, ich dachte blos der thread wäre in Vergessenheit geraten und ich wusste nicht ob sich noch Andere beteiligen.

Re: avifil32.dll

Verfasst: 21.07.2011 10:12
von bobobo
:cry:
da geht gar nichts ..
---------------------------
Fehler
---------------------------
Es ist ein Fehler beim Starten der Webcams aufgetreten!
---------------------------
OK
---------------------------
hab hier "nur" eine olle USBWEbCam und die kann man mit dem escapidings
wohl nicht korrekt ansprechen.

das
http://www.purebasic.fr/german/viewtopi ... 36#p292236
geht allerdings

amcap zeichnet auch auf

und das (auch mit escapi)
http://www.purebasic.fr/english/viewtop ... 19#p331619
funktioniert auch

Re: avifil32.dll

Verfasst: 21.07.2011 10:43
von deify
das problem mit der avicap.dll war für mich, dass ich eben maximal 2 webcams zu laufen gebracht habe, daher wollte ich auf eine möglichkeit umsteigen, die das Bild aus dem Speicher direkt in ein .tga (oder ähnliches) umwandelt und in ein Videoformat abspeichert... Somit hätte ich noch eine weitere (ähnlich funktionierende) MEthode finden müssen und wäre spätestens beim schreiben des Videoformats auf einen gemeinsamen Nenner gekommen.

Ich hatte mir sowieso schon überlegt ob ich auf avicap oder etwas anderes umsteige, da ich momentan sowieso nur 2 cams benutze und somit auch keine Probleme haben dürfte, eigentlich sollte damit ja auch das aufnehmen problemlos klappen...


EDIT: Probier doch mal den Code mit der escapi.dll , oder funktioniert es rein wegen der cam nicht?

Code: Alles auswählen

EnableExplicit

;- ImageDecoder
UseTGAImageDecoder()

;- IncludeFile
IncludeFile "escapi.pbi"

;- escapiOpen
If escapiOpen() = 0
  MessageRequester("Kamera", "DLL 'escapi.dll' nicht vorhanden!")
  End
EndIf

;- Enumerations / DataSections
;- Windows
Enumeration
  #Window_0
EndEnumeration

;- Gadgets
Enumeration
  #Image_0
  #Image_1
EndEnumeration

;- Image
Enumeration
  #Image_Capture
EndEnumeration

;- Structure
Structure TGA_HEADER
  imageid.a
  colourmaptype.a
  imagetype.a
  colourmapstart.u
  colourmaplength.u
  colourmapbits.a
  xstart.u
  ystart.u
  width.u
  height.u
  pixeldepth.a
  descriptor.a
EndStructure

Structure fps_struc
  fps_soll.i
  fps_delay.i
  fps_counter.i
  fps_timer.i
  fps_res.i
EndStructure


Structure AVISTREAMINFO
  fccType.l
  fccHandler.l
  dwFlags.l
  dwCaps.l
  wPriority.w
  wLanguage.w
  dwScale.l
  dwRate.l
  dwStart.l
  dwLength.l
  dwInitialFrames.l
  dwSuggestedBufferSize.l
  dwQuality.l
  dwSampleSize.l
  rcFrame.RECT
  dwEditCount.l
  dwFormatChangeCount.l
  szName.c[64]
EndStructure

Structure AVIFILEINFO
  dwMaxBytesPerSec.l
  dwFlags.l
  dwCaps.l
  dwStreams.l
  dwSuggestedBufferSize.l
  dwWidth.l
  dwHeight.l
  dwScale.l
  dwRate.l
  dwLength.l
  dwEditCount.l
  szFileType.c[64]
EndStructure

Structure AVICOMPRESSOPTIONS
  fccType.l
  fccHandler.l
  dwKeyFrameEvery.l
  dwQuality.l
  dwBytesPerSecond.l
  dwFlags.l
  *lpFormat
  cbFormat.l
  *lpParms
  cbParms.l
  dwInterleaveEvery.l
EndStructure


;- Define
Define Event.i, EventWindow.i, EventGadget.i, EventType.i, EventMenu.i

;- Global
Global quit.i, q1.i, q2.i, capture01TH.i, capture02TH.i

Procedure OpenWindow_Window_0()
  Protected res.i
  res = #False
  If OpenWindow(#Window_0, 0, 0, 1280/2, 720/2, "Kamera", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar)
    ImageGadget(#Image_0, 0, 0, 1280/2, 720/2, 0)
    ImageGadget(#Image_1, 1280/2, 0, 1280/2, 720/2, 0)
    res = #True
  EndIf
  ProcedureReturn res
EndProcedure

Procedure capture(deviceno.i)

  Protected width.l, height.l, image.i, *pImage.i
  Protected count.l, *namebuffer.i, bufferlength.l, name$
  Protected tgaheader.TGA_HEADER, scp.SimpleCapParams
  Protected t1.q, t2.q, time.q

  Protected *fps.fps_struc

  *fps.fps_struc = AllocateMemory(SizeOf(fps_struc))

  If *fps > 0

    width  = 1280/2
    height = 720/2

    *fps\fps_soll  = 30
    *fps\fps_delay = 1000 / *fps\fps_soll

    image = CreateImage(#PB_Any, width, height, 24)
    SetGadgetState(deviceno, ImageID(image))

    initCOM()

    count = countCaptureDevices()

    Debug "count: " + Str(count)

    If count > 0

      bufferlength = 1000
      *namebuffer  = AllocateMemory(bufferlength)

      If *namebuffer > 0
        getCaptureDeviceName(deviceno, *namebuffer, bufferlength)
        name$ = PeekS(*namebuffer, -1, #PB_Ascii)
        If name$ <> ""
          Debug "name: " + name$
          If deviceno > 0
            name$ = GetWindowTitle(#Window_0) + " | " + name$
          EndIf
          SetWindowTitle(#Window_0, name$)
        EndIf
      EndIf

      tgaHeader\imageid         = 0
      tgaHeader\colourmaptype   = 0
      tgaheader\imagetype       = 2
      tgaHeader\colourmapstart  = 0
      tgaHeader\colourmaplength = 0
      tgaheader\width           = width
      tgaheader\height          = height
      tgaHeader\xstart          = 0
      tgaHeader\ystart          = 0
      tgaheader\pixeldepth      = 32
      tgaheader\descriptor      = % 11110100

      *pImage = AllocateMemory(width * height * 4 + SizeOf(TGA_HEADER))

      If *pImage > 0

        CopyMemory(@tgaheader, *pImage, SizeOf(TGA_HEADER))

        scp\mWidth     = width
        scp\mHeight    = height
        scp\mTargetBuf = *pImage + SizeOf(TGA_HEADER)

        Debug "memory: " + Str(scp\mWidth * scp\mHeight * 4)

        If initCapture(deviceno, @scp)

          Debug "initCapture"

          Repeat

            t1 = timeGetTime_()

            If *fps\fps_timer < t1
              *fps\fps_res     = *fps\fps_counter
              *fps\fps_timer   = t1 + 1000
              *fps\fps_counter = 0
            Else
              *fps\fps_counter + 1
            EndIf

            doCapture(deviceno)

            ;While isCaptureDone(deviceno) = 0
            ;  If quit = 1
            ;    Break
            ;  EndIf
            ;  Delay(1)
            ;Wend

            If quit = 1
              Break
            EndIf

            If CatchImage(deviceno, *pImage)

              StartDrawing(ImageOutput(image))

              DrawImage(ImageID(deviceno), 0, 0)

              DrawText(10, 10, "FPS: " + Str(*fps\fps_res), RGB(255, 0, 0))

              StopDrawing()

              SetGadgetState(deviceno, ImageID(image))

            EndIf

            t2 = timeGetTime_()

            time = t2 - t1

            If time < *fps\fps_delay
              Delay(*fps\fps_delay - time)
            Else
              Delay(1)
            EndIf

          Until quit = 1

          deinitCapture(deviceno)

          Debug "deinitCapture"

        EndIf

      EndIf

    EndIf

  EndIf

  If *fps > 0
    FreeMemory(*fps)
  EndIf

  If *namebuffer > 0
    FreeMemory(*namebuffer)
  EndIf

  If *pImage > 0
    FreeMemory(*pImage)
  EndIf

EndProcedure

If OpenWindow_Window_0()

  StickyWindow(#Window_0, 1)

  capture01TH = CreateThread(@capture(), 0)
;   capture02TH = CreateThread(@capture(), 1)

  ;- Event loop
  Repeat

    Event       = WaitWindowEvent(100)
    EventGadget = EventGadget()
    EventType   = EventType()
    EventWindow = EventWindow()

    Select Event

      Case #PB_Event_Gadget

        Select EventGadget

          Case #Image_0
           
          Case #Image_1
                       
        EndSelect

      Case #PB_Event_CloseWindow

        quit = 1

    EndSelect

    q1 = IsThread(capture01TH)
    q2 = IsThread(capture02TH)

  Until quit = 1 And q1 = 0 And q2 = 0

EndIf

;- escapiClose
escapiClose()

End

mfg deify

Re: avifil32.dll

Verfasst: 21.07.2011 11:08
von bobobo
geht :allright: (wenn ich da auch etwas breiter aussehe als ich sowieso schon bin :D )
mit eine meiner Kamera entsprechenden skalierung 640x480 sieht das (und ich dann) schon
besser aus.

im englishen gibts n code vom freak von 2007 auch mit excapi und der geht auch
http://www.purebasic.fr/english/viewtop ... 37#p177837

Re: avifil32.dll

Verfasst: 21.07.2011 11:11
von deify
Seltsam. Das Breiter liegt daran. dass meine Cams mit 1280*720 aufnehmen, was z.b. von avicap leider auch nicht unterstützt wird.
Was mich wirklich verwundert ist, dass es bei dir nicht klappt das Programm zu starten, da es die selbe source ist! Aber Kommentier doch bitte mal das zweite CreateThread(@capture(),1) in der windowhandler()-Funktion aus, dann sollte es klappen, der Code läuft nämlich momentan für beide Cams.

mfg deify

Re: avifil32.dll

Verfasst: 21.07.2011 11:19
von bobobo
das war es wohl ..mit einem thread wuppt das irgendwie (rudimentär)
zmindest sehe ich ein Bild

Der Rest ist wohl noch in recht feuchten Tüchern.. :)

Re: avifil32.dll

Verfasst: 21.07.2011 11:24
von deify
bis jetzt geht das erstellen eines neuen vereins / spielers und somit eben auch das starten einer aufnahme, diese aufnahme wird dann in dem eigenen temp-ordner also cam0.avi / cam1.avi abgespeichert und diese beiden sollen dann beim beenden der Aufnahme auf Nachfrage zu einer Datei verbunden werden z.b. 21.07.2011_11:22.kcf und in dem privaten Ordner des Keglers abgespeichert werden.

Blos leider wird die avi eben noch nicht richtig gespeichert, die komplette playerfunktion ist noch nicht integriert, ich schreib dir hier mal den aktuellen code!

Code: Alles auswählen

EnableExplicit

IncludeFile "escapi.pbi"
IncludeFile "avifil32.pbi"

UsePNGImageDecoder()
UseTGAImageDecoder()

If escapiOpen() = 0
  MessageRequester("Kamera", "DLL 'escapi.dll' nicht vorhanden!")
  End
EndIf

Structure TGA_HEADER
  imageid.a
  colourmaptype.a
  imagetype.a
  colourmapstart.u
  colourmaplength.u
  colourmapbits.a
  xstart.u
  ystart.u
  width.u
  height.u
  pixeldepth.a
  descriptor.a
EndStructure

Structure tgax
  tga.TGA_HEADER
EndStructure

Structure fps_struc
  fps_soll.i
  fps_delay.i
  fps_counter.i
  fps_timer.i
  fps_res.i
EndStructure

;{ Enumerations
;Fenster
Enumeration
  #Video_Gadget1
  #Video_Gadget2 
  
  #Window_0
  #Window_1
  #list
  #buttonOK
  #buttonNew
  #buttonDelete
  #menu
  
  #new_buttonImage
  #open_buttonImage
  #delete_buttonImage
  #play_buttonImage
  #pause_buttonImage
  #stop_buttonImage
  #next_buttonImage
  #previous_buttonImage
  #record_buttonImage
 
  #new_ico
  #open_ico
  #delete_ico
  #play_ico
  #pause_ico
  #stop_ico
  #next_ico
  #previous_ico
  #record_ico

  #video_Image1
  #video_Image2

  #new_menuitem
  #open_menuitem
  #delete_menuitem
  #close_menuitem
  
  #settings_menuitem
EndEnumeration

Enumeration
  #streamtypeAUDIO = $73647561
  #streamtypeVIDEO = $73646976
  #ICMF_CHOOSE_KEYFRAME=1
  #ICMF_CHOOSE_DATARATE=2
  #AVIERR_OK=0
  #AVIIF_KEYFRAME=$10
  
  #configFile
  #tempDir
  #newDir
EndEnumeration


;}


Global quit.i = #False, quitThread = -1, restartCapture = -1, recording = #False
Global width.l, height.l, testwidth.l, testheight.l
Global changeSettings = #False
Global currentFile.s, spieler.s, verein.s
Global i


Procedure setupProgramm()
  If Not OpenFile(#configFile,GetCurrentDirectory()+"config")
    MessageRequester("Fehler","Konnte Einstellungsdatei nicht öffnen")
    End
  EndIf  
  
  If Not ExamineDirectory(#tempDir,GetCurrentDirectory()+"temp","*.*")
    If Not CreateDirectory(GetCurrentDirectory()+"temp")
      MessageRequester("Fehler","Das temporäre Verzeichnis konnte nicht erstellt werden!")
      End
    EndIf
  Else
    FinishDirectory(#tempDir)
  EndIf
  
  If Not ExamineDirectory(#tempDir,GetCurrentDirectory()+"Vereine","*.*")
    If Not CreateDirectory(GetCurrentDirectory()+"Vereine")
      MessageRequester("Fehler","Das Vereins-Verzeichnis konnte nicht erstellt werden!")
      End
    EndIf
  Else
    FinishDirectory(#tempDir)
  EndIf
EndProcedure


Procedure capture(deviceno.i)

  Protected image.i, *pImage.i
  Protected count.l, *namebuffer.i, bufferlength.l, name$
  Protected tgaheader.TGA_HEADER, scp.SimpleCapParams
  Protected t1.q, t2.q, time.q
  Protected frame = 0
  Protected aviStreamInfo.AVISTREAMINFO, opts.AVICOMPRESSOPTIONS
  Protected error.b, tga.TGA_HEADER
  Protected ppfile.l, ppavi.l, pAVICompressed.l, psi.AVISTREAMINFO
  Protected drawnText.s = "Bitte legen Sie eine neue Aufnahmedatei an, oder öffnen Sie eine vorhandene."

  Protected *fps.fps_struc

  *fps.fps_struc = AllocateMemory(SizeOf(fps_struc))

  If *fps > 0
    
    *fps\fps_soll  = 30
    *fps\fps_delay = 1000 / *fps\fps_soll
    
    image = CreateImage(#PB_Any, width, height, 24)
    SetGadgetState(deviceno, ImageID(image))

    initCOM()

    count = countCaptureDevices()
    If count > 0

      tgaHeader\imageid         = 0
      tgaHeader\colourmaptype   = 0
      tgaheader\imagetype       = 2
      tgaHeader\colourmapstart  = 0
      tgaHeader\colourmaplength = 0
      tgaheader\width           = width
      tgaheader\height          = height
      tgaHeader\xstart          = 0
      tgaHeader\ystart          = 0
      tgaheader\pixeldepth      = 32
      tgaheader\descriptor      = % 11110100

      *pImage = AllocateMemory(width * height * 4 + SizeOf(TGA_HEADER))

      If *pImage > 0

        CopyMemory(@tgaheader, *pImage, SizeOf(TGA_HEADER))

        scp\mWidth     = width
        scp\mHeight    = height
        scp\mTargetBuf = *pImage + SizeOf(TGA_HEADER)

        If initCapture(deviceno, @scp)
          AVIFileInit()
          
          If AVIFileOpen(@ppfile,GetCurrentDirectory()+"temp\cam"+Str(deviceno)+".avi",#OF_CREATE,#Null)
            End
           Else
            aviStreamInfo\fccType                = #streamtypeVIDEO
            aviStreamInfo\fccHandler\a             = $6D
            aviStreamInfo\fccHandler\b             = $73
            aviStreamInfo\fccHandler\c             = $76
            aviStreamInfo\fccHandler\d             = $63 
            aviStreamInfo\dwScale                = 1 
            aviStreamInfo\dwRate                 = 4 
            aviStreamInfo\dwSuggestedBufferSize  = MemorySize(*pImage)
            
            If SetRect_(@aviStreamInfo\rcFrame, 0, 0, tgaheader\width, tgaheader\height) <>0
              If AVIFileCreateStream(ppfile,@ppavi,@aviStreamInfo)
               AVIFileRelease(ppfile)
                End
              Else
                opts.AVICOMPRESSOPTIONS
                Dim aopts(0)
                aopts(0)=@opts
                If AVISaveOptions(0, #ICMF_CHOOSE_KEYFRAME | #ICMF_CHOOSE_DATARATE, 1, @ppavi, @aopts(0)) <> 1
                  MessageRequester("Fehler", "Fehler beim Ändern der AVI-Einstellungen aufgetreten")
                EndIf
                If Not AVIMakeCompressedStream(@pAVICompressed, ppavi, aopts(0), 0)=#AVIERR_OK
                  MessageRequester("Fehler","Ein Fehler ist beim Komprimieren der AVI aufgetreten!")
                  End
                EndIf
                error = AVIStreamSetFormat(pAVICompressed, 0, @tga, SizeOf(TGA_HEADER))
                If error
                  MessageRequester("Fehler","Fehler "+Str(error)+" ist beim Konfigurieren des AVI-Formats aufgetreten!")
                  End
                EndIf
              EndIf
            Else
              End
            EndIf
          EndIf
            
          Repeat
            If spieler And verein And quit  = #False  
              If restartCapture <> deviceno
                t1 = timeGetTime_()
    
                If *fps\fps_timer < t1
                  *fps\fps_res     = *fps\fps_counter
                  *fps\fps_timer   = t1 + 1000
                  *fps\fps_counter = 0
                Else
                  *fps\fps_counter + 1
                EndIf
    
                doCapture(deviceno)
    ; 
    ;             While isCaptureDone(deviceno) = 0
    ;              If quit = 1
    ;                Break
    ;              EndIf
    ;              Delay(1)
    ;             Wend
    
                If CatchImage(deviceno, *pImage)
                  If recording = #False
                    If frame <> 0
                      frame = 0
                      AVIStreamRelease(pAVICompressed)
                      AVIStreamRelease(ppavi)
                      AVIFileRelease(ppfile)
                    EndIf
                    
                    StartDrawing(ImageOutput(image))
      
                    DrawImage(ImageID(deviceno), 0, 0)
      
                    DrawText(10, 10, "FPS: " + Str(*fps\fps_res), RGB(255, 0, 0))
      
                    StopDrawing()
      
                    SetGadgetState(deviceno, ImageID(image))
                  Else
                    If AVIStreamWrite(pAVICompressed,frame,1,*pImage,MemorySize(*pImage),#AVIIF_KEYFRAME,#Null,#Null)
                      frame+1
                    EndIf
                    
                  EndIf
                EndIf
    
                t2 = timeGetTime_()
    
                time = t2 - t1
    
                If time < *fps\fps_delay
                  Delay(*fps\fps_delay - time)
                Else
                  Delay(1)
                EndIf
              Else
                deinitCapture(deviceno)
                Repeat
                  Delay(100)
                Until initCapture(deviceno, @scp)
                restartCapture = -1
              EndIf
            Else
              StartDrawing(ImageOutput(image))
              Box(0,0,width,height,#Black)
              DrawText(width/2-TextWidth(drawnText)/2,height/2-TextHeight(drawnText)/2,drawnText)
              StopDrawing()
              SetGadgetState(#Video_Gadget1,ImageID(image))
              SetGadgetState(#Video_Gadget2,ImageID(image))
              Delay(1000)
            EndIf
            
          Until quit = #True Or quitThread = deviceno
          
          
          deinitCapture(deviceno)
        Else
          MessageRequester("Fehler","Es ist ein Fehler beim Starten der Webcams aufgetreten!")
          End
        EndIf

      EndIf

    EndIf

  EndIf

  If *fps > 0
    FreeMemory(*fps)
  EndIf

  If *namebuffer > 0
    FreeMemory(*namebuffer)
  EndIf

  If *pImage > 0
    FreeMemory(*pImage)
  EndIf
EndProcedure

Procedure getVideoFormat()
  ExamineDesktops()
  testwidth = DesktopWidth(0)-150
  testheight = DesktopHeight(0)-225
  
  Repeat
    width + 16
    height + 9
  Until width >= testwidth Or height >= testheight /2
  width-16
  height-9
EndProcedure

Procedure LoadImages()
  CatchImage(#new_ico,?new)
  ResizeImage(#new_ico,75,75)
  CatchImage(#open_ico,?open)
  ResizeImage(#open_ico,75,75)
  CatchImage(#delete_ico,?del)
  ResizeImage(#delete_ico,75,75)
  CatchImage(#play_ico,?play)
  CatchImage(#pause_ico,?pause)
  CatchImage(#stop_ico,?stop)
  CatchImage(#next_ico,?nex)
  CatchImage(#previous_ico,?previous)
  CatchImage(#record_ico,?record)
  ResizeImage(#record_ico,25,25)
EndProcedure

Procedure OpenWindow_0()
  If OpenWindow(#Window_0,0,0,width+200,height*2+150,"Kegelcam",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
    ButtonImageGadget(#new_buttonImage,25,DesktopHeight(0)/2-150-175/2,75,75,ImageID(#new_ico))
    GadgetToolTip(#new_buttonImage,"Neue Aufnahmedatei erstellen")
    ButtonImageGadget(#open_buttonImage,25,DesktopHeight(0)/2-50-175/2,75,75,ImageID(#open_ico))
    GadgetToolTip(#open_buttonImage,"Bestehende Aufnahmedatei öffnen")
    ButtonImageGadget(#delete_buttonImage,25,DesktopHeight(0)/2+50-175/2,75,75,ImageID(#delete_ico))
    GadgetToolTip(#delete_buttonImage,"Momentane Aufnahmedatei löschen")
    
    ButtonImageGadget(#previous_buttonImage,width/2-150+125,height*2+200-137.5,50,50,ImageID(#previous_ico))
    ButtonImageGadget(#play_buttonImage,width/2-90+125,height*2+200-137.5,50,50,ImageID(#play_ico))
    ButtonImageGadget(#stop_buttonImage,width/2-30+125,height*2+200-137.5,50,50,ImageID(#stop_ico))
    ButtonImageGadget(#record_buttonImage,width/2+30+125,height*2+200-137.5,50,50,ImageID(#record_ico),#PB_Button_Toggle)
    ButtonImageGadget(#next_buttonImage,width/2+90+125,height*2+200-137.5,50,50,ImageID(#next_ico))
    
    ImageGadget(#Video_Gadget1,DesktopWidth(0)-(DesktopWidth(0)-125),DesktopHeight(0)-(DesktopHeight(0)-25),width,height, 0)
    GadgetToolTip(#Video_Gadget1,"Doppelklick zum Aktualisieren")
    ImageGadget(#Video_Gadget2,DesktopWidth(0)-(DesktopWidth(0)-125),DesktopHeight(0)-(DesktopHeight(0)-25)+25+height,width,height, 0)
    GadgetToolTip(#Video_Gadget2,"Doppelklick zum Aktualisieren")
    
    If CreateMenu(#menu,WindowID(#Window_0))
      MenuTitle("Datei")
      MenuItem(#new_menuitem, "Neu")
      MenuItem(#open_menuitem, "Öffnen")
      MenuItem(#delete_menuitem, "Löschen")
      MenuBar()
      MenuItem(#close_menuitem, "Beenden")
      MenuTitle("Einstellungen")
      MenuItem(#settings_menuitem,"AVI Kompressionseinstellungen")
    Else
      MessageRequester("Error","Fenster konnte nicht geladen werden!")
      End
    EndIf
  Else
    MessageRequester("Error","Fenster konnte nicht geladen werden!")
    End
  EndIf  
  
  EndProcedure
  
Procedure OpenWindow_1(usage.s)
  If OpenWindow(#Window_1,0,0,300,400,"Bitte "+usage+" wählen",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MaximizeGadget)
    ListViewGadget(#list,10,10,280,325)
    If usage = "Verein"
      If ExamineDirectory(#newDir,GetCurrentDirectory()+"Vereine\","*.*")
        While NextDirectoryEntry(#newDir)
          If DirectoryEntryType(#newDir) = #PB_DirectoryEntry_Directory And DirectoryEntryName(#newDir) <> "." And DirectoryEntryName(#newDir) <> ".."
            AddGadgetItem(#list,-1,DirectoryEntryName(#newDir))
          EndIf
        Wend
      EndIf
    Else
      If ExamineDirectory(#newDir,GetCurrentDirectory()+"Vereine\"+verein+"\","*.*")
        While NextDirectoryEntry(#newDir)
          If DirectoryEntryType(#newDir) = #PB_DirectoryEntry_Directory And DirectoryEntryName(#newDir) <> "." And DirectoryEntryName(#newDir) <> ".."
            AddGadgetItem(#list,-1,DirectoryEntryName(#newDir))
          EndIf
        Wend
      EndIf
    EndIf
    ButtonGadget(#buttonOK,10,345,80,45,"OK")
    ButtonGadget(#buttonNew,110,345,80,45,"Neu")
    ButtonGadget(#buttonDelete,210,345,80,45,"Löschen")
  EndIf
EndProcedure

Procedure windowHandler()
  Protected capture01TH,capture02TH, q1, q2
  Protected eventGadget, eventType, eventMenu
  Protected window1Usage.s
  Protected tempString.s
    
    capture01TH = CreateThread(@capture(), 0)
    capture02TH = CreateThread(@capture(), 1)
    
    Repeat
      If quit = #False  
        Select WaitWindowEvent()           
          Case #PB_Event_Gadget
            Select EventGadget()
                
              ;--Window0
            Case #new_buttonImage
              If spieler And verein
                If MessageRequester("","Mit dem erstellen einer neuen Aufnahmedatei wird die momentane Aufnahme von "+spieler+"("+Verein+") verworfen."+#CRLF$+"Wollen Sie fortfahren?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
                  window1Usage = "Verein"
                  OpenWindow_1(window1Usage)
                  StickyWindow(#Window_1,1)
                EndIf
              Else
                window1Usage = "Verein"
                OpenWindow_1(window1Usage)
                StickyWindow(#Window_1,1)
              EndIf
              
              
            Case #open_buttonImage
              If spieler And verein
                currentFile = OpenFileRequester(spieler+" ("+verein+")",GetCurrentDirectory()+"Vereine\"+verein+"\"+spieler+"\","Kegelcam Aufnahmedatei (*.kcf)|*.kcf",0)
              Else
                MessageRequester("Fehler","Es muss erst ein Spieler initialisiert werden um eine Aufnahmedatei zu öffnen!")
                window1Usage = "Verein"
                OpenWindow_1(window1Usage)
                StickyWindow(#Window_1,1)
              EndIf
              
            Case #delete_buttonImage
              If currentFile
                If MessageRequester("Löschen","Sind sie sich sicher, dass sie die momentane Aufnahmedatei löschen wollen?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
                  DeleteFile(currentFile)
                  currentFile = ""
                EndIf
              EndIf
              
            Case #Video_Gadget1
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick
                    restartCapture = 0
                EndSelect
                
              Case #Video_Gadget2
                Select EventType()
                  Case #PB_EventType_LeftDoubleClick 
                    restartCapture = 1
                EndSelect
                
              Case #record_buttonImage
                Select EventType()
                  Case #PB_EventType_LeftClick
                    If spieler And verein
                      If recording = #False
                        recording = #True
                      Else
                        recording = #False
                        If MessageRequester("","Möchten sie die Aufnahme endgültig abspeichern?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
                        EndIf
                      EndIf
                    Else
                      SetGadgetState(#record_buttonImage,0)
                    EndIf
                EndSelect
                
                
                ;--Window1
              Case #buttonOK
                If window1Usage = "Verein"
                  verein = GetGadgetText(#list)
                  CloseWindow(#window_1)
                  If verein
                    window1Usage = "Spieler"
                    OpenWindow_1(window1Usage)
                  EndIf
                Else
                  spieler = GetGadgetText(#list)
                  CloseWindow(#Window_1)
                  If spieler And verein
                    SetWindowTitle(#Window_0,"Kegelcam - "+spieler+" ("+verein+")")
                  EndIf
                EndIf
                
              Case #buttonNew
                tempString = InputRequester("Neu","Geben Sie den Namen des neuen "+window1Usage+"s ein","")
                If tempString
                  AddGadgetItem(#list,-1,tempString)
                  If window1Usage = "Verein"
                    If Not ExamineDirectory(#newDir,GetCurrentDirectory()+"Vereine\"+tempString,"*.*")
                      If Not CreateDirectory(GetCurrentDirectory()+"Vereine\"+tempString)
                        MessageRequester("Fehler","Fehler beim erstellen des Vereins")
                      EndIf
                    Else
                      FinishDirectory(#newDir)
                    EndIf
                  Else
                    If Not ExamineDirectory(#newDir,GetCurrentDirectory()+"Vereine\"+verein+"\"+tempString,"*.*")
                      If Not CreateDirectory(GetCurrentDirectory()+"Vereine\"+verein+"\"+tempString)
                        MessageRequester("Fehler","Fehler beim erstellen des Spielers")
                      EndIf
                    Else
                      FinishDirectory(#newDir)
                    EndIf
                  EndIf
                EndIf                   
                  
                Case #buttonDelete
                  If GetGadgetState(#list) > -1
                    If MessageRequester("Löschen","Sind Sie sich sicher, dass sie den "+window1Usage+" "+GetGadgetText(#list)+" aus der Liste entfernen wollen?"+#CRLF$+"Durch das Löschen gehen alle gespeicherten Aufnahmedateien ebenfalls verloren!",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
                      RemoveGadgetItem(#list,GetGadgetState(#list))
                      If window1Usage = "Verein"
                        DeleteDirectory(GetCurrentDirectory()+"Vereine\"+verein,"")
                      Else
                        DeleteDirectory(GetCurrentDirectory()+"Vereine\"+verein+"\"+spieler,"")
                    EndIf         
                  EndIf
                EndIf
                EndSelect
            
          Case #PB_Event_Menu
            Select EventMenu()
              Case #settings_menuitem
                  MessageRequester("Fehler","Funktion noch nicht implementiert!")         
              EndSelect
              
          Case #PB_Event_CloseWindow
            If EventWindow() = #Window_0
              If recording
                If MessageRequester("","Es wird zur Zeit ein Video aufgenommen."+#CRLF$+"Wollen sie wirklich beenden?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
                  CloseWindow(#Window_0)
                  If IsWindow(#Window_1)
                    CloseWindow(#Window_1)
                  EndIf
                  quit = #True
                EndIf
              Else
                CloseWindow(#Window_0)
                If IsWindow(#Window_1)
                  CloseWindow(#Window_1)
                EndIf
                quit = #True
              EndIf
            Else
              CloseWindow(#Window_1)
            EndIf
        EndSelect 
      EndIf     

      q1 = IsThread(capture01TH)
      q2 = IsThread(capture02TH)      
    Until quit = 1 And q1 = 0 And q2 = 0    
EndProcedure

Procedure main()
  setupProgramm()
  
  getVideoFormat()
  LoadImages()
  OpenWindow_0()
  windowHandler()
  AVIFileExit()
  escapiClose()
EndProcedure

main()

;{ datasection
End
DataSection
  new: IncludeBinary "Neu.png"
  open: IncludeBinary "Öffnen.png"
  del: IncludeBinary "Löschen.png"
  play: IncludeBinary "play.png"
  pause: IncludeBinary "pause.png"
  stop: IncludeBinary "stop.png"
  nex: IncludeBinary "next.png"
  previous: IncludeBinary "previous.png"
  record: IncludeBinary "record.png"
EndDataSection
;}

Re: avifil32.dll

Verfasst: 21.07.2011 14:31
von bobobo
ich sehe nn eine avi im Projekt temp-ordner
diese ist zwar groß aber irgendwie nicht korrekt


sieht so aus als wenn der Codec (Dein Code hat danach gefragt und ich habe "Vollbilder umkomprimiert" ausgewählt)
nicht so recht tut oder was in der Art.

Re: avifil32.dll

Verfasst: 21.07.2011 14:35
von deify
das ist eben mein problem, die datei nimmt schnell an Größe zu, ist aber nicht korrekt. Versucht man einen anderen Codec auszuwählen schlägt die Funktion aber fehl, daher wollte ich wissen was ich falsch mache bzw wie ich es anders machen kann :D
Ich hatte ja schon überlegt auf mpeg umzusteigen, ich wollte aber eigentlich kein externes Programm verwenden sondern eben eine dll...

Was hältst du davon, was scheint dir sinnvoller/einfacher zu sein?