-rwxr-xr-x | aml_screen.cpp | 38 | ||||
-rwxr-xr-x | v4l2_vdin.cpp | 59 | ||||
-rwxr-xr-x | v4l2_vdin.h | 18 |
3 files changed, 69 insertions, 46 deletions
diff --git a/v4l2_vdin.cpp b/v4l2_vdin.cpp index 48a9d54..1d748a8 100755 --- a/v4l2_vdin.cpp +++ b/v4l2_vdin.cpp @@ -16,7 +16,7 @@ //reinclude because of a bug with the log macros -#define LOG_NDEBUG 0 +//#define LOG_NDEBUG 0 #define LOG_TAG "V4L2VINSOURCE" #include <utils/Log.h> #include <utils/String8.h> @@ -46,7 +46,7 @@ vdin_screen_source::vdin_screen_source() : mCameraHandle(-1), mVideoInfo(NULL) { - mCameraHandle = open("/dev/video11", O_RDWR); + mCameraHandle = open("/dev/video11", O_RDWR| O_NONBLOCK); if (mCameraHandle < 0) { ALOGE("[%s %d] mCameraHandle:%x", __FUNCTION__, __LINE__, mCameraHandle); @@ -72,11 +72,11 @@ vdin_screen_source::~vdin_screen_source() int vdin_screen_source::start() { - int ret = -1; + int ret = -1; - ALOGV("[%s %d] mCameraHandle:%x", __FUNCTION__, __LINE__, mCameraHandle); + ALOGV("[%s %d] mCameraHandle:%x", __FUNCTION__, __LINE__, mCameraHandle); - ioctl(mCameraHandle, VIDIOC_QUERYCAP, &mVideoInfo->cap); + ioctl(mCameraHandle, VIDIOC_QUERYCAP, &mVideoInfo->cap); mVideoInfo->rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; mVideoInfo->rb.memory = V4L2_MEMORY_MMAP; @@ -98,23 +98,24 @@ int vdin_screen_source::start() ret = ioctl (mCameraHandle, VIDIOC_QUERYBUF, &mVideoInfo->buf); if (ret < 0) { - ALOGE("[%s %d]VIDIOC_QUERYBUF %d failed", __FUNCTION__, __LINE__, i); + ALOGE("[%s %d]VIDIOC_QUERYBUF %d failed", __FUNCTION__, __LINE__, i); return ret; } + mVideoInfo->canvas[i] = mVideoInfo->buf.reserved; mVideoInfo->mem[i] = mmap (0, mVideoInfo->buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, mCameraHandle, mVideoInfo->buf.m.offset); if (mVideoInfo->mem[i] == MAP_FAILED) { - ALOGE("[%s %d] MAP_FAILED", __FUNCTION__, __LINE__); + ALOGE("[%s %d] MAP_FAILED", __FUNCTION__, __LINE__); return -1; } - + mBufs.add((int)mVideoInfo->mem[i], i); } ALOGV("[%s %d] VIDIOC_QUERYBUF successful", __FUNCTION__, __LINE__); for (int i = 0; i < NB_BUFFER; i++) { - mVideoInfo->buf.index = i; + mVideoInfo->buf.index = i; mVideoInfo->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; mVideoInfo->buf.memory = V4L2_MEMORY_MMAP; ret = ioctl(mCameraHandle, VIDIOC_QBUF, &mVideoInfo->buf); @@ -124,11 +125,11 @@ int vdin_screen_source::start() } } enum v4l2_buf_type bufType; - bufType = V4L2_BUF_TYPE_VIDEO_CAPTURE; + bufType = V4L2_BUF_TYPE_VIDEO_CAPTURE; - ret = ioctl (mCameraHandle, VIDIOC_STREAMON, &bufType); + ret = ioctl (mCameraHandle, VIDIOC_STREAMON, &bufType); - ALOGV("[%s %d] VIDIOC_STREAMON:%x", __FUNCTION__, __LINE__, ret); + ALOGV("[%s %d] VIDIOC_STREAMON:%x", __FUNCTION__, __LINE__, ret); return ret; } @@ -172,24 +173,42 @@ int vdin_screen_source::set_format(int width, int height, int color_format) ret = ioctl(mCameraHandle, VIDIOC_S_FMT, &mVideoInfo->format); if (ret < 0) { - ALOGE("[%s %d]VIDIOC_S_FMT %d", __FUNCTION__, __LINE__, ret); + ALOGE("[%s %d]VIDIOC_S_FMT %d", __FUNCTION__, __LINE__, ret); return ret; } return ret; } +int vdin_screen_source::set_rotation(int degree) +{ + ALOGV("[%s %d]", __FUNCTION__, __LINE__); + int ret = 0; + return ret; +} -char* vdin_screen_source::aquire_buffer() + +int vdin_screen_source::aquire_buffer(unsigned *buff_info) { - int ret = -1; - - mVideoInfo->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + int ret = -1; + + mVideoInfo->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; mVideoInfo->buf.memory = V4L2_MEMORY_MMAP; - ret = ioctl(mCameraHandle, VIDIOC_DQBUF, &mVideoInfo->buf); - - return (char *)mVideoInfo->mem[mVideoInfo->buf.index]; + ret = ioctl(mCameraHandle, VIDIOC_DQBUF, &mVideoInfo->buf); + if (ret < 0) { + if(EAGAIN == errno){ + ret = -EAGAIN; + }else{ + ALOGE("[%s %d]aquire_buffer %d", __FUNCTION__, __LINE__, ret); + } + buff_info[0] = 0; + buff_info[1] = 0; + return ret; + } + buff_info[0] = (unsigned)mVideoInfo->mem[mVideoInfo->buf.index]; + buff_info[1] = (unsigned)mVideoInfo->canvas[mVideoInfo->buf.index]; + return ret; } int vdin_screen_source::release_buffer(char* ptr) |