summaryrefslogtreecommitdiff
Diffstat
-rwxr-xr-xaml_screen.cpp38
-rwxr-xr-xv4l2_vdin.cpp59
-rwxr-xr-xv4l2_vdin.h18
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)