/* * get the current value of a v4l2 string control */ JNIEXPORT jstring JNICALL Java_au_edu_jcu_v4l4j_Control_doGetStringValue(JNIEnv *e, jobject t, jlong object, jint id){ dprint(LOG_CALLS, "[CALL] Entering %s\n",__PRETTY_FUNCTION__); struct v4l4j_device *d = (struct v4l4j_device *) (uintptr_t) object; int ret; char *val; jstring result; XMALLOC(val, char*, d->vdev->control->controls[id].v4l2_ctrl->maximum + 1); // "+ 1" as per spec dprint(LOG_LIBVIDEO, "[LIBVIDEO] Calling get_control_value(dev: %s, ctrl name:%s)\n", d->vdev->file,d->vdev->control->controls[id].v4l2_ctrl->name); ret = get_control_value(d->vdev,d->vdev->control->controls[id].v4l2_ctrl, val, d->vdev->control->controls[id].v4l2_ctrl->maximum + 1); if(ret != 0) { XFREE(val); THROW_EXCEPTION(e, CTRL_EXCP, "Error getting current value for string control '%s'", d->vdev->control->controls[id].v4l2_ctrl->name); return NULL; } dprint(LOG_V4L4J, "[V4L4J] get_control_value(dev: %s, string ctrl name:%s) = %s\n", d->vdev->file,d->vdev->control->controls[id].v4l2_ctrl->name, val); result = (*e)->NewStringUTF(e, val); XFREE(val); return result; }
any Control::value() const { if (m_runner->isRunning()) return m_atomic->value(); else return get_control_value( m_atomic->systemControl() ); }
/* send an HTMl page over the "newsockfd" socket with a list of V4L2 controls (brightness, contrast, ...) * as well as JPEG and fps controls */ void list_cap_param(int newsockfd,struct video_device *d) { char *page, *ptr; struct control_list *l = get_control_list(d); int i, v; XMALLOC(page, char *, PARAM_PAGE_SIZE); ptr = page; ptr += sprintf(ptr,"<html><body>\n"); //outputs JPEG quality control setting ptr += sprintf(ptr,"<form method=\"get\"><h4>JPEG quality</h4>Value: %d (min: 0, max: 100, step: 1)<br>\n", jpeg_quality); ptr += sprintf(ptr,"<input type=\"text\" name=\"val\" value=\"%d\" size=\"5\"> <input type=\"submit\" name=\"-1\" value=\"update\"></form>\n", jpeg_quality); write(newsockfd, page, strlen(page)); ptr = page; memset(page, 0, PARAM_PAGE_SIZE); //outputs frame rate control setting ptr += sprintf(ptr,"<form method=\"get\"><h4>Frame rate</h4>Value: %d (min: 1, max: 25, step: 1)<br>\n", requested_fps); ptr += sprintf(ptr,"<input type=\"text\" name=\"val\" value=\"%d\" size=\"3\"> <input type=\"submit\" name=\"-2\" value=\"update\"></form>\n", requested_fps); write(newsockfd, page, strlen(page)); ptr = page; memset(page, 0, PARAM_PAGE_SIZE); //outputs controls l = d->control; for(i = 0; i< l->count; i++) { if(get_control_value(d, l->controls[i].v4l2_ctrl, &v) != 0) { info(LOG_ERR, "Error getting value for control %s\n", l->controls[i].v4l2_ctrl->name); v = 0; } ptr += sprintf(ptr,"<form method=\"get\"><h4>%s</h4>Value: %d (min: %d, max: %d", l->controls[i].v4l2_ctrl->name, v, l->controls[i].v4l2_ctrl->minimum, l->controls[i].v4l2_ctrl->maximum); if(l->controls[i].count_menu!=0) { int j; ptr += sprintf(ptr,"\n)<select name=\"val\">\n"); for(j=0; j<l->controls[i].count_menu; j++){ ptr += sprintf(ptr, "<option value=\"%d\"%s>%d</option>\n",l->controls[i].v4l2_menu[j].index, v == l->controls[i].v4l2_menu[j].index ? " selected" : "", l->controls[i].v4l2_menu[j].index); } ptr += sprintf(ptr, "</select>\n"); } else { ptr += sprintf(ptr,", step: %d)<br>\n", l->controls[i].v4l2_ctrl->step); ptr += sprintf(ptr,"<input type=\"text\" name=\"val\" value=\"%d\" size=\"5\"> ", v); } ptr += sprintf(ptr, " <input type=\"submit\" name=\"%d\" value=\"update\"></form>\n", i); write(newsockfd, page, strlen(page)); ptr = page; memset(page, 0, PARAM_PAGE_SIZE); } //output end of HTML body ptr += sprintf(ptr,"</body></html>\n"); write(newsockfd, page, strlen(page)); XFREE(page); release_control_list(d); }
/* * get the current value of a v4l2 control */ JNIEXPORT jint JNICALL Java_au_edu_jcu_v4l4j_Control_doGetValue(JNIEnv *e, jobject t, jlong object, jint id){ dprint(LOG_CALLS, "[CALL] Entering %s\n",__PRETTY_FUNCTION__); struct v4l4j_device *d = (struct v4l4j_device *) (uintptr_t) object; int val = 0, ret; dprint(LOG_LIBVIDEO, "[LIBVIDEO] Calling get_control_value(dev: %s, ctrl name:%s)\n", d->vdev->file,d->vdev->control->controls[id].v4l2_ctrl->name); ret = get_control_value(d->vdev,d->vdev->control->controls[id].v4l2_ctrl, &val, 0); if(ret != 0) { THROW_EXCEPTION(e, CTRL_EXCP, "Error getting current value for control '%s'", d->vdev->control->controls[id].v4l2_ctrl->name); return -1; } dprint(LOG_V4L4J, "[V4L4J] get_control_value(dev: %s, ctrl name:%s) = %d\n", d->vdev->file,d->vdev->control->controls[id].v4l2_ctrl->name, val); return val; }
/* * get the current value of a v4l2 integer64 control */ JNIEXPORT jlong JNICALL Java_au_edu_jcu_v4l4j_Control_doGetLongValue(JNIEnv *e, jobject t, jlong object, jint id){ dprint(LOG_CALLS, "[CALL] Entering %s\n",__PRETTY_FUNCTION__); struct v4l4j_device *d = (struct v4l4j_device *) (uintptr_t) object; int ret; jlong result; dprint(LOG_LIBVIDEO, "[LIBVIDEO] Calling get_control_value(dev: %s, ctrl name:%s)\n", d->vdev->file, d->vdev->control->controls[id].v4l2_ctrl->name); ret = get_control_value(d->vdev,d->vdev->control->controls[id].v4l2_ctrl, &result, 0); if(ret != 0) { THROW_EXCEPTION(e, CTRL_EXCP, "Error getting current value for long control '%s'", d->vdev->control->controls[id].v4l2_ctrl->name); return 0; } dprint(LOG_V4L4J, "[V4L4J] get_control_value(dev: %s, integer64 ctrl name:%s) = %lld\n", d->vdev->file,d->vdev->control->controls[id].v4l2_ctrl->name, (unsigned long long)result); return result; }