3 webcams

Anfängerfragen zum Programmieren mit PureBasic.
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: 3 webcams

Beitrag von D.J.Peters »

Hast du denn mal meinen Test durchgeführt ?
(Eine Exe pro Cam drei mal ausgeführt)

Wie sieht überhaupt Dein Quellcode aus ?

Wo ist denn gerade der Winter hin ?

Fragen über Fragen :D

Grüsse Joshy
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: 3 webcams

Beitrag von D.J.Peters »

PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: 3 webcams

Beitrag von deify »

es ist die pb avicap-lib von falko!

Code: Alles auswählen

; -----------------------------------------------------------------------------
; ORIGINAL VB TEXT...
; -----------------------------------------------------------------------------

;* Author: E. J. Bantz Jr.
;* Copyright: None, use and distribute freely ...
;* E-Mail: ejbantz@usa.net
;* Web: http://www.inlink.com/~ejbantz  just http://ej.bantz.com/video/



; [ Ported to PureBasic by James @ hi-toro.com ]

; -----------------------------------------------------------------------------
; Some extra PB procedures...
; -----------------------------------------------------------------------------

; Show fatal error message, end program...

; Converted and extended to PB4.31 from Falko (German Forum)

; Change all Constants with (), Just Stop and Abort is running for PB 4.4
; www.falko-pure.de



