int readframe(void) { struct v4l2_buffer buf; unsigned int i; CLEAR (buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; if (-1 == xioctl (fd, VIDIOC_DQBUF, &buf)) { switch (errno) { case EAGAIN: return 0; case EIO: default: return errnoexit ("VIDIOC_DQBUF"); } } assert (buf.index < n_buffers); processimage (buffers[buf.index].start); if (-1 == xioctl (fd, VIDIOC_QBUF, &buf)) return errnoexit ("VIDIOC_QBUF"); return 1; }
int readframe(int i) { struct v4l2_buffer buf; CLEAR (buf); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; if (-1 == xioctl (fd[i], VIDIOC_DQBUF, &buf)) { switch (errno) { case EAGAIN: return 0; case EIO: default: return errnoexit ("VIDIOC_DQBUF"); } } assert (buf.index < n_buffers[i]); processimage (i, buffers[i][buf.index].start, buffers[i][buf.index].length); if (-1 == xioctl (fd[i], VIDIOC_QBUF, &buf)){ LOGE("in readframe"); return errnoexit ("VIDIOC_QBUF"); } return 1; }
int Java_com_example_android_wearable_mjpegviewwear_MjpegInputStream_pixeltobmp( JNIEnv* env,jobject thiz, jbyteArray jp, jint l, jobject bmp) { jboolean b; jbyte *p=(*env)->GetByteArrayElements(env,jp,&b); processimage ((const void *)p, l); AndroidBitmapInfo info; void* pixels; int ret; int i; int *colors; int width = IMG_WIDTH; int height = IMG_HEIGHT; if(bmp==NULL) return; if ((ret = AndroidBitmap_getInfo(env, bmp, &info)) < 0) { LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret); (*env)->ReleaseByteArrayElements(env, jp, p, 0); return -1; } if (info.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { LOGE("Bitmap format is not RGBA_8888 !"); (*env)->ReleaseByteArrayElements(env, jp, p, 0); return -1; } if (info.width != IMG_WIDTH || info.height != IMG_HEIGHT) { LOGE("Bitmap size differs !"); (*env)->ReleaseByteArrayElements(env, jp, p, 0); return -1; } if ((ret = AndroidBitmap_lockPixels(env, bmp, &pixels)) < 0) { LOGE("AndroidBitmap_lockPixels() failed ! error=%d", ret); } colors = (int*)pixels; int *lrgb = &rgb[0]; for(i=0 ; i<width*height ; i++) { *colors++ = *lrgb++; } AndroidBitmap_unlockPixels(env, bmp); (*env)->ReleaseByteArrayElements(env, jp, p, 0); return 0; }