diff options
author | Annamalai Lakshmanan <annamalai.lakshmanan@linaro.org> | 2012-05-14 09:49:12 +0530 |
---|---|---|
committer | Annamalai Lakshmanan <annamalai.lakshmanan@linaro.org> | 2012-05-14 10:08:58 +0530 |
commit | af9326138d5fcab2692c751ad5baac701d552b0f (patch) | |
tree | b53231a14093aa9db7d07a77b68bd63716ca5db7 | |
parent | 2ffb2d8ce6b2f651695fa44e1313746a0568ab79 (diff) | |
download | base-af9326138d5fcab2692c751ad5baac701d552b0f.tar.gz |
origen: Added HDMI support
Added support for HDMI 1080p blitting.
Change-Id: I832831b6840bccdc79faaa167eb0c1681ab2fdb7
Signed-off-by: Annamalai Lakshmanan <annamalai.lakshmanan@linaro.org>
-rw-r--r-- | services/surfaceflinger/Android.mk | 6 | ||||
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 101 |
2 files changed, 105 insertions, 2 deletions
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk index f1cb50e01d5f..621c6af9126f 100644 --- a/services/surfaceflinger/Android.mk +++ b/services/surfaceflinger/Android.mk @@ -37,6 +37,9 @@ endif ifeq ($(BOARD_HAVE_CODEC_SUPPORT),SAMSUNG_CODEC_SUPPORT) LOCAL_CFLAGS += -DSAMSUNG_CODEC_SUPPORT endif +ifeq ($(BOARD_HAVE_HDMI_SUPPORT),SAMSUNG_HDMI_SUPPORT) + LOCAL_CFLAGS += -DSAMSUNG_HDMI_SUPPORT +endif LOCAL_SHARED_LIBRARIES := \ libcutils \ @@ -48,6 +51,9 @@ LOCAL_SHARED_LIBRARIES := \ libui \ libgui +ifeq ($(BOARD_HAVE_HDMI_SUPPORT),SAMSUNG_HDMI_SUPPORT) + LOCAL_SHARED_LIBRARIES += libfimc libhdmi +endif # this is only needed for DDMS debugging LOCAL_SHARED_LIBRARIES += libdvm libandroid_runtime diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 0da75c4cacc6..d0fad417f8d9 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -57,6 +57,11 @@ #include "DisplayHardware/HWComposer.h" #include <private/surfaceflinger/SharedBufferStack.h> +#ifdef SAMSUNG_HDMI_SUPPORT +#include "SecHdmi.h" +// true : HDMI cable is pluged in, false: HDMI cable is plugged out +bool mHdmiCableInserted; +#endif /* ideally AID_GRAPHICS would be in a semi-public header * or there would be a way to map a user/group name to its id @@ -70,6 +75,21 @@ #define DISPLAY_COUNT 1 namespace android { + +#ifdef SAMSUNG_HDMI_SUPPORT +extern "C" { + +extern bool blit2Hdmi(); +extern int SecHdmi_flush(); +extern int SecHdmi_connect(void); +extern int SecHdmi_disconnect(void); +extern int SecHdmi_destroy(void); +extern void SecHdmi(); +extern int SecHdmi_create(void); +extern void setHdmiStatus(uint32_t status); + +} +#endif // --------------------------------------------------------------------------- const String16 sHardwareTest("android.permission.HARDWARE_TEST"); @@ -131,6 +151,12 @@ void SurfaceFlinger::init() SurfaceFlinger::~SurfaceFlinger() { glDeleteTextures(1, &mWormholeTexName); +#ifdef SAMSUNG_HDMI_SUPPORT + if(SecHdmi_destroy() == false) + { + LOGE("%s::mSecHdmi.destroy() fail \n", __func__); + } +#endif } sp<IMemoryHeap> SurfaceFlinger::getCblk() const @@ -295,6 +321,16 @@ status_t SurfaceFlinger::readyToRun() // put the origin in the left-bottom corner glOrthof(0, w, 0, h, 0, 1); // l=0, r=w ; b=0, t=h +#ifdef SAMSUNG_HDMI_SUPPORT + SecHdmi(); + if(SecHdmi_create() == 0) + LOGE("%s::mSecHdmi.create() fail \n", __func__); + else + { + // for it to connect + setHdmiStatus(1); + } +#endif mReadyToRunBarrier.open(); /* @@ -306,7 +342,6 @@ status_t SurfaceFlinger::readyToRun() return NO_ERROR; } - // ---------------------------------------------------------------------------- #if 0 #pragma mark - @@ -398,7 +433,10 @@ status_t SurfaceFlinger::postMessageSync(const sp<MessageBase>& msg, bool SurfaceFlinger::threadLoop() { waitForEvent(); - +#ifdef SAMSUNG_HDMI_SUPPORT + //Check For HDMI Detection + setHdmiStatus(true); +#endif // check for transactions if (UNLIKELY(mConsoleSignals)) { handleConsoleEvents(); @@ -462,6 +500,10 @@ void SurfaceFlinger::postFramebuffer() mLastSwapBufferTime = systemTime() - now; mDebugInSwapBuffers = 0; mSwapRegion.clear(); +#ifdef SAMSUNG_HDMI_SUPPORT + if(mHdmiCableInserted == true) + blit2Hdmi(); +#endif } void SurfaceFlinger::handleConsoleEvents() @@ -1269,7 +1311,62 @@ int SurfaceFlinger::setOrientation(DisplayID dpy, } return orientation; } +#ifdef SAMSUNG_HDMI_SUPPORT +void setHdmiStatus(uint32_t status) +{ + + bool hdmiCableInserted = (bool)status; + + if(mHdmiCableInserted == hdmiCableInserted) + return; + + if(hdmiCableInserted == true) + { + if(SecHdmi_connect() == 0) + { + hdmiCableInserted = false; + } + } + else // if(hdmiCableInserted == false) + { + if(SecHdmi_disconnect() == 0) + { + LOGE("%s::mSecHdmi.disconnect() fail\n", __func__); + } + } + + mHdmiCableInserted = hdmiCableInserted; + + if(mHdmiCableInserted == true) + { + blit2Hdmi(); + } +} +void setHdmiMode(uint32_t mode) +{ +} +void setHdmiResolution(uint32_t resolution) +{ +} +void setHdmiHdcp(uint32_t hdcp_en) +{ +} +bool blit2Hdmi(void) +{ + if(mHdmiCableInserted == false) + { + LOGE("mHdmiCableInserted == false fail"); + return false; + } + if(SecHdmi_flush() == false) + { + LOGE("%s::mSecHdmi.flush() fail\n", __func__); + } + + return true; +} +#endif sp<ISurface> SurfaceFlinger::createSurface( ISurfaceComposerClient::surface_data_t* params, const String8& name, |