Procedure FatalError (error$)
  If error$ = "": error$ = "Undefined error... outta here!": EndIf
  MessageRequester ("Program error -- aborting...", error$, #MB_ICONWARNING | #MB_SYSTEMMODAL)
  End
EndProcedure

; Open avicap32.dll as PB library number 0...

Procedure OpenAviLibrary ()
  If OpenLibrary (0, "avicap32.dll") = 0
    FatalError ("Can't open avicap32.dll!")
  EndIf
EndProcedure

; Close avicap32.dll -- crashes...!

Procedure CloseAviLibrary ()
  ;  CloseLibrary (0) ; Close avicap32.dll -- causes crash/freeze!
EndProcedure

; Function undefined in PB -- uses avicap32.dll to create capture window (returns handle)...

Procedure.l capCreateCaptureWindowA(lpszWindowName, dwStyle.l, x.l, y.l, nWidth.l, nHeight.b, hWndParent.l, nID.l)
    ProcedureReturn CallFunction (0,"capCreateCaptureWindowA", lpszWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, nID)
EndProcedure

; Function undefined in PB -- uses avicap32.dll to get [default?] capture device name. Places
; name and version strings into memory pointers defined when calling...

Procedure.b capGetDriverDescriptionA (wDriver.b, *lpszName, cbName.l, *lpszVer, cbVer.l)
  CallFunction (0, "capGetDriverDescriptionA", wDriver, *lpszName, cbName, *lpszVer, cbVer)
EndProcedure

;// ------------------------------------------------------------------
;//  Windows API Constants / Types / Declarations
;// ------------------------------------------------------------------

#WM_USER = $400
#WS_CHILD = $40000000
#WS_VISIBLE = $10000000
#SWP_NOMOVE = $2
#SWP_NOZORDER = $4
#HWND_BOTTOM = 1
Global lNFrames.l
;// ------------------------------------------------------------------
;//  Window Messages  WM_CAP... which can be sent to an AVICAP window
;// ------------------------------------------------------------------

;// Defines start of the message range

#WM_CAP_START = #WM_USER

#WM_CAP_GET_CAPSTREAMPTR = (#WM_CAP_START + 1)

#WM_CAP_SET_CALLBACK_ERROR = (#WM_CAP_START + 2)
#WM_CAP_SET_CALLBACK_STATUS = (#WM_CAP_START + 3)
#WM_CAP_SET_CALLBACK_YIELD = (#WM_CAP_START + 4)
#WM_CAP_SET_CALLBACK_FRAME = (#WM_CAP_START + 5)
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = (#WM_CAP_START + 6)
#WM_CAP_SET_CALLBACK_WAVESTREAM = (#WM_CAP_START + 7)
#WM_CAP_GET_USER_DATA = (#WM_CAP_START + 8)
#WM_CAP_SET_USER_DATA = (#WM_CAP_START + 9)
   
#WM_CAP_DRIVER_CONNECT = (#WM_CAP_START + 10)
#WM_CAP_DRIVER_DISCONNECT = (#WM_CAP_START + 11)
#WM_CAP_DRIVER_GET_NAME = (#WM_CAP_START + 12)
#WM_CAP_DRIVER_GET_VERSION = (#WM_CAP_START + 13)
#WM_CAP_DRIVER_GET_CAPS = (#WM_CAP_START + 14)

#WM_CAP_FILE_SET_CAPTURE_FILE = (#WM_CAP_START + 20)
#WM_CAP_FILE_GET_CAPTURE_FILE = (#WM_CAP_START + 21)
#WM_CAP_FILE_ALLOCATE = (#WM_CAP_START + 22)
#WM_CAP_FILE_SAVEAS = (#WM_CAP_START + 23)
#WM_CAP_FILE_SET_INFOCHUNK = #WM_CAP_START + 24
#WM_CAP_FILE_SAVEDIB = (#WM_CAP_START + 25)

#WM_CAP_EDIT_COPY = (#WM_CAP_START + 30)

#WM_CAP_SET_AUDIOFORMAT = (#WM_CAP_START + 35)
#WM_CAP_GET_AUDIOFORMAT = (#WM_CAP_START + 36)

#WM_CAP_DLG_VIDEOFORMAT = (#WM_CAP_START + 41)
#WM_CAP_DLG_VIDEOSOURCE = (#WM_CAP_START + 42)
#WM_CAP_DLG_VIDEODISPLAY = (#WM_CAP_START + 43)
#WM_CAP_GET_VIDEOFORMAT = (#WM_CAP_START + 44)
#WM_CAP_SET_VIDEOFORMAT = (#WM_CAP_START + 45)
#WM_CAP_DLG_VIDEOCOMPRESSION = (#WM_CAP_START + 46)

#WM_CAP_SET_PREVIEW = (#WM_CAP_START + 50)
#WM_CAP_SET_OVERLAY = (#WM_CAP_START + 51)
#WM_CAP_SET_PREVIEWRATE = (#WM_CAP_START + 52)
#WM_CAP_SET_SCALE = (#WM_CAP_START + 53)
#WM_CAP_GET_STATUS = (#WM_CAP_START + 54)
#WM_CAP_SET_SCROLL = (#WM_CAP_START + 55)

#WM_CAP_GRAB_FRAME = (#WM_CAP_START + 60)
#WM_CAP_GRAB_FRAME_NOSTOP = (#WM_CAP_START + 61)

#WM_CAP_SEQUENCE = (#WM_CAP_START + 62)
#WM_CAP_SEQUENCE_NOFILE = (#WM_CAP_START + 63)
#WM_CAP_SET_SEQUENCE_SETUP = (#WM_CAP_START + 64)
#WM_CAP_GET_SEQUENCE_SETUP = (#WM_CAP_START + 65)
#WM_CAP_SET_MCI_DEVICE = (#WM_CAP_START + 66)
#WM_CAP_GET_MCI_DEVICE = (#WM_CAP_START + 67)
#WM_CAP_STOP = (#WM_CAP_START + 68)
#WM_CAP_ABORT = (#WM_CAP_START + 69)

#WM_CAP_SINGLE_FRAME_OPEN = (#WM_CAP_START + 70)
#WM_CAP_SINGLE_FRAME_CLOSE = (#WM_CAP_START + 71)
#WM_CAP_SINGLE_FRAME = (#WM_CAP_START + 72)

#WM_CAP_PAL_OPEN = (#WM_CAP_START + 80)
#WM_CAP_PAL_SAVE = (#WM_CAP_START + 81)
#WM_CAP_PAL_PASTE = (#WM_CAP_START + 82)
#WM_CAP_PAL_AUTOCREATE = (#WM_CAP_START + 83)
#WM_CAP_PAL_MANUALCREATE = (#WM_CAP_START + 84)

;// Following added post VFW 1.1
#WM_CAP_SET_CALLBACK_CAPCONTROL = (#WM_CAP_START + 85)

;// Defines end of the message range
;#WM_CAP_END = #WM_CAP_SET_CALLBACK_CAPCONTROL

;// ------------------------------------------------------------------
;//  Structures
;// ------------------------------------------------------------------

Structure CAPDRIVERCAPS
    wDeviceIndex.l ;               // Driver index in system.ini
    fHasOverlay.l ;                // Can device overlay?
    fHasDlgVideoSource.l ;         // Has Video source dlg?
    fHasDlgVideoFormat.l ;         // Has Format dlg?
    fHasDlgVideoDisplay.l ;        // Has External out dlg?
    fCaptureInitialized.l ;        // Driver ready to capture?
    fDriverSuppliesPalettes.l ;    // Can driver make palettes?
    hVideoIn.l ;                   // Driver In channel
    hVideoOut.l ;                  // Driver Out channel
    hVideoExtIn.l ;                // Driver Ext In channel
    hVideoExtOut.l ;               // Driver Ext Out channel
EndStructure

Structure CAPSTATUS
    uiImageWidth.l                    ;// Width of the image
    uiImageHeight.l                   ;// Height of the image
    fLiveWindow.l                     ;// Now Previewing video?
    fOverlayWindow.l                  ;// Now Overlaying video?
    fScale.l                          ;// Scale image to client?
    ptScroll.POINT                    ;// Scroll position
    fUsingDefaultPalette.l            ;// Using default driver palette?
    fAudioHardware.l                  ;// Audio hardware present?
    fCapFileExists.l                  ;// Does capture file exist?
    dwCurrentVideoFrame.l             ;// # of video frames cap;td
    dwCurrentVideoFramesDropped.l     ;// # of video frames dropped
    dwCurrentWaveSamples.l            ;// # of wave samples cap;td
    dwCurrentTimeElapsedMS.l          ;// Elapsed capture duration
    hPalCurrent.l                     ;// Current palette in use
    fCapturingNow.l                   ;// Capture in progress?
    dwReturn.l                        ;// Error value after any operation
    wNumVideoAllocated.l              ;// Actual number of video buffers
    wNumAudioAllocated.l              ;// Actual number of audio buffers
EndStructure

Structure CAPTUREPARMS
    dwRequestMicroSecPerFrame.l       ;// Requested capture rate
    fMakeUserHitOKToCapture.l         ;// Show "Hit OK to cap" dlg?
    wPercentDropForError.l            ;// Give error msg if >  (10%)
    fYield.l                          ;// Capture via background task?
    dwIndexSize.l                     ;// Max index size in frames  (32K)
    wChunkGranularity.l               ;// Junk chunk granularity  (2K)
    fUsingDOSMemory.l                 ;// Use DOS buffers?
    wNumVideoRequested.l              ;// # video buffers, If 0, autocalc
    fCaptureAudio.l                   ;// Capture audio?
    wNumAudioRequested.l              ;// # audio buffers, If 0, autocalc
    vKeyAbort.l                       ;// Virtual key causing abort
    fAbortLeftMouse.l                 ;// Abort on left mouse?
    fAbortRightMouse.l                ;// Abort on right mouse?
    fLimitEnabled.l                   ;// Use wTimeLimit?
    wTimeLimit.l                      ;// Seconds to capture
    fMCIControl.l                     ;// Use MCI video source?
    fStepMCIDevice.l                  ;// Step MCI device?
    dwMCIStartTime.l                  ;// Time to start in MS
    dwMCIStopTime.l                   ;// Time to stop in MS
    fStepCaptureAt2x.l                ;// Perform spatial averaging 2x
    wStepCaptureAverageFrames.l       ;// Temporal average n Frames
    dwAudioBufferSize.l               ;// Size of audio bufs  (0 = default)
    fDisableWriteCache.l              ;// Attempt to disable write cache
EndStructure

Structure CAPINFOCHUNK
    fccInfoID.l                       ;// Chunk ID, "ICOP" for copyright
    lpData.l                          ;// pointer to data
    cbData.l                          ;// size of lpData
EndStructure

Structure VIDEOHDR
    lpData.l ;// address of video buffer
    dwBufferLength.l ;// size, in bytes, of the Data buffer
    dwBytesUsed.l ;// see below
    dwTimeCaptured.l ;// see below
    dwUser.l ;// user-specific data
    dwFlags.l ;// see below
    dwReserved.l[3] ;// reserved; do not use}
EndStructure



;// ------------------------------------------------------------------
;// String IDs from status and error callbacks
;// ------------------------------------------------------------------

#IDS_CAP_BEGIN = 300              ;/* "Capture Start" */
#IDS_CAP_END = 301                ;/* "Capture End" */

#IDS_CAP_INFO = 401               ;/* "%s" */
#IDS_CAP_OUTOFMEM = 402           ;/* "Out of memory" */
#IDS_CAP_FILEEXISTS = 403         ;/* "File ;%s; exists -- overwrite it?" */
#IDS_CAP_ERRORPALOPEN = 404       ;/* "Error opening palette ;%s;" */
#IDS_CAP_ERRORPALSAVE = 405       ;/* "Error saving palette ;%s;" */
#IDS_CAP_ERRORDIBSAVE = 406       ;/* "Error saving frame ;%s;" */
#IDS_CAP_DEFAVIEXT = 407          ;/* "avi" */
#IDS_CAP_DEFPALEXT = 408          ;/* "pal" */
#IDS_CAP_CANTOPEN = 409           ;/* "Cannot open ;%s;" */
#IDS_CAP_SEQ_MSGSTART = 410       ;/* "Select OK to start capture\nof video sequence\nto %s." */
#IDS_CAP_SEQ_MSGSTOP = 411        ;/* "Hit ESCAPE or click to end capture" */
               
#IDS_CAP_VIDEDITERR = 412         ;/* "An error occurred while trying to run VidEdit." */
#IDS_CAP_READONLYFILE = 413       ;/* "The file ;%s; is a read-only file." */
#IDS_CAP_WRITEERROR = 414         ;/* "Unable to write to file ;%s;.\nDisk may be full." */
#IDS_CAP_NODISKSPACE = 415        ;/* "There is no space to create a capture file on the specified device." */
#IDS_CAP_SETFILESIZE = 416        ;/* "Set File Size" */
#IDS_CAP_SAVEASPERCENT = 417      ;/* "SaveAs: %2ld%%  Hit Escape to abort." */
               
#IDS_CAP_DRIVER_ERROR = 418       ;/* Driver specific error message */

#IDS_CAP_WAVE_OPEN_ERROR = 419    ;/* "Error: Cannot open the wave input device.\nCheck sample size, frequency, and channels." */
#IDS_CAP_WAVE_ALLOC_ERROR = 420   ;/* "Error: Out of memory for wave buffers." */
#IDS_CAP_WAVE_PREPARE_ERROR = 421 ;/* "Error: Cannot prepare wave buffers." */
#IDS_CAP_WAVE_ADD_ERROR = 422     ;/* "Error: Cannot add wave buffers." */
#IDS_CAP_WAVE_SIZE_ERROR = 423    ;/* "Error: Bad wave size." */
               
#IDS_CAP_VIDEO_OPEN_ERROR = 424   ;/* "Error: Cannot open the video input device." */
#IDS_CAP_VIDEO_ALLOC_ERROR = 425  ;/* "Error: Out of memory for video buffers." */
#IDS_CAP_VIDEO_PREPARE_ERROR = 426 ;/* "Error: Cannot prepare video buffers." */
#IDS_CAP_VIDEO_ADD_ERROR = 427    ;/* "Error: Cannot add video buffers." */
#IDS_CAP_VIDEO_SIZE_ERROR = 428   ;/* "Error: Bad video size." */
               
#IDS_CAP_FILE_OPEN_ERROR = 429    ;/* "Error: Cannot open capture file." */
#IDS_CAP_FILE_WRITE_ERROR = 430   ;/* "Error: Cannot write to capture file.  Disk may be full." */
#IDS_CAP_RECORDING_ERROR = 431    ;/* "Error: Cannot write to capture file.  Data rate too high or disk full." */
#IDS_CAP_RECORDING_ERROR2 = 432   ;/* "Error while recording" */
#IDS_CAP_AVI_INIT_ERROR = 433     ;/* "Error: Unable to initialize for capture." */
#IDS_CAP_NO_FRAME_CAP_ERROR = 434 ;/* "Warning: No frames captured.\nConfirm that vertical sync interrupts\nare configured and enabled." */
#IDS_CAP_NO_PALETTE_WARN = 435    ;/* "Warning: Using default palette." */
#IDS_CAP_MCI_CONTROL_ERROR = 436  ;/* "Error: Unable to access MCI device." */
#IDS_CAP_MCI_CANT_STEP_ERROR = 437 ;/* "Error: Unable to step MCI device." */
#IDS_CAP_NO_AUDIO_CAP_ERROR = 438 ;/* "Error: No audio data captured.\nCheck audio card settings." */
#IDS_CAP_AVI_DRAWDIB_ERROR = 439  ;/* "Error: Unable to draw this data format." */
#IDS_CAP_COMPRESSOR_ERROR = 440   ;/* "Error: Unable to initialize compressor." */
#IDS_CAP_AUDIO_DROP_ERROR = 441   ;/* "Error: Audio data was lost during capture, reduce capture rate." */
               
;/* status string IDs */

#IDS_CAP_STAT_LIVE_MODE = 500      ;/* "Live window" */
#IDS_CAP_STAT_OVERLAY_MODE = 501   ;/* "Overlay window" */
#IDS_CAP_STAT_CAP_INIT = 502       ;/* "Setting up for capture - Please wait" */
#IDS_CAP_STAT_CAP_FINI = 503       ;/* "Finished capture, now writing frame %ld" */
#IDS_CAP_STAT_PALETTE_BUILD = 504  ;/* "Building palette map" */
#IDS_CAP_STAT_OPTPAL_BUILD = 505   ;/* "Computing optimal palette" */
#IDS_CAP_STAT_I_FRAMES = 506       ;/* "%d frames" */
#IDS_CAP_STAT_L_FRAMES = 507       ;/* "%ld frames" */
#IDS_CAP_STAT_CAP_L_FRAMES = 508   ;/* "Captured %ld frames" */
#IDS_CAP_STAT_CAP_AUDIO = 509      ;/* "Capturing audio" */
#IDS_CAP_STAT_VIDEOCURRENT = 510   ;/* "Captured %ld frames  (%ld dropped) %d.%03d sec." */
#IDS_CAP_STAT_VIDEOAUDIO = 511     ;/* "Captured %d.%03d sec.  %ld frames  (%ld dropped)  (%d.%03d fps).  %ld audio bytes  (%d,%03d sps)" */
#IDS_CAP_STAT_VIDEOONLY = 512      ;/* "Captured %d.%03d sec.  %ld frames  (%ld dropped)  (%d.%03d fps)" */

Procedure capSetCallbackOnError (lwnd.l, lpProc.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_ERROR, 0, lpProc)
EndProcedure

Procedure capSetCallbackOnStatus (lwnd.l, lpProc.l)
    ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_STATUS, 0, lpProc)
EndProcedure

Procedure capSetCallbackOnYield (lwnd.l, lpProc.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_YIELD, 0, lpProc)
EndProcedure

Procedure capSetCallbackOnFrame (lwnd.l, lpProc.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_FRAME, 0, lpProc)
EndProcedure

Procedure capSetCallbackOnVideoStream (lwnd.l, lpProc.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, lpProc)
EndProcedure

Procedure capSetCallbackOnWaveStream (lwnd.l, lpProc.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_WAVESTREAM, 0, lpProc)
EndProcedure

Procedure capSetCallbackOnCapControl (lwnd.l, lpProc.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_CALLBACK_CAPCONTROL, 0, lpProc)
EndProcedure

Procedure capSetUserData (lwnd.l, lUser.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_USER_DATA, 0, lUser)
EndProcedure

Procedure capGetUserData (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_USER_DATA, 0, 0)
EndProcedure

Procedure capDriverConnect (lwnd.l, i.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DRIVER_CONNECT, i, 0)
EndProcedure

Procedure capDriverDisconnect (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DRIVER_DISCONNECT, 0, 0)
EndProcedure

Procedure capDriverGetName (lwnd.l, szName.s, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, YOURCONSTANTMESSAGE, wSize, szName)
EndProcedure

Procedure capDriverGetVersion (lwnd.l, szVer.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DRIVER_GET_VERSION, wSize, szVer)
EndProcedure

Procedure capDriverGetCaps (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DRIVER_GET_CAPS, wSize, s)
EndProcedure

Procedure capFileSetCaptureFile (lwnd.l, szName.s)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_FILE_SET_CAPTURE_FILE, 0, szName)
EndProcedure

