summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--merrifield/common/buffers/BufferManager.cpp10
-rw-r--r--merrifield/include/BufferManager.h8
-rw-r--r--merrifield/include/pvr/hal/hal_public.h18
-rw-r--r--merrifield/ips/tangier/TngDisplayContext.cpp10
-rw-r--r--merrifield/ips/tangier/TngGrallocBufferMapper.cpp24
-rw-r--r--merrifield/ips/tangier/TngGrallocBufferMapper.h4
-rw-r--r--merrifield/platforms/merrifield/PlatfBufferManager.cpp17
-rw-r--r--merrifield/platforms/merrifield/PlatfBufferManager.h5
-rw-r--r--merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp17
-rw-r--r--merrifield/platforms/merrifield_plus/PlatfBufferManager.h5
-rw-r--r--moorefield_hdmi/common/buffers/BufferManager.cpp10
-rwxr-xr-xmoorefield_hdmi/common/planes/DisplayPlane.cpp5
-rwxr-xr-xmoorefield_hdmi/include/BufferManager.h8
-rw-r--r--moorefield_hdmi/include/pvr/hal/hal_public.h19
-rwxr-xr-xmoorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp53
-rwxr-xr-xmoorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp15
-rw-r--r--moorefield_hdmi/ips/common/GrallocBufferBase.cpp1
-rw-r--r--moorefield_hdmi/ips/common/OverlayHardware.h4
-rwxr-xr-xmoorefield_hdmi/ips/common/OverlayPlaneBase.cpp8
-rwxr-xr-xmoorefield_hdmi/ips/tangier/TngDisplayContext.cpp10
-rwxr-xr-xmoorefield_hdmi/ips/tangier/TngDisplayQuery.cpp3
-rw-r--r--moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp7
-rw-r--r--moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp24
-rw-r--r--moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h4
-rwxr-xr-xmoorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp17
-rwxr-xr-xmoorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h5
26 files changed, 156 insertions, 155 deletions
diff --git a/merrifield/common/buffers/BufferManager.cpp b/merrifield/common/buffers/BufferManager.cpp
index fc460b3..6a939ae 100644
--- a/merrifield/common/buffers/BufferManager.cpp
+++ b/merrifield/common/buffers/BufferManager.cpp
@@ -60,7 +60,7 @@ bool BufferManager::initialize()
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)) {
DEINIT_AND_RETURN_FALSE("failed to get gralloc module");
}
- mGrallocModule = (gralloc_module_t*)module;
+ mGrallocModule = (gralloc_module_t const*)module;
gralloc_open(module, &mAllocDev);
if (!mAllocDev) {
@@ -68,7 +68,7 @@ bool BufferManager::initialize()
}
// create a dummy data buffer
- mDataBuffer = createDataBuffer(mGrallocModule, 0);
+ mDataBuffer = createDataBuffer(0);
if (!mDataBuffer) {
DEINIT_AND_RETURN_FALSE("failed to create data buffer");
}
@@ -142,7 +142,7 @@ void BufferManager::unlockDataBuffer(DataBuffer *buffer)
DataBuffer* BufferManager::get(buffer_handle_t handle)
{
- return createDataBuffer(mGrallocModule, handle);
+ return createDataBuffer(handle);
}
void BufferManager::put(DataBuffer *buffer)
@@ -168,7 +168,7 @@ BufferMapper* BufferManager::map(DataBuffer& buffer)
// create a new buffer mapper and add it to pool
do {
VTRACE("new buffer, will add it");
- mapper = createBufferMapper(mGrallocModule, buffer);
+ mapper = createBufferMapper(buffer);
if (!mapper) {
ETRACE("failed to allocate mapper");
break;
@@ -258,7 +258,7 @@ buffer_handle_t BufferManager::allocFrameBuffer(int width, int height, int *stri
break;
}
- mapper = createBufferMapper(mGrallocModule, *buffer);
+ mapper = createBufferMapper(*buffer);
if (!mapper) {
ETRACE("failed to create buffer mapper");
break;
diff --git a/merrifield/include/BufferManager.h b/merrifield/include/BufferManager.h
index ccc8eaa..6bc98bf 100644
--- a/merrifield/include/BufferManager.h
+++ b/merrifield/include/BufferManager.h
@@ -62,12 +62,10 @@ public:
virtual bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
const crop_t& destRect, bool filter, bool async) = 0;
protected:
- virtual DataBuffer* createDataBuffer(gralloc_module_t *module,
- buffer_handle_t handle) = 0;
- virtual BufferMapper* createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer) = 0;
+ virtual DataBuffer* createDataBuffer(buffer_handle_t handle) = 0;
+ virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0;
- gralloc_module_t *mGrallocModule;
+ gralloc_module_t const* mGrallocModule;
private:
enum {
// make the buffer pool large enough
diff --git a/merrifield/include/pvr/hal/hal_public.h b/merrifield/include/pvr/hal/hal_public.h
index 5575719..e1053bd 100644
--- a/merrifield/include/pvr/hal/hal_public.h
+++ b/merrifield/include/pvr/hal/hal_public.h
@@ -30,20 +30,6 @@
#undef HAL_PIXEL_FORMAT_NV12
-typedef struct _IMG_gralloc_module_
-{
- IMG_gralloc_module_public_t base;
- void *(*GetDisplayDevice)(struct _IMG_gralloc_module_ *psGrallocModule);
- int (*GetDisplayStatus)(struct _IMG_gralloc_module_ *psGrallocModule,
- buffer_handle_t handle, uint32_t *pui32Status);
- int (*GetBufferCPUAddresses)(gralloc_module_t const* module,
- buffer_handle_t buffer,
- void **ppvCpuVirtAddr, size_t *puSize);
- int (*PutBufferCPUAddresses)(gralloc_module_t const* module,
- buffer_handle_t buffer);
-}
-IMG_gralloc_module_t;
-
#define HAL_PIXEL_FORMAT_UYVY 0x107
#define HAL_PIXEL_FORMAT_INTEL_ZSL 0x109
#define HAL_PIXEL_FORMAT_NV12 0x3231564E
@@ -53,6 +39,10 @@ IMG_gralloc_module_t;
#define HAL_PIXEL_FORMAT_NV12_VED 0x7FA00E00
#define HAL_PIXEL_FORMAT_NV12_VEDT 0x7FA00F00
+#define GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG 108
+#define GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG 109
+
+#define GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG 1000
#define GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG 1001
#endif /* __HAL_PUBLIC_H */
diff --git a/merrifield/ips/tangier/TngDisplayContext.cpp b/merrifield/ips/tangier/TngDisplayContext.cpp
index fc759dc..f78f20e 100644
--- a/merrifield/ips/tangier/TngDisplayContext.cpp
+++ b/merrifield/ips/tangier/TngDisplayContext.cpp
@@ -43,17 +43,17 @@ bool TngDisplayContext::initialize()
CTRACE();
// open frame buffer device
- hw_module_t const* module;
- int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+ gralloc_module_t const* module;
+ int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
if (err) {
ETRACE("failed to load gralloc module, error = %d", err);
return false;
}
// init IMG display device
- mIMGDisplayDevice = (IMG_display_device_public_t *)(((IMG_gralloc_module_t *)module)->GetDisplayDevice((IMG_gralloc_module_t *)module));
- if (!mIMGDisplayDevice) {
- ETRACE("failed to get display device");
+ err = module->perform(module, GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG, (void **)&mIMGDisplayDevice);
+ if (err) {
+ ETRACE("failed to get display device, error = %d", err);
return false;
}
diff --git a/merrifield/ips/tangier/TngGrallocBufferMapper.cpp b/merrifield/ips/tangier/TngGrallocBufferMapper.cpp
index ed43f25..bee4f5e 100644
--- a/merrifield/ips/tangier/TngGrallocBufferMapper.cpp
+++ b/merrifield/ips/tangier/TngGrallocBufferMapper.cpp
@@ -22,10 +22,10 @@
namespace android {
namespace intel {
-TngGrallocBufferMapper::TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+TngGrallocBufferMapper::TngGrallocBufferMapper(gralloc_module_t const& module,
DataBuffer& buffer)
: GrallocBufferMapperBase(buffer),
- mIMGGrallocModule(reinterpret_cast<IMG_gralloc_module_t&>(module)),
+ mGrallocModule(module),
mBufferObject(0)
{
CTRACE();
@@ -122,8 +122,8 @@ bool TngGrallocBufferMapper::map()
CTRACE();
// get virtual address
- err = mIMGGrallocModule.GetBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle,
vaddr,
size);
@@ -162,8 +162,8 @@ bool TngGrallocBufferMapper::map()
}
}
- err = mIMGGrallocModule.PutBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle);
return false;
}
@@ -184,8 +184,8 @@ bool TngGrallocBufferMapper::unmap()
mSize[i] = 0;
}
- err = mIMGGrallocModule.PutBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle);
if (err) {
ETRACE("failed to unmap. err = %d", err);
@@ -239,8 +239,8 @@ buffer_handle_t TngGrallocBufferMapper::getFbHandle(int subIndex)
}
// get virtual address
- err = mIMGGrallocModule.GetBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle,
vaddr,
size);
@@ -254,8 +254,8 @@ buffer_handle_t TngGrallocBufferMapper::getFbHandle(int subIndex)
void TngGrallocBufferMapper::putFbHandle()
{
- int err = mIMGGrallocModule.PutBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ int err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle);
if (err) {
ETRACE("failed to unmap. err = %d", err);
diff --git a/merrifield/ips/tangier/TngGrallocBufferMapper.h b/merrifield/ips/tangier/TngGrallocBufferMapper.h
index 8360e02..17f34c2 100644
--- a/merrifield/ips/tangier/TngGrallocBufferMapper.h
+++ b/merrifield/ips/tangier/TngGrallocBufferMapper.h
@@ -26,7 +26,7 @@ namespace intel {
class TngGrallocBufferMapper : public GrallocBufferMapperBase {
public:
- TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+ TngGrallocBufferMapper(gralloc_module_t const& module,
DataBuffer& buffer);
virtual ~TngGrallocBufferMapper();
public:
@@ -41,7 +41,7 @@ private:
bool mapKhandle();
private:
- IMG_gralloc_module_t& mIMGGrallocModule;
+ gralloc_module_t const& mGrallocModule;
void* mBufferObject;
native_handle_t* mClonedHandle;
};
diff --git a/merrifield/platforms/merrifield/PlatfBufferManager.cpp b/merrifield/platforms/merrifield/PlatfBufferManager.cpp
index 13df1a5..881f79d 100644
--- a/merrifield/platforms/merrifield/PlatfBufferManager.cpp
+++ b/merrifield/platforms/merrifield/PlatfBufferManager.cpp
@@ -43,30 +43,25 @@ void PlatfBufferManager::deinitialize()
BufferManager::deinitialize();
}
-DataBuffer* PlatfBufferManager::createDataBuffer(gralloc_module_t *module,
- buffer_handle_t handle)
+DataBuffer* PlatfBufferManager::createDataBuffer(buffer_handle_t handle)
{
return new TngGrallocBuffer(handle);
}
-BufferMapper* PlatfBufferManager::createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer)
+BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer)
{
- if (!module)
- return 0;
-
- return new TngGrallocBufferMapper(*(IMG_gralloc_module_public_t*)module,
- buffer);
+ return new TngGrallocBufferMapper(*mGrallocModule, buffer);
}
bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
const crop_t& destRect, bool filter, bool async)
{
- IMG_gralloc_module_public_t *imgGrallocModule = (IMG_gralloc_module_public_t *) mGrallocModule;
int fenceFd;
- if (imgGrallocModule->Blit(imgGrallocModule, srcHandle,
+ if (mGrallocModule->perform(mGrallocModule,
+ GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG,
+ srcHandle,
destHandle,
destRect.w, destRect.h, destRect.x,
destRect.y, 0, -1, &fenceFd)) {
diff --git a/merrifield/platforms/merrifield/PlatfBufferManager.h b/merrifield/platforms/merrifield/PlatfBufferManager.h
index 822f484..b45cef5 100644
--- a/merrifield/platforms/merrifield/PlatfBufferManager.h
+++ b/merrifield/platforms/merrifield/PlatfBufferManager.h
@@ -31,9 +31,8 @@ public:
void deinitialize();
protected:
- DataBuffer* createDataBuffer(gralloc_module_t *module, buffer_handle_t handle);
- BufferMapper* createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer);
+ DataBuffer* createDataBuffer(buffer_handle_t handle);
+ BufferMapper* createBufferMapper(DataBuffer& buffer);
bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
const crop_t& destRect, bool filter, bool async);
};
diff --git a/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp b/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp
index 13df1a5..881f79d 100644
--- a/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp
+++ b/merrifield/platforms/merrifield_plus/PlatfBufferManager.cpp
@@ -43,30 +43,25 @@ void PlatfBufferManager::deinitialize()
BufferManager::deinitialize();
}
-DataBuffer* PlatfBufferManager::createDataBuffer(gralloc_module_t *module,
- buffer_handle_t handle)
+DataBuffer* PlatfBufferManager::createDataBuffer(buffer_handle_t handle)
{
return new TngGrallocBuffer(handle);
}
-BufferMapper* PlatfBufferManager::createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer)
+BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer)
{
- if (!module)
- return 0;
-
- return new TngGrallocBufferMapper(*(IMG_gralloc_module_public_t*)module,
- buffer);
+ return new TngGrallocBufferMapper(*mGrallocModule, buffer);
}
bool PlatfBufferManager::blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
const crop_t& destRect, bool filter, bool async)
{
- IMG_gralloc_module_public_t *imgGrallocModule = (IMG_gralloc_module_public_t *) mGrallocModule;
int fenceFd;
- if (imgGrallocModule->Blit(imgGrallocModule, srcHandle,
+ if (mGrallocModule->perform(mGrallocModule,
+ GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG,
+ srcHandle,
destHandle,
destRect.w, destRect.h, destRect.x,
destRect.y, 0, -1, &fenceFd)) {
diff --git a/merrifield/platforms/merrifield_plus/PlatfBufferManager.h b/merrifield/platforms/merrifield_plus/PlatfBufferManager.h
index 822f484..b45cef5 100644
--- a/merrifield/platforms/merrifield_plus/PlatfBufferManager.h
+++ b/merrifield/platforms/merrifield_plus/PlatfBufferManager.h
@@ -31,9 +31,8 @@ public:
void deinitialize();
protected:
- DataBuffer* createDataBuffer(gralloc_module_t *module, buffer_handle_t handle);
- BufferMapper* createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer);
+ DataBuffer* createDataBuffer(buffer_handle_t handle);
+ BufferMapper* createBufferMapper(DataBuffer& buffer);
bool blit(buffer_handle_t srcHandle, buffer_handle_t destHandle,
const crop_t& destRect, bool filter, bool async);
};
diff --git a/moorefield_hdmi/common/buffers/BufferManager.cpp b/moorefield_hdmi/common/buffers/BufferManager.cpp
index ca0de39..a426c5a 100644
--- a/moorefield_hdmi/common/buffers/BufferManager.cpp
+++ b/moorefield_hdmi/common/buffers/BufferManager.cpp
@@ -60,7 +60,7 @@ bool BufferManager::initialize()
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module)) {
DEINIT_AND_RETURN_FALSE("failed to get gralloc module");
}
- mGrallocModule = (gralloc_module_t*)module;
+ mGrallocModule = (gralloc_module_t const*)module;
gralloc_open(module, &mAllocDev);
if (!mAllocDev) {
@@ -68,7 +68,7 @@ bool BufferManager::initialize()
}
// create a dummy data buffer
- mDataBuffer = createDataBuffer(mGrallocModule, 0);
+ mDataBuffer = createDataBuffer(0);
if (!mDataBuffer) {
DEINIT_AND_RETURN_FALSE("failed to create data buffer");
}
@@ -142,7 +142,7 @@ void BufferManager::unlockDataBuffer(DataBuffer * /* buffer */)
DataBuffer* BufferManager::get(uint32_t handle)
{
- return createDataBuffer(mGrallocModule, handle);
+ return createDataBuffer(handle);
}
void BufferManager::put(DataBuffer *buffer)
@@ -168,7 +168,7 @@ BufferMapper* BufferManager::map(DataBuffer& buffer)
// create a new buffer mapper and add it to pool
do {
VLOGTRACE("new buffer, will add it");
- mapper = createBufferMapper(mGrallocModule, buffer);
+ mapper = createBufferMapper(buffer);
if (!mapper) {
ELOGTRACE("failed to allocate mapper");
break;
@@ -258,7 +258,7 @@ uint32_t BufferManager::allocFrameBuffer(int width, int height, int *stride)
break;
}
- mapper = createBufferMapper(mGrallocModule, *buffer);
+ mapper = createBufferMapper(*buffer);
if (!mapper) {
ELOGTRACE("failed to create buffer mapper");
break;
diff --git a/moorefield_hdmi/common/planes/DisplayPlane.cpp b/moorefield_hdmi/common/planes/DisplayPlane.cpp
index 1251c29..a748b13 100755
--- a/moorefield_hdmi/common/planes/DisplayPlane.cpp
+++ b/moorefield_hdmi/common/planes/DisplayPlane.cpp
@@ -217,7 +217,10 @@ bool DisplayPlane::setDataBuffer(uint32_t handle)
if (index < 0) {
VLOGTRACE("unmapped buffer, mapping...");
mapper = mapBuffer(buffer);
- if (!mapper) {
+ // Skip the unsupported format in case that a new gralloc buffer was
+ // created and added into the mapped list, triggered by SoftwareRender
+ // with color conversion from known formats to YV12.
+ if (!mapper || mapper->getFormat() == HAL_PIXEL_FORMAT_YV12) {
ELOGTRACE("failed to map buffer %#x", handle);
bm->unlockDataBuffer(buffer);
return false;
diff --git a/moorefield_hdmi/include/BufferManager.h b/moorefield_hdmi/include/BufferManager.h
index 20dc634..0897310 100755
--- a/moorefield_hdmi/include/BufferManager.h
+++ b/moorefield_hdmi/include/BufferManager.h
@@ -62,12 +62,10 @@ public:
virtual bool blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle,
crop_t& srcCrop, uint32_t async) = 0;
protected:
- virtual DataBuffer* createDataBuffer(gralloc_module_t *module,
- uint32_t handle) = 0;
- virtual BufferMapper* createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer) = 0;
+ virtual DataBuffer* createDataBuffer(uint32_t handle) = 0;
+ virtual BufferMapper* createBufferMapper(DataBuffer& buffer) = 0;
- gralloc_module_t *mGrallocModule;
+ gralloc_module_t const* mGrallocModule;
private:
enum {
// make the buffer pool large enough
diff --git a/moorefield_hdmi/include/pvr/hal/hal_public.h b/moorefield_hdmi/include/pvr/hal/hal_public.h
index 5575719..04939a0 100644
--- a/moorefield_hdmi/include/pvr/hal/hal_public.h
+++ b/moorefield_hdmi/include/pvr/hal/hal_public.h
@@ -30,21 +30,8 @@
#undef HAL_PIXEL_FORMAT_NV12
-typedef struct _IMG_gralloc_module_
-{
- IMG_gralloc_module_public_t base;
- void *(*GetDisplayDevice)(struct _IMG_gralloc_module_ *psGrallocModule);
- int (*GetDisplayStatus)(struct _IMG_gralloc_module_ *psGrallocModule,
- buffer_handle_t handle, uint32_t *pui32Status);
- int (*GetBufferCPUAddresses)(gralloc_module_t const* module,
- buffer_handle_t buffer,
- void **ppvCpuVirtAddr, size_t *puSize);
- int (*PutBufferCPUAddresses)(gralloc_module_t const* module,
- buffer_handle_t buffer);
-}
-IMG_gralloc_module_t;
-
#define HAL_PIXEL_FORMAT_UYVY 0x107
+#define HAL_PIXEL_FORMAT_INTEL_YV12 0x108
#define HAL_PIXEL_FORMAT_INTEL_ZSL 0x109
#define HAL_PIXEL_FORMAT_NV12 0x3231564E
#define HAL_PIXEL_FORMAT_NV21 0x3132564E
@@ -53,6 +40,10 @@ IMG_gralloc_module_t;
#define HAL_PIXEL_FORMAT_NV12_VED 0x7FA00E00
#define HAL_PIXEL_FORMAT_NV12_VEDT 0x7FA00F00
+#define GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG 108
+#define GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG 109
+
+#define GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG 1000
#define GRALLOC_MODULE_GET_DISPLAY_STATUS_IMG 1001
#endif /* __HAL_PUBLIC_H */
diff --git a/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp b/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp
index eca4d1e..a3e92a7 100755
--- a/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp
+++ b/moorefield_hdmi/ips/anniedale/AnnOverlayPlane.cpp
@@ -175,19 +175,6 @@ bool AnnOverlayPlane::bufferOffsetSetup(BufferMapper& mapper)
uint32_t format = mapper.getFormat();
uint32_t gttOffsetInBytes = (mapper.getGttOffsetInPage(0) << 12);
-
- if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
- format == HAL_PIXEL_FORMAT_BGRA_8888) {
- backBuffer->OCMD = 1 << 10;
- // by pass YUV->RGB conversion, 8-bit output
- backBuffer->OCONFIG |= (0x1 << 4) | (0x1 << 3);
- backBuffer->OSTART_0Y = gttOffsetInBytes;
- backBuffer->OSTART_1Y = gttOffsetInBytes;
- backBuffer->OBUF_0Y = 0;
- backBuffer->OBUF_1Y = 0;
- return true;
- }
-
uint32_t yStride = mapper.getStride().yuv.yStride;
uint32_t uvStride = mapper.getStride().yuv.uvStride;
uint32_t h = mapper.getHeight();
@@ -198,6 +185,18 @@ bool AnnOverlayPlane::bufferOffsetSetup(BufferMapper& mapper)
uint32_t uTileOffsetX, uTileOffsetY;
uint32_t vTileOffsetX, vTileOffsetY;
+ if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
+ format == HAL_PIXEL_FORMAT_BGRA_8888) {
+ // set source format XRGB
+ backBuffer->OCMD = OVERLAY_FORMAT_PLANAR_XRGB;
+ // by pass YUV->RGB conversion, 8-bit output
+ backBuffer->OCONFIG |= OVERLAY_CONFIG_BYPASS_DISABLE;
+ backBuffer->OSTART_0Y = gttOffsetInBytes;
+ backBuffer->OBUF_0Y = srcX * XRGB_BPP + srcY *
+ mapper.getStride().rgb.stride;
+ return true;
+ }
+
// clear original format setting
backBuffer->OCMD &= ~(0xf << 10);
backBuffer->OCMD &= ~OVERLAY_MEMORY_LAYOUT_TILED;
@@ -226,6 +225,18 @@ bool AnnOverlayPlane::bufferOffsetSetup(BufferMapper& mapper)
vTileOffsetY = uTileOffsetY;
backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
break;
+ case HAL_PIXEL_FORMAT_INTEL_YV12: // INTEL_YV12
+ // The height of HAL_PIXEL_FORMAT_INTEL_YV12 gralloc buffer has been aligned with 32 pixels.
+ vSurface = ySurface + yStride * align_to(h, 32);
+ uSurface = vSurface + uvStride * (align_to(h, 32) / 2);
+ yTileOffsetX = srcX;
+ yTileOffsetY = srcY;
+ uTileOffsetX = srcX / 2;
+ uTileOffsetY = srcY / 2;
+ vTileOffsetX = uTileOffsetX;
+ vTileOffsetY = uTileOffsetY;
+ backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
+ break;
case HAL_PIXEL_FORMAT_I420: // I420
uSurface = ySurface + yStride * h;
vSurface = uSurface + uvStride * (h / 2);
@@ -339,8 +350,9 @@ bool AnnOverlayPlane::coordinateSetup(BufferMapper& mapper)
backBuffer->SWIDTH = mapper.getCrop().w;
backBuffer->SHEIGHT = mapper.getCrop().h;
- backBuffer->SWIDTHSW = calculateSWidthSW(0, mapper.getCrop().w) << 2;
- backBuffer->OSTRIDE = mapper.getStride().rgb.stride & (~0x3f);
+ backBuffer->OSTRIDE = mapper.getStride().rgb.stride;
+ backBuffer->SWIDTHSW = calculateSWidthSW(backBuffer->OBUF_0Y,
+ backBuffer->OSTRIDE) << 2;
return true;
};
@@ -404,13 +416,6 @@ bool AnnOverlayPlane::scalingSetup(BufferMapper& mapper)
uint32_t dstHeight = h;
uint32_t format = mapper.getFormat();
- if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
- format == HAL_PIXEL_FORMAT_BGRA_8888) {
- backBuffer->YRGBSCALE = 1 << 15 | 0 << 3 | 0 << 20;
- backBuffer->UVSCALEV = (1 << 16);
- return true;
- }
-
if (mBobDeinterlace && !mTransform)
deinterlace_factor = 2;
@@ -436,6 +441,10 @@ bool AnnOverlayPlane::scalingSetup(BufferMapper& mapper)
srcWidth = tmp;
}
+ if (format == HAL_PIXEL_FORMAT_BGRX_8888 ||
+ format == HAL_PIXEL_FORMAT_BGRA_8888)
+ uvratio = 1;
+
// Y down-scale factor as a multiple of 4096
if (srcWidth == dstWidth && srcHeight == dstHeight) {
xscaleFract = (1 << 12);
diff --git a/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp b/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp
index 98901e7..54b4aee 100755
--- a/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp
+++ b/moorefield_hdmi/ips/anniedale/PlaneCapabilities.cpp
@@ -25,6 +25,9 @@
#define SPRITE_PLANE_MAX_STRIDE_TILED 16384
#define SPRITE_PLANE_MAX_STRIDE_LINEAR 16384
+#define SPRITE_PLANE_MAX_WIDTH 4096
+#define SPRITE_PLANE_MAX_HEIGHT 4096
+
#define OVERLAY_PLANE_MAX_STRIDE_PACKED 4096
#define OVERLAY_PLANE_MAX_STRIDE_LINEAR 8192
@@ -58,7 +61,7 @@ bool PlaneCapabilities::isFormatSupported(int planeType, HwcLayer *hwcLayer)
WLOGTRACE("180 degree rotation is not supported yet");
}
return trans ? false : true;
- case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_INTEL_YV12:
return trans ? false: true;
case HAL_PIXEL_FORMAT_NV12:
case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:
@@ -101,7 +104,7 @@ bool PlaneCapabilities::isSizeSupported(int planeType, HwcLayer *hwcLayer)
}
} else if (planeType == DisplayPlane::PLANE_OVERLAY) {
switch (format) {
- case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_INTEL_YV12:
case HAL_PIXEL_FORMAT_I420:
case HAL_PIXEL_FORMAT_NV12:
case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:
@@ -173,6 +176,14 @@ bool PlaneCapabilities::isScalingSupported(int planeType, HwcLayer *hwcLayer)
dstH = dest.bottom - dest.top;
if (planeType == DisplayPlane::PLANE_SPRITE || planeType == DisplayPlane::PLANE_PRIMARY) {
+ if ((dstW - 1) <= 0 || (dstH - 1) <= 0 ||
+ (dstW - 1) >= SPRITE_PLANE_MAX_WIDTH ||
+ (dstH - 1) >= SPRITE_PLANE_MAX_HEIGHT) {
+ // Should check size in isSizeSupported().
+ DLOGTRACE("invalid destination size: %d x %d, fall back to GLES", dstW, dstH);
+ return false;
+ }
+
// no scaling is supported
return ((srcW == dstW) && (srcH == dstH)) ? true : false;
diff --git a/moorefield_hdmi/ips/common/GrallocBufferBase.cpp b/moorefield_hdmi/ips/common/GrallocBufferBase.cpp
index ed2452a..346d62f 100644
--- a/moorefield_hdmi/ips/common/GrallocBufferBase.cpp
+++ b/moorefield_hdmi/ips/common/GrallocBufferBase.cpp
@@ -47,6 +47,7 @@ void GrallocBufferBase::initStride()
// setup stride
switch (mFormat) {
case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_INTEL_YV12:
case HAL_PIXEL_FORMAT_I420:
uint32_t yStride_align;
yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(mFormat);
diff --git a/moorefield_hdmi/ips/common/OverlayHardware.h b/moorefield_hdmi/ips/common/OverlayHardware.h
index a06f304..df5c946 100644
--- a/moorefield_hdmi/ips/common/OverlayHardware.h
+++ b/moorefield_hdmi/ips/common/OverlayHardware.h
@@ -35,6 +35,7 @@ namespace intel {
#define N_VERT_UV_TAPS 3
#define N_PHASES 17
#define MAX_TAPS 5
+#define XRGB_BPP 4
// Filter cutoff frequency limits.
#define MIN_CUTOFF_FREQ 1.0
@@ -56,6 +57,7 @@ namespace intel {
// overlay register values
#define OVERLAY_FORMAT_MASK (0xf << 10)
+#define OVERLAY_FORMAT_PLANAR_XRGB (0x1 << 10)
#define OVERLAY_FORMAT_PACKED_YUV422 (0x8 << 10)
#define OVERLAY_FORMAT_PLANAR_NV12_1 (0x7 << 10)
#define OVERLAY_FORMAT_PLANAR_NV12_2 (0xb << 10)
@@ -77,6 +79,8 @@ namespace intel {
#define OVERLAY_MIRRORING_VERTIACAL (0x2 << 17)
#define OVERLAY_MIRRORING_BOTH (0x3 << 17)
+#define OVERLAY_CONFIG_BYPASS_DISABLE (0x1 << 4)
+
#define BUF_TYPE (0x1<<5)
#define BUF_TYPE_FRAME (0x0<<5)
#define BUF_TYPE_FIELD (0x1<<5)
diff --git a/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp b/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp
index 5ba55c8..a0dbdba 100755
--- a/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp
+++ b/moorefield_hdmi/ips/common/OverlayPlaneBase.cpp
@@ -378,6 +378,7 @@ BufferMapper* OverlayPlaneBase::getTTMMapper(BufferMapper& grallocMapper, struct
// calculate stride
switch (format) {
case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_INTEL_YV12:
case HAL_PIXEL_FORMAT_I420:
uint32_t yStride_align;
yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(grallocMapper.getFormat());
@@ -696,6 +697,12 @@ bool OverlayPlaneBase::bufferOffsetSetup(BufferMapper& mapper)
backBuffer->OBUF_0U = backBuffer->OBUF_0V + (uvStride * (h / 2));
backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
break;
+ case HAL_PIXEL_FORMAT_INTEL_YV12: // INTEL_YV12
+ backBuffer->OBUF_0Y = 0;
+ backBuffer->OBUF_0V = yStride * align_to(h, 32);
+ backBuffer->OBUF_0U = backBuffer->OBUF_0V + (uvStride * (align_to(h, 32) / 2));
+ backBuffer->OCMD |= OVERLAY_FORMAT_PLANAR_YUV420;
+ break;
case HAL_PIXEL_FORMAT_I420: // I420
backBuffer->OBUF_0Y = 0;
backBuffer->OBUF_0U = yStride * h;
@@ -800,6 +807,7 @@ bool OverlayPlaneBase::coordinateSetup(BufferMapper& mapper)
switch (format) {
case HAL_PIXEL_FORMAT_YV12: // YV12
+ case HAL_PIXEL_FORMAT_INTEL_YV12: // INTEL_YV12
case HAL_PIXEL_FORMAT_I420: // I420
case HAL_PIXEL_FORMAT_NV12: // NV12
case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar: // NV12
diff --git a/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp b/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp
index 285f408..e755988 100755
--- a/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp
+++ b/moorefield_hdmi/ips/tangier/TngDisplayContext.cpp
@@ -42,17 +42,17 @@ bool TngDisplayContext::initialize()
CTRACE();
// open frame buffer device
- hw_module_t const* module;
- int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module);
+ gralloc_module_t const* module;
+ int err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
if (err) {
ELOGTRACE("failed to load gralloc module, error = %d", err);
return false;
}
// init IMG display device
- mIMGDisplayDevice = (IMG_display_device_public_t *)(((IMG_gralloc_module_t *)module)->GetDisplayDevice((IMG_gralloc_module_t *)module));
- if (!mIMGDisplayDevice) {
- ELOGTRACE("failed to get display device");
+ err = module->perform(module, GRALLOC_MODULE_GET_DISPLAY_DEVICE_IMG, (void **)&mIMGDisplayDevice);
+ if (err) {
+ ELOGTRACE("failed to get display device, error = %d", err);
return false;
}
diff --git a/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp b/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp
index 13350aa..1a8adb2 100755
--- a/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp
+++ b/moorefield_hdmi/ips/tangier/TngDisplayQuery.cpp
@@ -32,7 +32,7 @@ bool DisplayQuery::isVideoFormat(uint32_t format)
case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled:
// Expand format to support the case: Software decoder + HW rendering
// Only VP9 use this foramt now
- case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_INTEL_YV12:
return true;
default:
return false;
@@ -44,6 +44,7 @@ int DisplayQuery::getOverlayLumaStrideAlignment(uint32_t format)
// both luma and chroma stride need to be 64-byte aligned for overlay
switch (format) {
case HAL_PIXEL_FORMAT_YV12:
+ case HAL_PIXEL_FORMAT_INTEL_YV12:
case HAL_PIXEL_FORMAT_I420:
// for these two formats, chroma stride is calculated as half of luma stride
// so luma stride needs to be 128-byte aligned.
diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp b/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp
index 47d36d4..5984ea5 100644
--- a/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp
+++ b/moorefield_hdmi/ips/tangier/TngGrallocBuffer.cpp
@@ -15,6 +15,7 @@
*/
#include <common/utils/HwcTrace.h>
#include <ips/tangier/TngGrallocBuffer.h>
+#include <khronos/openmax/OMX_IntelVideoExt.h>
namespace android {
namespace intel {
@@ -47,7 +48,11 @@ void TngGrallocBuffer::initBuffer(uint32_t handle)
}
mFormat = grallocHandle->iFormat;
- mWidth = grallocHandle->iWidth;
+ if (mFormat == OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar ||
+ mFormat == OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled) {
+ mWidth = grallocHandle->aiStride[0];
+ } else
+ mWidth = grallocHandle->iWidth;
mHeight = grallocHandle->iHeight;
mUsage = grallocHandle->usage;
mKey = grallocHandle->ui64Stamp;
diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp
index 1495379..91e6192 100644
--- a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp
+++ b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.cpp
@@ -22,10 +22,10 @@
namespace android {
namespace intel {
-TngGrallocBufferMapper::TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+TngGrallocBufferMapper::TngGrallocBufferMapper(gralloc_module_t const& module,
DataBuffer& buffer)
: GrallocBufferMapperBase(buffer),
- mIMGGrallocModule(reinterpret_cast<IMG_gralloc_module_t&>(module)),
+ mGrallocModule(module),
mBufferObject(0)
{
CTRACE();
@@ -122,8 +122,8 @@ bool TngGrallocBufferMapper::map()
CTRACE();
// get virtual address
- err = mIMGGrallocModule.GetBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle,
vaddr,
size);
@@ -162,8 +162,8 @@ bool TngGrallocBufferMapper::map()
}
}
- err = mIMGGrallocModule.PutBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle);
return false;
}
@@ -184,8 +184,8 @@ bool TngGrallocBufferMapper::unmap()
mSize[i] = 0;
}
- err = mIMGGrallocModule.PutBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle);
if (err) {
ELOGTRACE("failed to unmap. err = %d", err);
@@ -239,8 +239,8 @@ uint32_t TngGrallocBufferMapper::getFbHandle(int subIndex)
}
// get virtual address
- err = mIMGGrallocModule.GetBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_GET_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle,
vaddr,
size);
@@ -254,8 +254,8 @@ uint32_t TngGrallocBufferMapper::getFbHandle(int subIndex)
void TngGrallocBufferMapper::putFbHandle()
{
- int err = mIMGGrallocModule.PutBufferCPUAddresses(
- (gralloc_module_t const*)&mIMGGrallocModule,
+ int err = mGrallocModule.perform(&mGrallocModule,
+ GRALLOC_MODULE_PUT_BUFFER_CPU_ADDRESSES_IMG,
(buffer_handle_t)mClonedHandle);
if (err) {
ELOGTRACE("failed to unmap. err = %d", err);
diff --git a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h
index e3c15a8..aaf6d4a 100644
--- a/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h
+++ b/moorefield_hdmi/ips/tangier/TngGrallocBufferMapper.h
@@ -25,7 +25,7 @@ namespace intel {
class TngGrallocBufferMapper : public GrallocBufferMapperBase {
public:
- TngGrallocBufferMapper(IMG_gralloc_module_public_t& module,
+ TngGrallocBufferMapper(gralloc_module_t const& module,
DataBuffer& buffer);
virtual ~TngGrallocBufferMapper();
public:
@@ -40,7 +40,7 @@ private:
bool mapKhandle();
private:
- IMG_gralloc_module_t& mIMGGrallocModule;
+ gralloc_module_t const& mGrallocModule;
void* mBufferObject;
native_handle_t* mClonedHandle;
};
diff --git a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp
index 69a30db..0a506d0 100755
--- a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp
+++ b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.cpp
@@ -43,30 +43,25 @@ void PlatfBufferManager::deinitialize()
BufferManager::deinitialize();
}
-DataBuffer* PlatfBufferManager::createDataBuffer(gralloc_module_t * /* module */,
- uint32_t handle)
+DataBuffer* PlatfBufferManager::createDataBuffer(uint32_t handle)
{
return new TngGrallocBuffer(handle);
}
-BufferMapper* PlatfBufferManager::createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer)
+BufferMapper* PlatfBufferManager::createBufferMapper(DataBuffer& buffer)
{
- if (!module)
- return 0;
-
- return new TngGrallocBufferMapper(*(IMG_gralloc_module_public_t*)module,
- buffer);
+ return new TngGrallocBufferMapper(*mGrallocModule, buffer);
}
bool PlatfBufferManager::blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle,
crop_t& srcCrop, uint32_t async)
{
- IMG_gralloc_module_public_t *imgGrallocModule = (IMG_gralloc_module_public_t *) mGrallocModule;
int fenceFd;
- if (imgGrallocModule->Blit(imgGrallocModule, (buffer_handle_t)srcHandle,
+ if (mGrallocModule->perform(mGrallocModule,
+ GRALLOC_MODULE_BLIT_HANDLE_TO_HANDLE_IMG,
+ (buffer_handle_t)srcHandle,
(buffer_handle_t)dstHandle,
srcCrop.w, srcCrop.h, srcCrop.x,
srcCrop.y, 0, -1, &fenceFd)) {
diff --git a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h
index 11ff950..d2c21ae 100755
--- a/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h
+++ b/moorefield_hdmi/platforms/merrifield_plus/PlatfBufferManager.h
@@ -31,9 +31,8 @@ public:
void deinitialize();
protected:
- DataBuffer* createDataBuffer(gralloc_module_t *module, uint32_t handle);
- BufferMapper* createBufferMapper(gralloc_module_t *module,
- DataBuffer& buffer);
+ DataBuffer* createDataBuffer(uint32_t handle);
+ BufferMapper* createBufferMapper(DataBuffer& buffer);
bool blitGrallocBuffer(uint32_t srcHandle, uint32_t dstHandle,
crop_t& srcCrop, uint32_t async);
};