|
|
|
@ -29,7 +29,7 @@ |
|
|
|
|
* Adjust V4L2 architecture \n |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#define LOG_TAG "libfimc" |
|
|
|
|
#define ALOG_TAG "libfimc" |
|
|
|
|
#include <cutils/log.h> |
|
|
|
|
|
|
|
|
|
#include "SecFimc.h" |
|
|
|
@ -86,67 +86,67 @@ struct yuv_fmt_list yuv_list[] = { |
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
void dump_pixfmt_mp(struct v4l2_pix_format_mplane *pix_mp) |
|
|
|
|
{ |
|
|
|
|
LOGI("w: %d", pix_mp->width); |
|
|
|
|
LOGI("h: %d", pix_mp->height); |
|
|
|
|
LOGI("color: %x", pix_mp->colorspace); |
|
|
|
|
ALOGI("w: %d", pix_mp->width); |
|
|
|
|
ALOGI("h: %d", pix_mp->height); |
|
|
|
|
ALOGI("color: %x", pix_mp->colorspace); |
|
|
|
|
|
|
|
|
|
switch (pix_mp->pixelformat) { |
|
|
|
|
case V4L2_PIX_FMT_YUYV: |
|
|
|
|
LOGI ("YUYV"); |
|
|
|
|
ALOGI ("YUYV"); |
|
|
|
|
break; |
|
|
|
|
case V4L2_PIX_FMT_UYVY: |
|
|
|
|
LOGI ("UYVY"); |
|
|
|
|
ALOGI ("UYVY"); |
|
|
|
|
break; |
|
|
|
|
case V4L2_PIX_FMT_RGB565: |
|
|
|
|
LOGI ("RGB565"); |
|
|
|
|
ALOGI ("RGB565"); |
|
|
|
|
break; |
|
|
|
|
case V4L2_PIX_FMT_RGB565X: |
|
|
|
|
LOGI ("RGB565X"); |
|
|
|
|
ALOGI ("RGB565X"); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
LOGI("not supported"); |
|
|
|
|
ALOGI("not supported"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
void dump_pixfmt(struct v4l2_pix_format *pix) |
|
|
|
|
{ |
|
|
|
|
LOGI("w: %d", pix->width); |
|
|
|
|
LOGI("h: %d", pix->height); |
|
|
|
|
LOGI("color: %x", pix->colorspace); |
|
|
|
|
ALOGI("w: %d", pix->width); |
|
|
|
|
ALOGI("h: %d", pix->height); |
|
|
|
|
ALOGI("color: %x", pix->colorspace); |
|
|
|
|
|
|
|
|
|
switch (pix->pixelformat) { |
|
|
|
|
case V4L2_PIX_FMT_YUYV: |
|
|
|
|
LOGI ("YUYV"); |
|
|
|
|
ALOGI ("YUYV"); |
|
|
|
|
break; |
|
|
|
|
case V4L2_PIX_FMT_UYVY: |
|
|
|
|
LOGI ("UYVY"); |
|
|
|
|
ALOGI ("UYVY"); |
|
|
|
|
break; |
|
|
|
|
case V4L2_PIX_FMT_RGB565: |
|
|
|
|
LOGI ("RGB565"); |
|
|
|
|
ALOGI ("RGB565"); |
|
|
|
|
break; |
|
|
|
|
case V4L2_PIX_FMT_RGB565X: |
|
|
|
|
LOGI ("RGB565X"); |
|
|
|
|
ALOGI ("RGB565X"); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
LOGI("not supported"); |
|
|
|
|
ALOGI("not supported"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void dump_crop(struct v4l2_crop *crop) |
|
|
|
|
{ |
|
|
|
|
LOGI("crop l: %d", crop->c.left); |
|
|
|
|
LOGI("crop t: %d", crop->c.top); |
|
|
|
|
LOGI("crop w: %d", crop->c.width); |
|
|
|
|
LOGI("crop h: %d", crop->c.height); |
|
|
|
|
ALOGI("crop l: %d", crop->c.left); |
|
|
|
|
ALOGI("crop t: %d", crop->c.top); |
|
|
|
|
ALOGI("crop w: %d", crop->c.width); |
|
|
|
|
ALOGI("crop h: %d", crop->c.height); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void dump_window(struct v4l2_window *win) |
|
|
|
|
{ |
|
|
|
|
LOGI("window l: %d", win->w.left); |
|
|
|
|
LOGI("window t: %d", win->w.top); |
|
|
|
|
LOGI("window w: %d", win->w.width); |
|
|
|
|
LOGI("window h: %d", win->w.height); |
|
|
|
|
ALOGI("window l: %d", win->w.left); |
|
|
|
|
ALOGI("window t: %d", win->w.top); |
|
|
|
|
ALOGI("window w: %d", win->w.width); |
|
|
|
|
ALOGI("window h: %d", win->w.height); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void v4l2_overlay_dump_state(int fd) |
|
|
|
@ -158,7 +158,7 @@ void v4l2_overlay_dump_state(int fd) |
|
|
|
|
if (ioctl(fd, VIDIOC_G_FMT, &format) < 0) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
LOGI("dumping driver state:"); |
|
|
|
|
ALOGI("dumping driver state:"); |
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
dump_pixfmt_mp(&format.fmt.pix_mp); |
|
|
|
|
#else |
|
|
|
@ -169,14 +169,14 @@ void v4l2_overlay_dump_state(int fd) |
|
|
|
|
if (ioctl(fd, VIDIOC_G_CROP, &crop) < 0) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
LOGI("input window(crop):"); |
|
|
|
|
ALOGI("input window(crop):"); |
|
|
|
|
dump_crop(&crop); |
|
|
|
|
|
|
|
|
|
crop.type = V4L2_BUF_TYPE_CAPTURE; |
|
|
|
|
if (ioctl(fd, VIDIOC_G_CROP, &crop) < 0) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
LOGI("output crop:"); |
|
|
|
|
ALOGI("output crop:"); |
|
|
|
|
dump_crop(&crop); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
@ -193,7 +193,7 @@ int fimc_v4l2_query_buf(int fd, SecBuffer *secBuf, enum v4l2_buf_type type, enum |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (MAX_DST_BUFFERS <= buf_index || MAX_PLANES <= num_plane) { |
|
|
|
|
LOGE("%s::exceed MAX! : buf_index=%d, num_plane=%d", __func__, buf_index, num_plane); |
|
|
|
|
ALOGE("%s::exceed MAX! : buf_index=%d, num_plane=%d", __func__, buf_index, num_plane); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -206,7 +206,7 @@ int fimc_v4l2_query_buf(int fd, SecBuffer *secBuf, enum v4l2_buf_type type, enum |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_QUERYBUF, &buf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_QUERYBUF failed, plane_cnt=%d", __func__, buf.length); |
|
|
|
|
ALOGE("%s::VIDIOC_QUERYBUF failed, plane_cnt=%d", __func__, buf.length); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -217,11 +217,11 @@ int fimc_v4l2_query_buf(int fd, SecBuffer *secBuf, enum v4l2_buf_type type, enum |
|
|
|
|
|
|
|
|
|
if ((secBuf->virt.extP[i] = (char *)mmap(0, buf.m.planes[i].length, |
|
|
|
|
PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.planes[i].m.mem_offset)) < 0) { |
|
|
|
|
LOGE("%s::mmap failed", __func__); |
|
|
|
|
LOGE("%s::Offset = 0x%x", __func__, buf.m.planes[i].m.mem_offset); |
|
|
|
|
LOGE("%s::Legnth = %d" , __func__, buf.m.planes[i].length); |
|
|
|
|
LOGE("%s::vaddr[%d][%d] = 0x%x", __func__, buf_index, i, (unsigned int)secBuf->virt.extP[i]); |
|
|
|
|
LOGE("%s::paddr[%d][%d] = 0x%x", __func__, buf_index, i, (unsigned int)secBuf->phys.extP[i]); |
|
|
|
|
ALOGE("%s::mmap failed", __func__); |
|
|
|
|
ALOGE("%s::Offset = 0x%x", __func__, buf.m.planes[i].m.mem_offset); |
|
|
|
|
ALOGE("%s::Legnth = %d" , __func__, buf.m.planes[i].length); |
|
|
|
|
ALOGE("%s::vaddr[%d][%d] = 0x%x", __func__, buf_index, i, (unsigned int)secBuf->virt.extP[i]); |
|
|
|
|
ALOGE("%s::paddr[%d][%d] = 0x%x", __func__, buf_index, i, (unsigned int)secBuf->phys.extP[i]); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -230,10 +230,10 @@ int fimc_v4l2_query_buf(int fd, SecBuffer *secBuf, enum v4l2_buf_type type, enum |
|
|
|
|
|
|
|
|
|
if ((secBuf->virt.p = (char *)mmap(0, buf.length, |
|
|
|
|
PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset)) < 0) { |
|
|
|
|
LOGE("%s::mmap failed", __func__); |
|
|
|
|
ALOGE("%s::mmap failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
LOGI("%s::buffers[%d] vaddr = 0x%x", __func__, buf_index, (unsigned int)secBuf->virt.p); |
|
|
|
|
ALOGI("%s::buffers[%d] vaddr = 0x%x", __func__, buf_index, (unsigned int)secBuf->virt.p); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
@ -248,16 +248,16 @@ int fimc_v4l2_req_buf(int fd, unsigned int num_bufs, enum v4l2_buf_type type, en |
|
|
|
|
reqbuf.count = num_bufs; |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_REQBUFS, &reqbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_REQBUFS failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_REQBUFS failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGI("%d buffers allocated %d requested", reqbuf.count, 4); |
|
|
|
|
ALOGI("%d buffers allocated %d requested", reqbuf.count, 4); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (reqbuf.count < num_bufs) { |
|
|
|
|
LOGE("%s::VIDIOC_REQBUFS failed ((reqbuf.count(%d) < num_bufs(%d))", |
|
|
|
|
ALOGE("%s::VIDIOC_REQBUFS failed ((reqbuf.count(%d) < num_bufs(%d))", |
|
|
|
|
__func__, reqbuf.count, num_bufs); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
@ -272,7 +272,7 @@ int fimc_v4l2_s_ctrl(int fd, int id, int value) |
|
|
|
|
vc.value = value; |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_CTRL (id=%d,value=%d) failed", __func__, id, value); |
|
|
|
|
ALOGE("%s::VIDIOC_S_CTRL (id=%d,value=%d) failed", __func__, id, value); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -289,7 +289,7 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
|
|
|
|
|
fmt.type = type; |
|
|
|
|
if (ioctl(fd, VIDIOC_G_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -313,7 +313,7 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
#endif |
|
|
|
|
case V4L2_BUF_TYPE_VIDEO_OVERLAY: |
|
|
|
|
if (ioctl(fd, VIDIOC_G_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -323,7 +323,7 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
fbuf.fmt.pixelformat = img_info->color_space; |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_S_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_FBUF (w=%d, h=%d, color=%d) failed", |
|
|
|
|
ALOGE("%s::VIDIOC_S_FBUF (w=%d, h=%d, color=%d) failed", |
|
|
|
|
__func__, |
|
|
|
|
img_info->full_width, |
|
|
|
|
img_info->full_height, |
|
|
|
@ -339,7 +339,7 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
vc.value = (unsigned int)&fimc_dst_buf.base[0]; |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_S_CTRL, &vc) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_CTRL (id=%d,value=%d) failed", __func__, vc.id, vc.value); |
|
|
|
|
ALOGE("%s::VIDIOC_S_CTRL (id=%d,value=%d) failed", __func__, vc.id, vc.value); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -349,13 +349,13 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
fmt.fmt.win.w.height = img_info->height; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
LOGE("invalid buffer type"); |
|
|
|
|
ALOGE("invalid buffer type"); |
|
|
|
|
return -1; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_S_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_S_FMT failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -367,7 +367,7 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
crop.c.height = img_info->height; |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_S_CROP, &crop) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_CROP (x=%d, y=%d, w=%d, h=%d) failed", |
|
|
|
|
ALOGE("%s::VIDIOC_S_CROP (x=%d, y=%d, w=%d, h=%d) failed", |
|
|
|
|
__func__, |
|
|
|
|
img_info->start_x, |
|
|
|
|
img_info->start_y, |
|
|
|
@ -383,7 +383,7 @@ int fimc_v4l2_set_fmt(int fd, enum v4l2_buf_type type, enum v4l2_field field, s5 |
|
|
|
|
int fimc_v4l2_stream_on(int fd, enum v4l2_buf_type type) |
|
|
|
|
{ |
|
|
|
|
if (ioctl(fd, VIDIOC_STREAMON, &type) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_STREAMON failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_STREAMON failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -425,7 +425,7 @@ int fimc_v4l2_queue(int fd, SecBuffer *secBuf, enum v4l2_buf_type type, enum v4l |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_QBUF, &buf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_QBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_QBUF failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -450,7 +450,7 @@ int fimc_v4l2_dequeue(int fd, enum v4l2_buf_type type, enum v4l2_memory memory, |
|
|
|
|
buf.m.planes = planes; |
|
|
|
|
#endif |
|
|
|
|
if (ioctl(fd, VIDIOC_DQBUF, &buf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_DQBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_DQBUF failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
*index = buf.index; |
|
|
|
@ -461,7 +461,7 @@ int fimc_v4l2_dequeue(int fd, enum v4l2_buf_type type, enum v4l2_memory memory, |
|
|
|
|
int fimc_v4l2_stream_off(int fd, enum v4l2_buf_type type) |
|
|
|
|
{ |
|
|
|
|
if (ioctl(fd, VIDIOC_STREAMOFF, &type) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_STREAMOFF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_STREAMOFF failed", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -477,7 +477,7 @@ int fimc_v4l2_clr_buf(int fd, enum v4l2_buf_type type, enum v4l2_memory memory) |
|
|
|
|
req.memory = memory; |
|
|
|
|
|
|
|
|
|
if (ioctl(fd, VIDIOC_REQBUFS, &req) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_REQBUFS", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_REQBUFS", __func__); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -543,16 +543,16 @@ SecFimc::SecFimc() |
|
|
|
|
SecFimc::~SecFimc() |
|
|
|
|
{ |
|
|
|
|
if (mFlagCreate == true) { |
|
|
|
|
LOGE("%s::this is not Destroyed fail", __func__); |
|
|
|
|
ALOGE("%s::this is not Destroyed fail", __func__); |
|
|
|
|
if (destroy() == false) |
|
|
|
|
LOGE("%s::destroy failed", __func__); |
|
|
|
|
ALOGE("%s::destroy failed", __func__); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool SecFimc::create(enum DEV dev, enum MODE mode, int numOfBuf) |
|
|
|
|
{ |
|
|
|
|
if (mFlagCreate == true) { |
|
|
|
|
LOGE("%s::Already Created fail", __func__); |
|
|
|
|
ALOGE("%s::Already Created fail", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -575,7 +575,7 @@ bool SecFimc::create(enum DEV dev, enum MODE mode, int numOfBuf) |
|
|
|
|
mFimcMode = FIMC_OVLY_DMA_AUTO; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
LOGE("%s::Invalid mode(%d) fail", __func__, mode); |
|
|
|
|
ALOGE("%s::Invalid mode(%d) fail", __func__, mode); |
|
|
|
|
mFimcMode = FIMC_OVLY_NOT_FIXED; |
|
|
|
|
goto err; |
|
|
|
|
break; |
|
|
|
@ -601,7 +601,7 @@ bool SecFimc::create(enum DEV dev, enum MODE mode, int numOfBuf) |
|
|
|
|
mRealDev = 5; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
LOGE("%s::invalid mDev(%d)", __func__, mDev); |
|
|
|
|
ALOGE("%s::invalid mDev(%d)", __func__, mDev); |
|
|
|
|
goto err; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -611,48 +611,48 @@ bool SecFimc::create(enum DEV dev, enum MODE mode, int numOfBuf) |
|
|
|
|
|
|
|
|
|
mFd = open(node, O_RDWR); |
|
|
|
|
if (mFd < 0) { |
|
|
|
|
LOGE("%s::open(%s) failed", __func__, node); |
|
|
|
|
ALOGE("%s::open(%s) failed", __func__, node); |
|
|
|
|
mFd = 0; |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* check capability */ |
|
|
|
|
if (ioctl(mFd, VIDIOC_QUERYCAP, &mFimcCap) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_QUERYCAP failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_QUERYCAP failed", __func__); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!(mFimcCap.capabilities & V4L2_CAP_STREAMING)) { |
|
|
|
|
LOGE("%s::%s has no streaming support", __func__, node); |
|
|
|
|
ALOGE("%s::%s has no streaming support", __func__, node); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (!(mFimcCap.capabilities & V4L2_CAP_VIDEO_OUTPUT_MPLANE)) { |
|
|
|
|
LOGE("%s::%s is no video output mplane", __func__, node); |
|
|
|
|
ALOGE("%s::%s is no video output mplane", __func__, node); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!(mFimcCap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE)) { |
|
|
|
|
LOGE("%s::%s is no video capture mplane", __func__, node); |
|
|
|
|
ALOGE("%s::%s is no video capture mplane", __func__, node); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
if (!(mFimcCap.capabilities & V4L2_CAP_VIDEO_OUTPUT)) { |
|
|
|
|
LOGE("%s::%s is no video output", __func__, node); |
|
|
|
|
ALOGE("%s::%s is no video output", __func__, node); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; |
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vc.id = V4L2_CID_RESERVED_MEM_BASE_ADDR; |
|
|
|
|
vc.value = 0; |
|
|
|
|
if (ioctl(mFd, VIDIOC_G_CTRL, &vc) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_CTRL - V4L2_CID_RESERVED_MEM_BAES_ADDR", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_CTRL - V4L2_CID_RESERVED_MEM_BAES_ADDR", __func__); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -663,7 +663,7 @@ bool SecFimc::create(enum DEV dev, enum MODE mode, int numOfBuf) |
|
|
|
|
vc.id = V4L2_CID_FIMC_VERSION; |
|
|
|
|
vc.value = 0; |
|
|
|
|
if (ioctl(mFd, VIDIOC_G_CTRL, &vc) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_CTRL - V4L2_CID_FIMC_VERSION failed, FIMC version is set with default", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_CTRL - V4L2_CID_FIMC_VERSION failed, FIMC version is set with default", __func__); |
|
|
|
|
vc.value = 0x43; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -672,7 +672,7 @@ bool SecFimc::create(enum DEV dev, enum MODE mode, int numOfBuf) |
|
|
|
|
vc.id = V4L2_CID_OVLY_MODE; |
|
|
|
|
vc.value = mFimcMode; |
|
|
|
|
if (ioctl(mFd, VIDIOC_S_CTRL, &vc) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_CTRL - V4L2_CID_OVLY_MODE failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_S_CTRL - V4L2_CID_OVLY_MODE failed", __func__); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -694,18 +694,18 @@ bool SecFimc::destroy() |
|
|
|
|
s5p_fimc_params_t *params = &(mS5pFimc.params); |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Already Destroyed fail", __func__); |
|
|
|
|
ALOGE("%s::Already Destroyed fail", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mFlagStreamOn == true) { |
|
|
|
|
if (fimc_v4l2_stream_off(mFd, V4L2_BUF_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_stream_off() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_stream_off() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (fimc_v4l2_stream_off(mFd, V4L2_BUF_TYPE_DST) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_stream_off() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_stream_off() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -713,13 +713,13 @@ bool SecFimc::destroy() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_clr_buf(mFd, V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_clr_buf()[src] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_clr_buf()[src] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (fimc_v4l2_clr_buf(mFd, V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_clr_buf()[dst] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_clr_buf()[dst] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -750,7 +750,7 @@ int SecFimc::getFd(void) |
|
|
|
|
SecBuffer * SecFimc::getMemAddr(int index) |
|
|
|
|
{ |
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -760,7 +760,7 @@ SecBuffer * SecFimc::getMemAddr(int index) |
|
|
|
|
int SecFimc::getHWVersion(void) |
|
|
|
|
{ |
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -774,17 +774,17 @@ bool SecFimc::setSrcParams(unsigned int width, unsigned int height, |
|
|
|
|
bool forceChange) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("%s", __func__); |
|
|
|
|
ALOGD("%s", __func__); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int v4l2ColorFormat = HAL_PIXEL_FORMAT_2_V4L2_PIX(colorFormat); |
|
|
|
|
if (v4l2ColorFormat < 0) { |
|
|
|
|
LOGE("%s::not supported color format", __func__); |
|
|
|
|
ALOGE("%s::not supported color format", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -803,11 +803,11 @@ bool SecFimc::setSrcParams(unsigned int width, unsigned int height, |
|
|
|
|
if (fimcWidth != *cropWidth || fimcHeight != *cropHeight) { |
|
|
|
|
if (forceChange == true) { |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("size is changed from [w = %d, h= %d] to [w = %d, h = %d]", |
|
|
|
|
ALOGD("size is changed from [w = %d, h= %d] to [w = %d, h = %d]", |
|
|
|
|
*cropWidth, *cropHeight, fimcWidth, fimcHeight); |
|
|
|
|
#endif |
|
|
|
|
} else { |
|
|
|
|
LOGE("%s::invalid source params", __func__); |
|
|
|
|
ALOGE("%s::invalid source params", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -832,18 +832,18 @@ bool SecFimc::setSrcParams(unsigned int width, unsigned int height, |
|
|
|
|
|
|
|
|
|
if (mFlagSetSrcParam == true) { |
|
|
|
|
if (fimc_v4l2_clr_buf(mFd, V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_clr_buf_src() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_clr_buf_src() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_set_fmt(mFd, V4L2_BUF_TYPE_SRC, V4L2_FIELD_NONE, &(params->src), 0) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_set_fmt()[src] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_set_fmt()[src] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_req_buf(mFd, 1, V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_req_buf()[src] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_req_buf()[src] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -865,7 +865,7 @@ bool SecFimc::getSrcParams(unsigned int *width, unsigned int *height, |
|
|
|
|
fmt.type = V4L2_BUF_TYPE_SRC; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FMT(fmt.type : %d) failed", __func__, fmt.type); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FMT(fmt.type : %d) failed", __func__, fmt.type); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -886,14 +886,14 @@ bool SecFimc::getSrcParams(unsigned int *width, unsigned int *height, |
|
|
|
|
break; |
|
|
|
|
#endif |
|
|
|
|
default: |
|
|
|
|
LOGE("%s::Invalid buffer type", __func__); |
|
|
|
|
ALOGE("%s::Invalid buffer type", __func__); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
crop.type = V4L2_BUF_TYPE_SRC; |
|
|
|
|
if (ioctl(mFd, VIDIOC_G_CROP, &crop) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_CROP failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_CROP failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -911,11 +911,11 @@ bool SecFimc::setSrcAddr(unsigned int physYAddr, |
|
|
|
|
int colorFormat) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("%s", __func__); |
|
|
|
|
ALOGD("%s", __func__); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -962,17 +962,17 @@ bool SecFimc::setDstParams(unsigned int width, unsigned int height, |
|
|
|
|
bool forceChange) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("%s", __func__); |
|
|
|
|
ALOGD("%s", __func__); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int v4l2ColorFormat = HAL_PIXEL_FORMAT_2_V4L2_PIX(colorFormat); |
|
|
|
|
if (v4l2ColorFormat < 0) { |
|
|
|
|
LOGE("%s::not supported color format", __func__); |
|
|
|
|
ALOGE("%s::not supported color format", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -992,11 +992,11 @@ bool SecFimc::setDstParams(unsigned int width, unsigned int height, |
|
|
|
|
if (fimcWidth != *cropWidth || fimcHeight != *cropHeight) { |
|
|
|
|
if (forceChange == true) { |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("size is changed from [w = %d, h= %d] to [w = %d, h = %d]", |
|
|
|
|
ALOGD("size is changed from [w = %d, h= %d] to [w = %d, h = %d]", |
|
|
|
|
*cropWidth, *cropHeight, fimcWidth, fimcHeight); |
|
|
|
|
#endif |
|
|
|
|
} else { |
|
|
|
|
LOGE("%s::Invalid destination params", __func__); |
|
|
|
|
ALOGE("%s::Invalid destination params", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1040,32 +1040,32 @@ bool SecFimc::setDstParams(unsigned int width, unsigned int height, |
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (mFlagSetDstParam == true) { |
|
|
|
|
if (fimc_v4l2_clr_buf(mFd, V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_clr_buf_dst() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_clr_buf_dst() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_s_ctrl(mFd, V4L2_ROTATE, mRotVal) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_s_ctrl(V4L2_ROTATE)", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_s_ctrl(V4L2_ROTATE)", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_set_fmt(mFd, V4L2_BUF_TYPE_DST, V4L2_FIELD_ANY, &(params->dst), (unsigned int)mS5pFimc.out_buf.phys_addr) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_set_fmt()[dst] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_set_fmt()[dst] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (fimc_v4l2_req_buf(mFd, mNumOfBuf, V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_req_buf()[dst] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_req_buf()[dst] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < mNumOfBuf; i++) { |
|
|
|
|
if (fimc_v4l2_query_buf(mFd, &(mDstBuffer[i]), |
|
|
|
|
V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST, i, dst_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_query_buf() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_query_buf() failed", __func__); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -1088,7 +1088,7 @@ bool SecFimc::getDstParams(unsigned int *width, unsigned int *height, |
|
|
|
|
|
|
|
|
|
fmt.type = V4L2_BUF_TYPE_DST; |
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FMT(fmt.type : %d) failed", __func__, fmt.type); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FMT(fmt.type : %d) failed", __func__, fmt.type); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
switch (fmt.type) { |
|
|
|
@ -1113,7 +1113,7 @@ bool SecFimc::getDstParams(unsigned int *width, unsigned int *height, |
|
|
|
|
*cropHeight = fmt.fmt.win.w.height; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1122,7 +1122,7 @@ bool SecFimc::getDstParams(unsigned int *width, unsigned int *height, |
|
|
|
|
*colorFormat = fbuf.fmt.pixelformat; |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
LOGE("%s::Invalid buffer type", __func__); |
|
|
|
|
ALOGE("%s::Invalid buffer type", __func__); |
|
|
|
|
return false; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -1131,7 +1131,7 @@ bool SecFimc::getDstParams(unsigned int *width, unsigned int *height, |
|
|
|
|
|
|
|
|
|
crop.type = V4L2_BUF_TYPE_DST; |
|
|
|
|
if (ioctl(mFd, VIDIOC_G_CROP, &crop) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_CROP(crop.type : %d) failed", __func__, crop.type); |
|
|
|
|
ALOGE("%s::VIDIOC_G_CROP(crop.type : %d) failed", __func__, crop.type); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1147,13 +1147,13 @@ bool SecFimc::getDstParams(unsigned int *width, unsigned int *height, |
|
|
|
|
bool SecFimc::setDstAddr(unsigned int physYAddr, unsigned int physCbAddr, unsigned int physCrAddr, int buf_index) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("%s", __func__); |
|
|
|
|
ALOGD("%s", __func__); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
s5p_fimc_params_t *params = &(mS5pFimc.params); |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1176,12 +1176,12 @@ bool SecFimc::setDstAddr(unsigned int physYAddr, unsigned int physCbAddr, unsign |
|
|
|
|
mS5pFimc.use_ext_out_mem = 1; |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_s_ctrl(mFd, V4L2_ROTATE, mRotVal) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_s_ctrl(V4L2_ROTATE)", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_s_ctrl(V4L2_ROTATE)", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_set_fmt(mFd, V4L2_BUF_TYPE_DST, V4L2_FIELD_ANY, &(params->dst), (unsigned int)mS5pFimc.out_buf.phys_addr) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_set_fmt()[dst] failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_set_fmt()[dst] failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -1194,12 +1194,12 @@ bool SecFimc::setRotVal(unsigned int rotVal) |
|
|
|
|
struct v4l2_control vc; |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_s_ctrl(mFd, V4L2_ROTATE, rotVal) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_s_ctrl(V4L2_ROTATE) failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_s_ctrl(V4L2_ROTATE) failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1213,12 +1213,12 @@ bool SecFimc::setGlobalAlpha(bool enable, int alpha) |
|
|
|
|
struct v4l2_format fmt; |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mFlagStreamOn == true) { |
|
|
|
|
LOGE("%s::mFlagStreamOn == true", __func__); |
|
|
|
|
ALOGE("%s::mFlagStreamOn == true", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1228,7 +1228,7 @@ bool SecFimc::setGlobalAlpha(bool enable, int alpha) |
|
|
|
|
memset(&fbuf, 0, sizeof(fbuf)); |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1238,7 +1238,7 @@ bool SecFimc::setGlobalAlpha(bool enable, int alpha) |
|
|
|
|
fbuf.flags &= ~V4L2_FBUF_FLAG_GLOBAL_ALPHA; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_S_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_FBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_S_FBUF failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1247,13 +1247,13 @@ bool SecFimc::setGlobalAlpha(bool enable, int alpha) |
|
|
|
|
fmt.type = V4L2_BUF_TYPE_VIDEO_OVERLAY; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fmt.fmt.win.global_alpha = alpha & 0xFF; |
|
|
|
|
if (ioctl(mFd, VIDIOC_S_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_S_FMT failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1268,12 +1268,12 @@ bool SecFimc::setGlobalAlpha(bool enable, int alpha) |
|
|
|
|
bool SecFimc::setLocalAlpha(bool enable) |
|
|
|
|
{ |
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mFlagStreamOn == true) { |
|
|
|
|
LOGE("%s::mFlagStreamOn == true", __func__); |
|
|
|
|
ALOGE("%s::mFlagStreamOn == true", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1289,12 +1289,12 @@ bool SecFimc::setColorKey(bool enable, int colorKey) |
|
|
|
|
struct v4l2_format fmt; |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mFlagStreamOn == true) { |
|
|
|
|
LOGE("%s::mFlagStreamOn == true", __func__); |
|
|
|
|
ALOGE("%s::mFlagStreamOn == true", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1304,7 +1304,7 @@ bool SecFimc::setColorKey(bool enable, int colorKey) |
|
|
|
|
memset(&fbuf, 0, sizeof(fbuf)); |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FBUF failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1314,7 +1314,7 @@ bool SecFimc::setColorKey(bool enable, int colorKey) |
|
|
|
|
fbuf.flags &= ~V4L2_FBUF_FLAG_CHROMAKEY; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_S_FBUF, &fbuf) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_S_FBUF failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_S_FBUF failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1323,14 +1323,14 @@ bool SecFimc::setColorKey(bool enable, int colorKey) |
|
|
|
|
fmt.type = V4L2_BUF_TYPE_VIDEO_OVERLAY; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_G_FMT, &fmt) < 0) { |
|
|
|
|
LOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_G_FMT failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fmt.fmt.win.chromakey = colorKey & 0xFFFFFF; |
|
|
|
|
|
|
|
|
|
if (ioctl(mFd, VIDIOC_S_FMT, &fmt) < 0) |
|
|
|
|
LOGE("%s::VIDIOC_S_FMT failed", __func__); |
|
|
|
|
ALOGE("%s::VIDIOC_S_FMT failed", __func__); |
|
|
|
|
} |
|
|
|
|
mFlagColorKey = enable; |
|
|
|
|
mColorKey = colorKey; |
|
|
|
@ -1340,21 +1340,21 @@ bool SecFimc::setColorKey(bool enable, int colorKey) |
|
|
|
|
bool SecFimc::draw(int src_index, int dst_index) |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("%s", __func__); |
|
|
|
|
ALOGD("%s", __func__); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (mFlagCreate == false) { |
|
|
|
|
LOGE("%s::Not yet created", __func__); |
|
|
|
|
ALOGE("%s::Not yet created", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mFlagSetSrcParam == false) { |
|
|
|
|
LOGE("%s::mFlagSetSrcParam == false fail", __func__); |
|
|
|
|
ALOGE("%s::mFlagSetSrcParam == false fail", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (mFlagSetDstParam == false) { |
|
|
|
|
LOGE("%s::mFlagSetDstParam == false fail", __func__); |
|
|
|
|
ALOGE("%s::mFlagSetDstParam == false fail", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1368,45 +1368,45 @@ bool SecFimc::draw(int src_index, int dst_index) |
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (mFlagStreamOn == false) { |
|
|
|
|
if (m_streamOn() == false) { |
|
|
|
|
LOGE("%s::m_streamOn failed", __func__); |
|
|
|
|
ALOGE("%s::m_streamOn failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
mFlagStreamOn = true; |
|
|
|
|
} |
|
|
|
|
if (fimc_v4l2_dequeue(mFd, V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST, &dst_index, dst_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_dequeue[dst](mNumOfBuf : %d) failed", __func__, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_dequeue[dst](mNumOfBuf : %d) failed", __func__, mNumOfBuf); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_dequeue(mFd, V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC, &src_index, src_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_dequeue[src](mNumOfBuf : %d) failed", __func__, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_dequeue[src](mNumOfBuf : %d) failed", __func__, mNumOfBuf); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_queue(mFd, &(mSrcBuffer), V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC, src_index, src_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_queue[src](index : %d) (mNumOfBuf : %d) failed", __func__, 0, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_queue[src](index : %d) (mNumOfBuf : %d) failed", __func__, 0, mNumOfBuf); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_queue(mFd, &(mDstBuffer[dst_index]), V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST, dst_index, dst_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_queue[dst](index : %d) (mNumOfBuf : %d) failed", __func__, dst_index, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_queue[dst](index : %d) (mNumOfBuf : %d) failed", __func__, dst_index, mNumOfBuf); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
if (fimc_v4l2_stream_on(mFd, V4L2_BUF_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_stream_on() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_stream_on() failed", __func__); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
flagStreamOn = true; |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_queue(mFd, &(mSrcBuffer), V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC, src_index, src_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_queue(index : %d) (mNumOfBuf : %d) failed", __func__, 0, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_queue(index : %d) (mNumOfBuf : %d) failed", __func__, 0, mNumOfBuf); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_dequeue(mFd, V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC, &src_index, src_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_dequeue (mNumOfBuf : %d) failed", __func__, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_dequeue (mNumOfBuf : %d) failed", __func__, mNumOfBuf); |
|
|
|
|
goto err; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
@ -1415,7 +1415,7 @@ err : |
|
|
|
|
#ifndef BOARD_USE_V4L2 |
|
|
|
|
if (flagStreamOn == true) { |
|
|
|
|
if (fimc_v4l2_stream_off(mFd, V4L2_BUF_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_stream_off() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_stream_off() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -1427,7 +1427,7 @@ err : |
|
|
|
|
bool SecFimc::m_streamOn() |
|
|
|
|
{ |
|
|
|
|
#ifdef DEBUG_LIB_FIMC |
|
|
|
|
LOGD("%s", __func__); |
|
|
|
|
ALOGD("%s", __func__); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
@ -1454,26 +1454,26 @@ bool SecFimc::m_streamOn() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (fimc_v4l2_queue(mFd, &(mSrcBuffer), V4L2_BUF_TYPE_SRC, V4L2_MEMORY_TYPE_SRC, 0, src_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_queue(index : %d) (mSrcBufNum : %d) failed", __func__, 0, 1); |
|
|
|
|
ALOGE("%s::fimc_v4l2_queue(index : %d) (mSrcBufNum : %d) failed", __func__, 0, 1); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < mNumOfBuf; i++) { |
|
|
|
|
if (fimc_v4l2_queue(mFd, &(mDstBuffer[i]), |
|
|
|
|
V4L2_BUF_TYPE_DST, V4L2_MEMORY_TYPE_DST, i, dst_planes) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_queue(index : %d) (mDstBufNum : %d) failed", __func__, i, mNumOfBuf); |
|
|
|
|
ALOGE("%s::fimc_v4l2_queue(index : %d) (mDstBufNum : %d) failed", __func__, i, mNumOfBuf); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
if (fimc_v4l2_stream_on(mFd, V4L2_BUF_TYPE_SRC) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_stream_on() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_stream_on() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef BOARD_USE_V4L2 |
|
|
|
|
if (fimc_v4l2_stream_on(mFd, V4L2_BUF_TYPE_DST) < 0) { |
|
|
|
|
LOGE("%s::fimc_v4l2_stream_on() failed", __func__); |
|
|
|
|
ALOGE("%s::fimc_v4l2_stream_on() failed", __func__); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|