Procedure capFileGetCaptureFile (lwnd.l, szName.s, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_FILE_SET_CAPTURE_FILE, wSize, szName)
EndProcedure

Procedure capFileAlloc (lwnd.l, dwSize.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_FILE_ALLOCATE, 0, dwSize)
EndProcedure

Procedure capFileSaveAs (lwnd.l, szName.s)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_FILE_SAVEAS, 0, szName)
EndProcedure

Procedure capFileSetInfoChunk (lwnd.l, lpInfoChunk.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_FILE_SET_INFOCHUNK, 0, lpInfoChunk)
EndProcedure

Procedure capFileSaveDIB (lwnd.l, szName.s)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_FILE_SAVEDIB, 0, szName)
EndProcedure

Procedure capEditCopy (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_EDIT_COPY, 0, 0)
EndProcedure

Procedure capSetAudioFormat (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_AUDIOFORMAT, wSize, s)
EndProcedure

Procedure capGetAudioFormat (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_AUDIOFORMAT, wSize, s)
EndProcedure

Procedure capGetAudioFormatSize (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_AUDIOFORMAT, 0, 0)
EndProcedure

Procedure capDlgVideoFormat (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DLG_VIDEOFORMAT, 0, 0)
EndProcedure

Procedure capDlgVideoSource (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DLG_VIDEOSOURCE, 0, 0)
EndProcedure

