summaryrefslogtreecommitdiff
authorJunliang Zhou <junliang.zhou@amlogic.com>2015-06-01 02:44:03 (GMT)
committer junliang.zhou <junliang.zhou@amlogic.com>2015-06-01 02:44:20 (GMT)
commit5c1b3d432baeabc6df04e89cd2554ea30d57441c (patch)
tree03816a26f47eb717562d84ce903383b757f1a457
parent8295c7ee088b2019b272f1846ac5531874ff91da (diff)
downloadscreen_source-5c1b3d432baeabc6df04e89cd2554ea30d57441c.zip
screen_source-5c1b3d432baeabc6df04e89cd2554ea30d57441c.tar.gz
screen_source-5c1b3d432baeabc6df04e89cd2554ea30d57441c.tar.bz2
modify forcompatibility 64bit
Change-Id: I92f39a6d7ef91ff9ad9d8f807c5416c801b6ea2f
Diffstat
-rw-r--r--[-rwxr-xr-x]Android.mk0
-rw-r--r--[-rwxr-xr-x]aml_screen.cpp4
-rw-r--r--[-rwxr-xr-x]v4l2_vdin.cpp69
-rw-r--r--[-rwxr-xr-x]v4l2_vdin.h20
4 files changed, 37 insertions, 56 deletions
diff --git a/Android.mk b/Android.mk
index cd8d533..cd8d533 100755..100644
--- a/Android.mk
+++ b/Android.mk
diff --git a/aml_screen.cpp b/aml_screen.cpp
index 0ed2cec..5baee05 100755..100644
--- a/aml_screen.cpp
+++ b/aml_screen.cpp
@@ -150,14 +150,14 @@ int screen_source_set_crop(struct aml_screen_device* dev, int x, int y, int widt
return android::BAD_VALUE;
}
-int screen_source_aquire_buffer(struct aml_screen_device* dev, int* buff_info)
+int screen_source_aquire_buffer(struct aml_screen_device* dev, aml_screen_buffer_info_t* buff_info)
{
android::vdin_screen_source* source = (android::vdin_screen_source*)dev->priv;
return source->aquire_buffer(buff_info);
}
-int screen_source_release_buffer(struct aml_screen_device* dev, int* ptr)
+int screen_source_release_buffer(struct aml_screen_device* dev, void* ptr)
{
android::vdin_screen_source* source = (android::vdin_screen_source*)dev->priv;
return source->release_buffer(ptr);
diff --git a/v4l2_vdin.cpp b/v4l2_vdin.cpp
index ecb52ed..9e2283f 100755..100644
--- a/v4l2_vdin.cpp
+++ b/v4l2_vdin.cpp
@@ -204,7 +204,7 @@ int vdin_screen_source::start_v4l2_device()
return -1;
}
mVideoInfo->refcount[i] = 0;
- mBufs.add((int)mVideoInfo->mem[i],i);
+ mBufs.add(mVideoInfo->mem[i],i);
}
ALOGV("[%s %d] VIDIOC_QUERYBUF successful", __FUNCTION__, __LINE__);
@@ -457,7 +457,7 @@ int vdin_screen_source::get_source_type()
ALOGV("[%s %d]", __FUNCTION__, __LINE__);
int ret = -1;
int sourceType;
-
+
ret = ioctl(mCameraHandle, VIDIOC_G_INPUT, &sourceType);
if(ret < 0){
ALOGE("Set source type fail: %s. ret:%d", strerror(errno),ret);
@@ -466,13 +466,13 @@ int vdin_screen_source::get_source_type()
return sourceType;
}
-int vdin_screen_source::aquire_buffer(int *buff_info)
-{
+int vdin_screen_source::aquire_buffer(aml_screen_buffer_info_t *buff_info)
+{
ALOGV("%s %d", __FUNCTION__, __LINE__);
- int ret = -1;
+ int ret = -1;
mVideoInfo->buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
mVideoInfo->buf.memory = V4L2_MEMORY_MMAP;
-
+
ret = ioctl(mCameraHandle, VIDIOC_DQBUF, &mVideoInfo->buf);
if (ret < 0) {
if(EAGAIN == errno){
@@ -480,14 +480,14 @@ int vdin_screen_source::aquire_buffer(int *buff_info)
}else{
ALOGE("[%s %d]aquire_buffer %d", __FUNCTION__, __LINE__, ret);
}
- buff_info[0] = 0;
- buff_info[1] = 0;
+ buff_info->buffer_mem = 0;
+ buff_info->buffer_canvas = 0;
return ret;
}
- buff_info[0] = (unsigned)mVideoInfo->mem[mVideoInfo->buf.index];
- buff_info[1] = (unsigned)mVideoInfo->canvas[mVideoInfo->buf.index];
- buff_info[2] = mVideoInfo->buf.timestamp.tv_sec;
- buff_info[3] = mVideoInfo->buf.timestamp.tv_usec;
+ buff_info->buffer_mem = mVideoInfo->mem[mVideoInfo->buf.index];
+ buff_info->buffer_canvas = mVideoInfo->canvas[mVideoInfo->buf.index];
+ buff_info->tv_sec = mVideoInfo->buf.timestamp.tv_sec;
+ buff_info->tv_usec = mVideoInfo->buf.timestamp.tv_usec;
return ret;
}
@@ -500,16 +500,16 @@ int vdin_screen_source::aquire_buffer(int *buff_info)
return true;
} */
-int vdin_screen_source::release_buffer(int* ptr)
+int vdin_screen_source::release_buffer(void* ptr)
{
ALOGV("%s %d", __FUNCTION__, __LINE__);
int ret = -1;
int currentIndex;
- v4l2_buffer hbuf_query;
+ v4l2_buffer hbuf_query;
Mutex::Autolock autoLock(mLock);
- currentIndex = mBufs.valueFor((unsigned int)ptr);
+ currentIndex = mBufs.valueFor(ptr);
if(mVideoInfo->refcount[currentIndex] > 0){
mVideoInfo->refcount[currentIndex] -= 1;
}else{
@@ -589,48 +589,27 @@ int vdin_screen_source::workThread()
{
bool buff_keep = false;
int index;
- int buff_info[4], buff_info_latest[4];
+ aml_screen_buffer_info_t buff_info;
int ret;
- unsigned char *src = NULL;
+ void *src = NULL;
unsigned char *dest = NULL;
uint8_t *handle = NULL;
ANativeWindowBuffer* buf;
if(mState == START){
usleep(5000);
-#if 0
- ret = aquire_buffer(buff_info);
-#else
- while(mState == START){
- ret = aquire_buffer(buff_info);
- if(ret != 0){
- if(true == buff_keep){//use the latest buffer
- memcpy(buff_info, buff_info_latest, 16);
- ret = 0;
- }
- break;
- }else{
- if(true == buff_keep){
- //release
- ALOGD("v4l2 vdin drop frame");
- release_buffer((int *)(buff_info_latest[0]));
- }
- buff_keep = true;
- memcpy(buff_info_latest, buff_info, 16);
- }
- }
-#endif
- if(ret != 0 || (buff_info[0] == 0)){
+ ret = aquire_buffer(&buff_info);
+ if (ret != 0 || (buff_info.buffer_mem == 0)) {
ALOGV("Get V4l2 buffer failed");
return ret;
}
- src = (unsigned char *)buff_info[0];
- index = mBufs.valueFor((unsigned int)src);
+ src = buff_info.buffer_mem;
+ index = mBufs.valueFor(src);
if(mFrameType & NATIVE_WINDOW_DATA){
mVideoInfo->refcount[index] += 1;
if(mANativeWindow.get() == NULL){
ALOGE("Null window");
return BAD_VALUE;
- }
+ }
ret = mANativeWindow->dequeueBuffer_DEPRECATED(mANativeWindow.get(), &buf);
if(ret != 0){
ALOGE("dequeue buffer failed :%s (%d)",strerror(-ret), -ret);
@@ -648,11 +627,11 @@ int vdin_screen_source::workThread()
mANativeWindow->queueBuffer_DEPRECATED(mANativeWindow.get(), buf);
graphicBuffer.clear();
ALOGV("queue one buffer to native window");
- release_buffer((int*)src);
+ release_buffer(src);
}
if(mFrameType & CALL_BACK_DATA && mDataCB != NULL&& mState == START){
mVideoInfo->refcount[index] += 1;
- mDataCB(mUser, buff_info);
+ mDataCB(mUser, &buff_info);
}
}
return NO_ERROR;
diff --git a/v4l2_vdin.h b/v4l2_vdin.h
index 61d9f37..0db756e 100755..100644
--- a/v4l2_vdin.h
+++ b/v4l2_vdin.h
@@ -34,6 +34,8 @@
#include <android/native_window.h>
#include <gralloc_priv.h>
+#include <hardware/aml_screen.h>
+
namespace android {
#define NB_BUFFER 6
@@ -56,7 +58,7 @@ enum State{
START,
PAUSE,
STOPING,
- STOP,
+ STOP,
};
enum FrameType{
@@ -66,18 +68,18 @@ enum FrameType{
typedef void (*olStateCB)(int state);
-typedef void (*app_data_callback)(void *user,int *buffer);
+typedef void (*app_data_callback)(void *user, aml_screen_buffer_info_t *buff_info);
#define SCREENSOURCE_GRALLOC_USAGE GRALLOC_USAGE_HW_TEXTURE | \
- GRALLOC_USAGE_HW_RENDER | \
- GRALLOC_USAGE_SW_READ_RARELY | \
- GRALLOC_USAGE_SW_WRITE_NEVER
+ GRALLOC_USAGE_HW_RENDER | \
+ GRALLOC_USAGE_SW_READ_RARELY | \
+ GRALLOC_USAGE_SW_WRITE_NEVER
class vdin_screen_source {
public:
vdin_screen_source();
~vdin_screen_source();
- int init();
+ int init();
int start();
int stop();
int pause();
@@ -85,9 +87,9 @@ class vdin_screen_source {
int set_format(int width = 640, int height = 480, int color_format = V4L2_PIX_FMT_NV21);
int set_rotation(int degree);
int set_crop(int x, int y, int width, int height);
- int aquire_buffer(int* buff_info);
+ int aquire_buffer(aml_screen_buffer_info_t *buff_info);
// int inc_buffer_refcount(int* ptr);
- int release_buffer(int* ptr);
+ int release_buffer(void* ptr);
int set_state_callback(olStateCB callback);
int set_data_callback(app_data_callback callback, void* user);
int set_preview_window(ANativeWindow* window);
@@ -115,7 +117,7 @@ class vdin_screen_source {
};
private:
int mCurrentIndex;
- KeyedVector<int, int> mBufs;
+ KeyedVector<void *, int> mBufs;
int mBufferCount;
int mFrameWidth;
int mFrameHeight;