bool VideoCapture_mod::open(int device) { if (isOpened()) release(); icap = createCameraCapture(device); if (!icap.empty()) return true; cap.reset(cvCreateCameraCapture(device)); return isOpened(); }
FREObject getCapture(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[]) { int32_t w, h; int32_t frameRate = 0; uint32_t name_size = 0; const uint8_t* name_val = NULL; FREGetObjectAsUTF8(argv[0], &name_size, &name_val); FREGetObjectAsInt32(argv[1], &w); FREGetObjectAsInt32(argv[2], &h); FREGetObjectAsInt32(argv[3], &frameRate); FREObject objectBA = argv[4]; FREByteArray baData; FREAcquireByteArray(objectBA, &baData); uint8_t *ba = baData.bytes; int32_t emptySlot = -1; size_t i; // search empty slot for(i = 0; i < MAX_ACTIVE_CAMS; i++) { if(!active_cams[i]) { emptySlot = i; break; } } if(emptySlot == -1) { ba += ba_write_int(ba, -1); FREReleaseByteArray(objectBA); return NULL; } CCapture* cap = NULL; cap = createCameraCapture(w, h, (char *)name_val, frameRate ); if(!cap) { ba += ba_write_int(ba, -1); FREReleaseByteArray(objectBA); return NULL; } // start if not running if( captureIsCapturing(cap) == 0 ) { captureStart(cap); } active_cams[emptySlot] = cap; active_cams_count++; captureGetSize( cap, &w, &h ); // write result ba += ba_write_int(ba, emptySlot); ba += ba_write_int(ba, w); ba += ba_write_int(ba, h); FREReleaseByteArray(objectBA); return NULL; }