From 38eaf6fec43e210803246c75202f02eb611180df Mon Sep 17 00:00:00 2001 From: Debian User Date: Thu, 17 Oct 2013 09:57:58 +0800 Subject: [PATCH] Modify image capture routine --- server/image.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/server/image.c b/server/image.c index c7b62635..a24d091 100644 --- a/server/image.c +++ b/server/image.c @@ -4,15 +4,35 @@ #include #include +CvCapture *captures[2] = {0}; + void Image_Handler(FCGIContext * context, char * params) { - static CvCapture * capture = NULL; + int num = 0, width = 800, height = 600; + FCGIValue val[] = { + {"num", &num, FCGI_INT_T}, + {"width", &width, FCGI_INT_T}, + {"height", &height, FCGI_INT_T} + }; + if (!FCGI_ParseRequest(context, params, val, 3)) + return; + else if (num < 0 || num > 1) { + FCGI_RejectJSON(context, "Invalid capture number"); + return; + } else if (width <= 0 || height <= 0) { + FCGI_RejectJSON(context, "Invalid width/height"); + return; + } + + CvCapture *capture = captures[num]; if (capture == NULL) { - capture = cvCreateCameraCapture(0); - //limit resolution to work on bbb - cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 352); - cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 288); + capture = cvCreateCameraCapture(num); + captures[num] = capture; } + + cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, width); + cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, height); + static int p[] = {CV_IMWRITE_JPEG_QUALITY, 100, 0}; IplImage * frame = cvQueryFrame(capture); -- 2.20.1