18b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol/* 28b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Copyright (c) 2014 Intel Corporation 38b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 48b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Licensed under the Apache License, Version 2.0 (the "License"); 58b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// you may not use this file except in compliance with the License. 68b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// You may obtain a copy of the License at 78b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 88b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// http://www.apache.org/licenses/LICENSE-2.0 98b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Unless required by applicable law or agreed to in writing, software 118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// distributed under the License is distributed on an "AS IS" BASIS, 128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// See the License for the specific language governing permissions and 148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// limitations under the License. 158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol*/ 168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <HwcTrace.h> 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <common/GrallocBufferBase.h> 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <DisplayQuery.h> 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin PujolGrallocBufferBase::GrallocBufferBase(buffer_handle_t handle) 258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol : GraphicBuffer(handle) 268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ATRACE("handle = %#x", handle); 288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol initBuffer(handle); 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid GrallocBufferBase::resetBuffer(buffer_handle_t handle) 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol GraphicBuffer::resetBuffer(handle); 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol initBuffer(handle); 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid GrallocBufferBase::initBuffer(buffer_handle_t handle) 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // nothing to initialize 408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolvoid GrallocBufferBase::initStride() 438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol{ 448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int yStride, uvStride; 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // setup stride 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol switch (mFormat) { 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case HAL_PIXEL_FORMAT_YV12: 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case HAL_PIXEL_FORMAT_I420: 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t yStride_align; 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(mFormat); 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol if (yStride_align > 0) 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol { 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol yStride = align_to(align_to(mWidth, 32), yStride_align); 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol else 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol { 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol yStride = align_to(align_to(mWidth, 32), 64); 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uvStride = align_to(yStride >> 1, 64); 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.yStride = yStride; 628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.uvStride = uvStride; 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol break; 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case HAL_PIXEL_FORMAT_NV12: 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol yStride = align_to(align_to(mWidth, 32), 64); 668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uvStride = yStride; 678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.yStride = yStride; 688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.uvStride = uvStride; 698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol break; 708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar: 718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled: 728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol yStride = align_to(align_to(mWidth, 32), 64); 738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uvStride = yStride; 748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.yStride = yStride; 758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.uvStride = uvStride; 768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol break; 778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case HAL_PIXEL_FORMAT_YUY2: 788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol case HAL_PIXEL_FORMAT_UYVY: 798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol yStride = align_to((align_to(mWidth, 32) << 1), 64); 808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uvStride = 0; 818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.yStride = yStride; 828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.yuv.uvStride = uvStride; 838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol break; 848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol default: 858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol mStride.rgb.stride = align_to(((mBpp >> 3) * align_to(mWidth, 32)), 64); 868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol break; 878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol } 888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 92