Beispiel #1
0
void Image_Handler(FCGIContext * context, char * params)
{
    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;
    }

    if (captureID != num) {
        if (captureID >= 0) {
            cvReleaseCapture(&capture);
        }
        capture = cvCreateCameraCapture(num);
        captureID = num;
    }

    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);
    assert(frame != NULL);

//        CvMat stub;
//       CvMat * background = cvGetMat(frame, &stub, 0, 0);

//	CvMat *cv8u = cvCreateMat(frame->width, frame->height, CV_8U);
//	double min, max;
//	CvPoint a,b;
//	cvMinMaxLoc(background, &min, &max, &a, &b, 0);

//	double ccscale = 255.0/(max-min);
//	double ccshift = -min;
    //cvCvtScale(frame, cv8u, ccscale, ccshift);
    CvMat * jpg = cvEncodeImage(".jpg", frame, p);

    // Will this work?
    Log(LOGNOTE, "Sending image!");
    FCGI_PrintRaw("Content-type: image/jpg\r\n");
    FCGI_PrintRaw("Cache-Control: no-cache, no-store, must-revalidate\r\n\r\n");
    //FCGI_PrintRaw("Content-Length: %d", jpg->rows*jpg->cols);
    FCGI_WriteBinary(jpg->data.ptr,1,jpg->rows*jpg->cols);

    cvReleaseMat(&jpg);
    cvReleaseImageHeader(&frame);
}
Beispiel #2
0
/**
 * Helper: Begin Actuator response in a given format
 * @param context - the FCGIContext
 * @param format - Format
 * @param id - ID of Actuator
 */
void Actuator_BeginResponse(FCGIContext * context, Actuator * a, DataFormat format)
{
	// Begin response
	switch (format)
	{
		case JSON:
			FCGI_BeginJSON(context, STATUS_OK);
			FCGI_JSONLong("id", a->id);
			FCGI_JSONLong("user_id", a->user_id); //TODO: Don't need to show this?
			FCGI_JSONPair("name", a->name);
			break;
		default:
			FCGI_PrintRaw("Content-type: text/plain\r\n\r\n");
			break;
	}
}
Beispiel #3
0
/**
 * Helper: Begin sensor response in a given format
 * @param context - the FCGIContext
 * @param id - ID of sensor
 * @param format - Format
 */
void Sensor_BeginResponse(FCGIContext * context, Sensor * s, DataFormat format)
{
	// Begin response
	switch (format)
	{
		case JSON:
			FCGI_BeginJSON(context, STATUS_OK);
			FCGI_JSONLong("id", s->id);
			FCGI_JSONLong("user_id", s->user_id); //NOTE: Might not want to expose this?
			FCGI_JSONPair("name", s->name);
			break;
		default:
			FCGI_PrintRaw("Content-type: text/plain\r\n\r\n");
			break;
	}
}