Procedure capDlgVideoDisplay (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DLG_VIDEODISPLAY, 0, 0)
EndProcedure

Procedure capDlgVideoCompression (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0)
EndProcedure

Procedure capGetVideoFormat (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_VIDEOFORMAT, wSize, s)
EndProcedure

Procedure capGetVideoFormatSize (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_VIDEOFORMAT, 0, 0)
EndProcedure

Procedure capSetVideoFormat (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_VIDEOFORMAT, wSize, s)
EndProcedure

Procedure capPreview (lwnd.l, f.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_PREVIEW, f, 0)
EndProcedure

Procedure capPreviewRate (lwnd.l, wMS.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_PREVIEWRATE, wMS, 0)
EndProcedure

Procedure capOverlay (lwnd.l, f.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_OVERLAY, f, 0)
EndProcedure

Procedure capPreviewScale (lwnd.l, f.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_SCALE, f, 0)
EndProcedure

Procedure capGetStatus (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_STATUS, wSize, s)
EndProcedure

Procedure capSetScrollPos (lwnd.l, lpP.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_SCROLL, 0, lpP)
EndProcedure

Procedure capGrabFrame (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GRAB_FRAME, 0, 0)
EndProcedure

Procedure capGrabFrameNoStop (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GRAB_FRAME_NOSTOP, 0, 0)
EndProcedure

