コード例 #1
0
ファイル: camera_control.c プロジェクト: 0x53A/psmoveapi
void
camera_control_delete(CameraControl* cc)
{
#if defined(CAMERA_CONTROL_USE_CL_DRIVER)
    if (cc->frame3ch != 0x0)
        cvReleaseImage(&cc->frame3ch);

    if (cc->frame4ch != 0x0)
		cvReleaseImage(&cc->frame4ch);

    CLEyeDestroyCamera(cc->camera);
#elif defined(CAMERA_CONTROL_USE_PS3EYE_DRIVER)
    cvReleaseImage(&cc->framebgr);

    ps3eye_close(cc->eye);
    ps3eye_uninit();
#else
    // linux, others and windows opencv only
    cvReleaseCapture(&cc->capture);
#endif

    if (cc->frame3chUndistort) {
        cvReleaseImage(&cc->frame3chUndistort);
    }

    if (cc->mapx) {
        cvReleaseImage(&cc->mapx);
    }

    if (cc->mapy) {
        cvReleaseImage(&cc->mapy);
    }

    free(cc);
}
コード例 #2
0
ファイル: ps3eyedriver.c プロジェクト: tamarmstrong/psmoveapi
ps3eye_t *
ps3eye_open(uint32_t cameraID, uint32_t frame_width, uint32_t frame_height, uint8_t frame_rate)
{
	bool success= true;
	ps3eye_t *camera= NULL;
	
	if ((camera = _ps3eye_camera_allocate()) == NULL)
	{
		debug("ps3eye_open: Can't open camera id %d (unable to allocate)\n", cameraID);
		success= false;		
	}
	
	if (success && 
		!_ps3eye_camera_setup(camera, cameraID, frame_width, frame_height, frame_rate))
	{
		debug("ps3eye_open: Can't open camera id %d (unable to setup camera)\n", cameraID);
		success= false;				
	}
	
	if (success && !_ps3eye_camera_start(camera))
	{
		debug("ps3eye_open: Can't open camera id %d (unable to start streaming)\n", cameraID);
		success= false;				
	}

	if (success && !_ps3eye_camera_thread_start(camera))
	{
		debug("ps3eye_open: Can't open camera id %d (unable to start thread)\n", cameraID);
		success = false;
	}
	
	if (!success)
	{
		ps3eye_close(camera);
		camera = NULL;
	}
	
	return camera;
}
コード例 #3
0
ファイル: ps3eye_sdl.cpp プロジェクト: tamarmstrong/psmoveapi
int
main(int argc, char *argv[])
{
    ps3eye_context ctx(640, 480, 30);
    if (!ctx.hasDevices()) {
        printf("No PS3 Eye camera connected\n");
        return EXIT_FAILURE;
    }

    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("Failed to initialize SDL: %s\n", SDL_GetError());
        return EXIT_FAILURE;
    }

    SDL_Window *window = SDL_CreateWindow(
            "PS3 Eye - SDL 2", SDL_WINDOWPOS_UNDEFINED,
            SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    if (window == NULL) {
        printf("Failed to create window: %s\n", SDL_GetError());
        return EXIT_FAILURE;
    }

    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1,
                                                SDL_RENDERER_PRESENTVSYNC);
    if (renderer == NULL) {
        printf("Failed to create renderer: %s\n", SDL_GetError());
        SDL_DestroyWindow(window);
        return EXIT_FAILURE;
    }
    SDL_RenderSetLogicalSize(renderer, ctx.frame_width, ctx.frame_height);
    print_renderer_info(renderer);

    SDL_Texture *video_tex = SDL_CreateTexture(
            renderer, SDL_PIXELFORMAT_YUY2, SDL_TEXTUREACCESS_STREAMING,
			ctx.frame_width, ctx.frame_height);
    if (video_tex == NULL) {
        printf("Failed to create video texture: %s\n", SDL_GetError());
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        return EXIT_FAILURE;
    }

	ctx.eye = ps3eye_open(0, ctx.frame_width, ctx.frame_height, ctx.frame_rate);
	if (ctx.eye == NULL)
	{
		printf("Failed to initialize camera: %s\n");
		SDL_DestroyRenderer(renderer);
		SDL_DestroyWindow(window);
		return EXIT_FAILURE;
	}

	ps3eye_set_flip(ctx.eye, true, false);

	printf("Camera mode: %dx%d@%d\n", ctx.frame_width, ctx.frame_height, ctx.frame_rate);


    SDL_Event e;
    void *video_tex_pixels;
    int pitch;
    while (ctx.running) {
        while (SDL_PollEvent(&e)) {
            if (e.type == SDL_QUIT) {
                ctx.running = false;
            }
        }

        // TODO: Proper thread signalling to wait for next available buffer
        SDL_Delay(10);
		int row_bytes = 0;
		uint8_t *frame_data = ps3eye_grab_frame(ctx.eye, &row_bytes);
		int frame_data_size = row_bytes * ctx.frame_height;

		if (frame_data != NULL)
		{
			SDL_LockTexture(video_tex, NULL, &video_tex_pixels, &pitch);
			memcpy(video_tex_pixels, frame_data, frame_data_size);
			SDL_UnlockTexture(video_tex);
		}

        SDL_RenderCopy(renderer, video_tex, NULL, NULL);
        SDL_RenderPresent(renderer);
    }

	ps3eye_close(ctx.eye);

    SDL_DestroyTexture(video_tex);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);

    return EXIT_SUCCESS;
}