From db040b9e432b3684455f9dd76b3305255fea3db7 Mon Sep 17 00:00:00 2001 From: PaulK Date: Wed, 28 Sep 2011 19:30:25 +0200 Subject: modified: camera (b&w preview and no postview for now), gralloc (enable plain alpha), added: libsamsung-ipc, corrected: debug.sf.hw. Change-Id: Ib97907b6639611b73da38e4c1f1e298cdb1c8d2b --- include/s3cfb.h | 142 +++++++++++++++++++++++++++++++++++++ libcamera/SecCameraHWInterface.cpp | 3 + libgralloc/Android.mk | 3 + libgralloc/framebuffer.cpp | 8 +++ 4 files changed, 156 insertions(+) create mode 100644 include/s3cfb.h diff --git a/include/s3cfb.h b/include/s3cfb.h new file mode 100644 index 0000000..90b49fc --- /dev/null +++ b/include/s3cfb.h @@ -0,0 +1,142 @@ +/* linux/drivers/video/samsung/s3cfb.h + * + * Copyright (c) 2010 Samsung Electronics Co., Ltd. + * http://www.samsung.com/ + * + * Header file for Samsung Display Driver (FIMD) driver + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +#ifndef _S3CFB_H +#define _S3CFB_H + +#ifdef __KERNEL__ +#include +#include +#include +#ifdef CONFIG_HAS_WAKELOCK +#include +#include +#endif +#include +#endif + +/* + * C O M M O N D E F I N I T I O N S + * +*/ +#define S3CFB_NAME "s3cfb" + +#define S3CFB_AVALUE(r, g, b) (((r & 0xf) << 8) | \ + ((g & 0xf) << 4) | \ + ((b & 0xf) << 0)) +#define S3CFB_CHROMA(r, g, b) (((r & 0xff) << 16) | \ + ((g & 0xff) << 8) | \ + ((b & 0xff) << 0)) + +/* + * E N U M E R A T I O N S + * +*/ +enum s3cfb_data_path_t { + DATA_PATH_FIFO = 0, + DATA_PATH_DMA = 1, + DATA_PATH_IPC = 2, +}; + +enum s3cfb_alpha_t { + PLANE_BLENDING, + PIXEL_BLENDING, +}; + +enum s3cfb_chroma_dir_t { + CHROMA_FG, + CHROMA_BG, +}; + +enum s3cfb_output_t { + OUTPUT_RGB, + OUTPUT_ITU, + OUTPUT_I80LDI0, + OUTPUT_I80LDI1, + OUTPUT_WB_RGB, + OUTPUT_WB_I80LDI0, + OUTPUT_WB_I80LDI1, +}; + +enum s3cfb_rgb_mode_t { + MODE_RGB_P = 0, + MODE_BGR_P = 1, + MODE_RGB_S = 2, + MODE_BGR_S = 3, +}; + +enum s3cfb_mem_owner_t { + DMA_MEM_NONE = 0, + DMA_MEM_FIMD = 1, + DMA_MEM_OTHER = 2, +}; + +/* + * S T R U C T U R E S F O R C U S T O M I O C T L S + * +*/ +struct s3cfb_user_window { + int x; + int y; +}; + +struct s3cfb_user_plane_alpha { + int channel; + unsigned char red; + unsigned char green; + unsigned char blue; +}; + +struct s3cfb_user_chroma { + int enabled; + unsigned char red; + unsigned char green; + unsigned char blue; +}; + +struct s3cfb_next_info { + unsigned int phy_start_addr; + unsigned int xres; /* visible resolution*/ + unsigned int yres; + unsigned int xres_virtual; /* virtual resolution*/ + unsigned int yres_virtual; + unsigned int xoffset; /* offset from virtual to visible */ + unsigned int yoffset; /* resolution */ + unsigned int lcd_offset_x; + unsigned int lcd_offset_y; +}; + +/* + * C U S T O M I O C T L S + * +*/ +#define S3CFB_WIN_POSITION _IOW('F', 203, \ + struct s3cfb_user_window) +#define S3CFB_WIN_SET_PLANE_ALPHA _IOW('F', 204, \ + struct s3cfb_user_plane_alpha) +#define S3CFB_WIN_SET_CHROMA _IOW('F', 205, \ + struct s3cfb_user_chroma) +#define S3CFB_SET_VSYNC_INT _IOW('F', 206, u32) +#define S3CFB_GET_VSYNC_INT_STATUS _IOR('F', 207, u32) +#define S3CFB_GET_LCD_WIDTH _IOR('F', 302, int) +#define S3CFB_GET_LCD_HEIGHT _IOR('F', 303, int) +#define S3CFB_SET_WRITEBACK _IOW('F', 304, u32) +#define S3CFB_GET_CURR_FB_INFO _IOR('F', 305, struct s3cfb_next_info) +#define S3CFB_SET_WIN_ON _IOW('F', 306, u32) +#define S3CFB_SET_WIN_OFF _IOW('F', 307, u32) +#define S3CFB_SET_WIN_PATH _IOW('F', 308, \ + enum s3cfb_data_path_t) +#define S3CFB_SET_WIN_ADDR _IOW('F', 309, unsigned long) +#define S3CFB_SET_WIN_MEM _IOW('F', 310, \ + enum s3cfb_mem_owner_t) + +#endif /* _S3CFB_H */ diff --git a/libcamera/SecCameraHWInterface.cpp b/libcamera/SecCameraHWInterface.cpp index 8a1275e..0987859 100644 --- a/libcamera/SecCameraHWInterface.cpp +++ b/libcamera/SecCameraHWInterface.cpp @@ -507,6 +507,9 @@ int CameraHardwareSec::previewThread() // Notify the client of a new frame. if (mMsgEnabled & CAMERA_MSG_PREVIEW_FRAME) { + if (mExitPreviewThread || !mPreviewRunning) + return NO_ERROR; + mDataCb(CAMERA_MSG_PREVIEW_FRAME, buffer, mCallbackCookie); } diff --git a/libgralloc/Android.mk b/libgralloc/Android.mk index 74f3ce5..44c0746 100644 --- a/libgralloc/Android.mk +++ b/libgralloc/Android.mk @@ -22,6 +22,9 @@ LOCAL_PRELINK_MODULE := false LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw LOCAL_SHARED_LIBRARIES := liblog libcutils +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../include + LOCAL_SRC_FILES := \ gralloc.cpp \ framebuffer.cpp \ diff --git a/libgralloc/framebuffer.cpp b/libgralloc/framebuffer.cpp index 6a5497e..f155b54 100644 --- a/libgralloc/framebuffer.cpp +++ b/libgralloc/framebuffer.cpp @@ -35,6 +35,7 @@ #if HAVE_ANDROID_OS #include +#include #endif #include "gralloc_priv.h" @@ -290,6 +291,13 @@ int mapFrameBufferLocked(struct private_module_t* module) } module->framebuffer->base = intptr_t(vaddr); memset(vaddr, 0, fbSize); + + struct s3cfb_user_plane_alpha user_alpha; + + memset(&user_alpha, 0, sizeof(user_alpha)); + if(ioctl(fd, S3CFB_WIN_SET_PLANE_ALPHA, &user_alpha) == -1) + return -errno; + return 0; } -- cgit v1.1