Procedure capCaptureSequence (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SEQUENCE, 0, 0)
EndProcedure

Procedure capCaptureSequenceNoFile (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SEQUENCE_NOFILE, 0, 0)
EndProcedure

Procedure capCaptureStop (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_STOP, 0, 0)
EndProcedure

Procedure capCaptureAbort (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_ABORT, 0, 0)
EndProcedure

Procedure capCaptureSingleFrameOpen (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SINGLE_FRAME_OPEN, 0, 0)
EndProcedure

Procedure capCaptureSingleFrameClose (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SINGLE_FRAME_CLOSE, 0, 0)
EndProcedure

Procedure capCaptureSingleFrame (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SINGLE_FRAME, 0, 0)
EndProcedure

Procedure capCaptureGetSetup (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_SEQUENCE_SETUP, wSize, s)
EndProcedure

Procedure capCaptureSetSetup (lwnd.l, s.l, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_SEQUENCE_SETUP, wSize, s)
EndProcedure

Procedure capSetMCIDeviceName (lwnd.l, szName.s)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_SET_MCI_DEVICE, 0, szName)
EndProcedure

Procedure capGetMCIDeviceName (lwnd.l, szName.s, wSize.b)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_GET_MCI_DEVICE, wSize, szName)
EndProcedure

Procedure capPaletteOpen (lwnd.l, szName.s)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_PAL_OPEN, 0, szName)
EndProcedure

Procedure capPaletteSave (lwnd.l, szName.s)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_PAL_SAVE, 0, szName)
EndProcedure

Procedure capPalettePaste (lwnd.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_PAL_PASTE, 0, 0)
EndProcedure

Procedure capPaletteAuto (lwnd.l, iFrames.b, iColor.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_PAL_AUTOCREATE, iFrames, iColors)
EndProcedure

Procedure capPaletteManual (lwnd.l, fGrab.b, iColors.l)
   ProcedureReturn SendMessage_ (lwnd, #WM_CAP_PAL_MANUALCREATE, fGrab, iColors)
EndProcedure


Procedure MyFrameCallback (lwnd.l, lpVHdr.l)
    Define.VIDEOHDR VideoHeader
    ;//Fill VideoHeader with data at lpVHdr
    RtlMoveMemory_ (@VideoHeader, lpVHdr, SizeOf (VIDEOHDR))
    ;// Make room for data
    Dim VideoData (VideoHeader\dwBytesUsed)
    ;//Copy data into the array
    ProcedureReturn RtlMoveMemory_ (@VideoData (0), VideoHeader\lpData, VideoHeader\dwBytesUsed)
EndProcedure

Procedure MyYieldCallback (lwnd.l)
     Debug "Yield"
ProcedureReturn
EndProcedure



Procedure MyErrorCallback (lwnd.l, iID.l, ipstrStatusText.l)
   
    If iID = 0
      ProcedureReturn 0
    EndIf
   
;  define.s sStatusText
; define.s usStatusText
   
    ;Convert the Pointer to a real VB String
;   sStatusText = Space$ (255)                                      ;// Make room for message
   
    ;lStrCpy StrPtr (sStatusText), ipstrStatusText                       ;// Copy message into String
   
  ;  PokeS (@sStatusText, PeekS (ipstrStatusText))
   
;    sStatusText = Left (sStatusText, InStr (sStatusText, Chr$ (0)) - 1)  ;// Only look at left of null
    ; ^^^ Not needed? PB should sort that, I think...
   
   ; usStatusText = StrConv (sStatusText, vbUnicode)                     ;// Convert Unicode
           
    ;Debug.Print "Error: ", usStatusText, iID

EndProcedure

Procedure MyStatusCallback (lwnd.l, iID.l, ipstrStatusText.l)
  If iID = 0
    ProcedureReturn 0
  EndIf
    sStatusText.s
    usStatusText.s

   ;// Convert the Pointer to a real VB String
    sStatusText = PeekS(255, 0)         ;Make room for message
    PokeS(ipstrStatusText,sStatusText)                       ;// Copy message into String
    sStatusText = Left(sStatusText, FindString(sStatusText, Chr(0),0) - 1)  ;// Only look at left of null
    usStatusText = PeekS(*sStatusText, #PB_Unicode)                     ;// Convert Unicode

  Debug "Status: " + PeekS(@usStatusText,iID)
EndProcedure

Procedure MyVideoStreamCallback (lwnd.l, lpVHdr.l)
   ;Beep  ;// Replace this with your code!
EndProcedure

Procedure.l MyWaveStreamCallback (lwnd.l, lpVHdr.l)
  ; Debug.Print "WaveStream"
EndProcedure

Global gPreviewStatus: gPreviewStatus = #True ; Status of 'Preview' option...

Global lwndC.l ;      ' Handle to the Capture Windows
Global lNFrames.l ;  ' Number of frames captured

Global dlgSource.l: dlgSource = #True
Global dlgFormat.l: dlgFormat = #True
Global dlgDisplay.l: dlgDisplay = #True

Global capWidth, capHeight

Procedure ResizeCaptureWindow (lwnd.l)
Define.CAPSTATUS capstat
  ;// Get the capture window attributes .. width and height
  capGetStatus (lwnd, @capstat, SizeOf (CAPSTATUS))
  ;// Resize the capture window to the capture sizes
  SetWindowPos_ (lwnd, #HWND_BOTTOM, 0, 0, capstat\uiImageWidth, capstat\uiImageHeight, #SWP_NOMOVE | #SWP_NOZORDER)
  capWidth = capstat\uiImageWidth
  capHeight = capstat\uiImageHeight
EndProcedure

Procedure StartCaptureWindow (parentwindow.l)

  lpszName = AllocateMemory (100)
  lpszVer = AllocateMemory (100)

Define.CAPDRIVERCAPS Caps

  ;//Create Capture Window
  capGetDriverDescriptionA (0, lpszName, 100, lpszVer, 100)  ;// Retrieves driver info

  name$ = PeekS (lpszName)

  lwndC = capCreateCaptureWindowA (name, #WS_CHILD | #WS_VISIBLE, 0, 0, 320, 240, parentwindow, 1)

  ;// Connect the capture window to the driver
  capDriverConnect (lwndC, 0)

  ;// Get the capabilities of the capture driver
  capDriverGetCaps (lwndC, @Caps, SizeOf (CAPDRIVERCAPS))

  ;// If the capture driver does not support a dialog, grey it out
  ;// in the menu bar.

  If Caps\fHasDlgVideoSource = 0
    dlgSource = #False
  EndIf

  If Caps\fHasDlgVideoFormat = 0
    dlgFormat = #False
  EndIf

  If Caps\fHasDlgVideoDisplay = 0
    dlgDisplay = #False
  EndIf

  ;// Set the video stream callback function
  capSetCallbackOnVideoStream (lwndC, @MyVideoStreamCallback ())

  capSetCallbackOnFrame (lwndC, @MyFrameCallback ())

  ;// Set the preview rate in milliseconds
  capPreviewRate (lwndC, 1)
  ;// Set Overlay
  capOverlay (lwndC, #True)

  ;// Start previewing the image from the camera
  capPreview (lwndC, #True)

  ;// Resize the capture window to show the whole image
  ResizeCaptureWindow (lwndC)

EndProcedure

Procedure EndCaptureWindow (Cancel.b)
  ;// Disable all callbacks
  capSetCallbackOnError (lwndC, #Null)
  capSetCallbackOnStatus (lwndC, #Null)
  capSetCallbackOnYield (lwndC, #Null)
  capSetCallbackOnFrame (lwndC, #Null)
  capSetCallbackOnVideoStream (lwndC, #Null)
  capSetCallbackOnWaveStream (lwndC, #Null)
  capSetCallbackOnCapControl (lwndC, #Null)
EndProcedure
Procedure GetAudioFormat_Click();  by Falko
    Protected Outtxt.s
    Define.WAVEFORMATEX s
    capGetAudioFormat (lwndC, @s, SizeOf(WAVEFORMATEX))
    Outtxt.s = "FormatTag     : "+Str(s\wFormatTag)+#CRLF$
    Outtxt + "Channels      : "+Str(s\nChannels)+#CRLF$
    Outtxt + "SamplesPerSec : "+Str(s\nSamplesPerSec)+#CRLF$
    Outtxt + "AvgBytesPerSec: "+Str(s\nAvgBytesPerSec)+#CRLF$
    Outtxt + "BlockAlign    : "+Str(s\nBlockAlign)+#CRLF$
    Outtxt + "BitsPerSample : "+Str(s\wBitsPerSample)
    MessageRequester("AudioFormat",Outtxt)
EndProcedure
Procedure Compression_Click ()
  capDlgVideoCompression (lwndC)
EndProcedure

Procedure Display_Click ()
  capDlgVideoDisplay (lwndC)
EndProcedure

Procedure Format_Click ()
  capDlgVideoFormat (lwndC)
  ResizeCaptureWindow (lwndC)
EndProcedure

Procedure.l Preview_Click ()
  If gPreviewStatus
    gPreviewStatus = #False
  Else
    gPreviewStatus = #True
  EndIf
  capPreview (lwndC, gPreviewStatus)
  ProcedureReturn gPreviewStatus
EndProcedure

Procedure Source_Click ()
  capDlgVideoSource (lwndC)
EndProcedure

Procedure Start_Click ()
  ; /*
  ;  * If Start is selected from the menu, start Streaming capture.
  ;  * The streaming capture is terminated when the Escape key is pressed
  ;  */
  CAP_PARAMS.CAPTUREPARMS
  sFileName.s="TestAVI.avi"
  If capCaptureGetSetup(lwndC,@CAP_PARAMS,SizeOf(CAP_PARAMS))
    CAP_PARAMS\fYield=#True
    CAP_PARAMS\dwRequestMicroSecPerFrame=(1*(Pow(10,6))/30); 30 Frames per second
    CAP_PARAMS\fMakeUserHitOKToCapture = #True
    CAP_PARAMS\fCaptureAudio = #True                  ;Ich höre nur rauschen, aber es kann sein, das ich TV und Soundkarte verbinden muss !
    CAP_PARAMS\vKeyAbort=#False                       ;// Virtual key causing abort
    CAP_PARAMS\fAbortLeftMouse=#False                 ;// Abort on left mouse?
    CAP_PARAMS\fAbortRightMouse=#False                ;// Abort on right mouse?
    CAP_PARAMS\fLimitEnabled=#False                   ;// Use wTimeLimit?
    CAP_PARAMS\wTimeLimit=#False                      ;// Seconds to capture
    capCaptureSetSetup (lwndC, @CAP_PARAMS, SizeOf(CAP_PARAMS))
    capFileSetCaptureFile (lwndC,"Test.AVI");Write Filename for AVI
    capCaptureSequence(lwndC)  ; Start Capturing!
  EndIf
EndProcedure

Procedure SnapShot(); Make a Snapshot from Life-Video
  Name.s=ReplaceString(FormatDate("%yy-%mm-%dd @ %hh#%ii#%ss", Date()) + ".bmp","#",Chr(149))
  SendMessage_(lwndC, #WM_CAP_FILE_SAVEDIB, 0,Name)
EndProcedure

Code: Alles auswählen

IncludeFile "avicapincs.pbi"

; -----------------------------------------------------------------------------
; D E M O . . .
; -----------------------------------------------------------------------------

Enumeration
#About
#Exit
#Start
#Stop
#Abort
#Display
#Format
#source
#Compression
#Preview
#SnapShot
#AudioFormat
EndEnumeration

Global name.s


OpenAviLibrary ()

If OpenWindow (0, #CW_USEDEFAULT, #CW_USEDEFAULT, 300, 0, "Video Capture [initialising...]", #PB_Window_SystemMenu)

  CreateMenu (0, WindowID (0))

  MenuTitle ("&File")
  MenuItem (#About, "&About")
  MenuBar ()
  MenuItem (#Exit, "E&xit")

  MenuTitle ("&Control")
  MenuItem (#Start, "&Start")
  MenuItem(#Stop,"S&top")
  MenuItem(#Abort,"A&bort")
  MenuBar()
  MenuItem (#Display, "&Display")
  MenuItem (#Format, "&Format")
  MenuItem (#Source, "S&ource")
  MenuItem (#Compression, "Co&mpression")
  MenuBar ()
  MenuItem (#Preview, "&Preview")
  MenuItem (#SnapShot, "S&napShot")
  MenuItem (#AudioFormat, "&AudioFormat")

  SetMenuItemState (0,#Preview, #True)

  ; Create and init capture window, using current window as parent (required)...

  StartCaptureWindow (WindowID (0))
  ResizeWindow (0,0,0,capWidth + (GetSystemMetrics_ (#SM_CXBORDER) * 2), capHeight + (GetSystemMetrics_ (#SM_CYBORDER) * 2))

  SetWindowText_ (WindowID (0), "Video Capture")

  ; [Need to grey out menu items not supported...]

  If dlgSource = 0
    DisableMenuItem (0,#Source, #False)
  EndIf

  If dlgFormat = 0
    DisableMenuItem (0,#Format, #False)
  EndIf

  If dlgDisplay = 0
    DisableMenuItem (0,#Display, #False)
  EndIf

  Repeat
    Debug dlgSource

    e = WaitWindowEvent ()
   
    Select e
   
      Case #PB_Event_CloseWindow
        Goto Quit
               
       Case #PB_Event_Menu
      
         Select EventMenu ()
 
           Case #About
             mes.s="Ported to PureBasic by James @ hi-toro.com," + #CR$
             mes+  "from original Visual Basic source by EJ Bantz."+#CR$
             mes+  "Just converted and extended to PB4.31 by Falko @ www.falko-pure.de."+#CR$+#CR$
             mes+  "Copyright: None, use And distribute freely."
           ; Converted and extended to PB4.31 from Falko (German Forum)
 
             MessageRequester ("Video Capture", mes, #MB_ICONINFORMATION | #MB_TASKMODAL)
 
           Case #Exit
             Goto Quit
 
           Case #Start
             Start_Click ()
           Case #Stop
             capCaptureStop (lwndC)
           Case #Abort
             capCaptureAbort (lwndC)
 
           Case #Display
             Display_Click ()
          
           Case #Format
             Format_Click ()
             ResizeWindow (0,0,0,capWidth, capHeight)
            
           Case #Source
             dlgDisplay=Source_Click ()
            
           Case #Compression
             Compression_Click ()
            
           Case #Preview
             Status.l=Preview_Click ()
             SetMenuItemState (0, #Preview, Status)
           Case #SnapShot
             SnapShot()
           Case #AudioFormat
             GetAudioFormat_Click()
            
         EndSelect
       
    EndSelect
   
  ForEver

EndIf

Quit:

  EndCaptureWindow (0)
  CloseAviLibrary ()

End
wie gesagt es gehen damit maximal 2 aber mit einem weiteren programm nochmal eine also alle 3 wenn ich verschiedene methoden verwende! doch wie binde ich das jetzt in pb ein und wie kann ich bei gleichen treibern die source ändern

mfg deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: 3 webcams

Beitrag von D.J.Peters »

Das ist das Video For Windows (VFW) interface
dann benutze mal das DirectShow Interface
http://sol.gfxile.net/escapi/index.html

Könnte sein das damit alle drei Cams funzen.

Brachst nur 4 Funktionen deklarieren

[pseudo code]
; wieviele Cams sind installiert/bereit
nCams = setupESCAPI()

if nCams<3 Error

; init Cam 1,2 und 3
return = initCapture(0, @capture)
return = initCapture(1, @capture)
return = initCapture(2, @capture)

; starte aufnahme
doCapture(0) ; cam 1
doCapture(1) ; cam 2
doCapture(2) ; cam 3

; warte bis neue Frames vorhanden sind
While "noch nicht alle fertig"
if isCaptureDone(0) ; cam1
...
if isCaptureDone(1) ; cam2
...
if isCaptureDone(2) ; cam3
...

EndWhile

; am ende alle wieder schließen
deinitCapture(2) ; cam 3
deinitCapture(1) ; cam 2
deinitCapture(0) ; cam 1

So das ist alles was Du brachst.

Wenn Da auch "nur" zwei gehen sollten
dann benutze die dritte wie gehabt mit VFW.

Grüsse Joshy

edit:
Denke beim Deklarieren daran das es C Funktionen sind !
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: 3 webcams

Beitrag von D.J.Peters »

Wie ich gerade gelesen habe ist da auch ein PureBasic Beispiel dabei.
(Dann brachst Du die Funktionen ja nicht nochmal Deklarieren)

Grüsse Joshy
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: 3 webcams

Beitrag von deify »

danke für den hinweis! wenn ich weiterkomme bzw nicht weiter komme dann melde ich mich wieder :D

danke schonmal im vorraus^^
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: 3 webcams

Beitrag von D.J.Peters »

deify hat geschrieben:danke für den hinweis! wenn ich weiterkomme bzw nicht weiter komme dann melde ich mich wieder :D
Dann möchte ich nichts mehr von Dir hören :lol:
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: 3 webcams

Beitrag von deify »

:D also ich melde mich erstmal im positiven sinne! und zwar funktioniert es mit allen drei cams! allerdings auch nur durch einen bug :P also mehr oder minder intelligent gelöst ^^ man muss erstmal 2 cams starten dann gleichzeitig die nächste starten und die mittlere deaktivieren dann wieder die deaktivierte starten und dann sind alle aktiv :D

so jetzt habe ich ein kleines problem mit der imageaufbau weise! habe das gefül die ist relativ langsam! kann man das bild nicht irgendwie schneller aus dem buffer lesen? muss man das wirklich pixel für pixel machen!? ich wollte zweckes schnellerem aufbau schon das bildschreiben in threads packen aber das geht leider nicht, da startdrawing anscheinend nicht in threads funktionieren will! da kommen dann nämlich so hübsche fehler zwecks startdrawing before stopdrawing!

hoffe ihr könnt mir weiter helfen!

EDIT:
würde catchimage evtl gehen? ich hab es noch nicht geschafft ): kommt leider ne fehlermeldung aber eigentlich sollte es doch gehen, da das bild ja im buffergespeichert ist!

mfg deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
Benutzeravatar
deify
Beiträge: 141
Registriert: 29.03.2010 22:01
Computerausstattung: Win7 64bit
AMD Phenom II X4 940
NVIDIA GeForce GTS 250
4GB RAM
Kontaktdaten:

Re: 3 webcams

Beitrag von deify »

hey, wäre nett wenn ihr mir einen tip geben könntet wie man das bild anders aus dem speicher bekommt! insofern es denn ein richtiges bild ist!

danke im vorraus

deify
Windows 7 | 64bit | PureBasic 4.51 (x64/x86)
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: 3 webcams

Beitrag von D.J.Peters »

Von der Kamera kommt ein RAW Image
also ein Speicherbereich mit Pixeln
ohne Header der das Bild beschreibt (Width,Height,BPP, ...)

CatchImage() erwartet aber ein komplettes Bild z.B. eine Bitmap *.bmp
also ein Header am Anfang und im Anschluß den Speicherbereich mit Pixeln die eigentliche Bitmap.

Nun könntest Du einen größeren Speicherbereich Allocieren (Pixels + Header)

[pseudo code]

Code: Alles auswählen

pImage.l = AllocateMemory (Width * Height * 4 + SizeOf(BMPHEADER))

scp.SimpleCapParams
scp\mWidth = Width
scp\mHeight = Height
scp\mTargetBuf = pImage + SizeOf(BMPHEADER) ; Erste Addresse nach dem Header
Jetzt müstes Du noch alle Werte des BMP Headers vor den Pixeln Poken.

Im Prinziep könntest Du, nach dem die Kamera die Pixel an die Position nach dem Header geschrieben hat,
mit CatchImage() in einem Rutsch das Bild von der Addresse pImage abholen.

Doch das geht nicht so ohne weiteres.

Erst einmal ist jedes Pixel von der Kamera 4 Bytes groß und im Standard 24Bit BMP Header nur 3 Bytes (RGB)
Das liegt daran das auf Systemen mit 32/64 Bit CPU's das Addressieren von 32Bit werten (4 bytes) schneller geht
als zu jeder Pixeladdresse 3 hinzuaddieren (RGB).

Das könntest Du eventuell umgehen wenn Deine PB Version auch 32Bit BMP's unterstützt und den passenden Header "Pokest".
Es kann aber auch sein das die Kameras echte RGB Werte liefert aber das dumme WINDOWS BMP Form BGR verwendet.
Wenn dem so ist dann müstets Du doch wieder alle Red und Blue Werte in jedem Pixel tauschen
und das würde die Sache wieder so weit ausbremsen das es keinen Sinn mehr machen würde.

Die einzigste Alternative die vielleicht klapt wäre folgende:
Du benutzt das unkommprimiereter TARGA Format *.tga siehe auch UseTGAImageDecoder().
Dort ist auch jedes Pixel 4 Bytes groß RGB + optionalen Alphawert und vermutlich auch in der richten RGB Reihenfolge.
Also muss Du Dir den TGA Header etwas genauer anschauen / "googeln" (ist recht simple)
und ihn vor die eigentlichen Pixel "poken"

Als Profi könntest Du die Pixel von der Kamera einfach per MMX Assembler in das PB Image kopieren.

Das Du aber als Anfänger Dich erst einmal in die Materie des Programmierens einarbeiten muss sollte Dir auch klar sein.

Also ein bischen lesen und verstehen dann wird das schon noch.

Grüsse Joshy
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Antworten