1/* 2// Copyright (c) 2014 Intel Corporation 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15*/ 16#include <HwcTrace.h> 17#include <common/GrallocBufferBase.h> 18#include <DisplayQuery.h> 19 20 21namespace android { 22namespace intel { 23 24GrallocBufferBase::GrallocBufferBase(buffer_handle_t handle) 25 : GraphicBuffer(handle) 26{ 27 ATRACE("handle = %#x", handle); 28 initBuffer(handle); 29} 30 31void GrallocBufferBase::resetBuffer(buffer_handle_t handle) 32{ 33 GraphicBuffer::resetBuffer(handle); 34 initBuffer(handle); 35} 36 37void GrallocBufferBase::initBuffer(buffer_handle_t handle) 38{ 39 // nothing to initialize 40} 41 42void GrallocBufferBase::initStride() 43{ 44 int yStride, uvStride; 45 46 // setup stride 47 switch (mFormat) { 48 case HAL_PIXEL_FORMAT_YV12: 49 case HAL_PIXEL_FORMAT_I420: 50 uint32_t yStride_align; 51 yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(mFormat); 52 if (yStride_align > 0) 53 { 54 yStride = align_to(align_to(mWidth, 32), yStride_align); 55 } 56 else 57 { 58 yStride = align_to(align_to(mWidth, 32), 64); 59 } 60 uvStride = align_to(yStride >> 1, 64); 61 mStride.yuv.yStride = yStride; 62 mStride.yuv.uvStride = uvStride; 63 break; 64 case HAL_PIXEL_FORMAT_NV12: 65 yStride = align_to(align_to(mWidth, 32), 64); 66 uvStride = yStride; 67 mStride.yuv.yStride = yStride; 68 mStride.yuv.uvStride = uvStride; 69 break; 70 case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar: 71 case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled: 72 yStride = align_to(align_to(mWidth, 32), 64); 73 uvStride = yStride; 74 mStride.yuv.yStride = yStride; 75 mStride.yuv.uvStride = uvStride; 76 break; 77 case HAL_PIXEL_FORMAT_YUY2: 78 case HAL_PIXEL_FORMAT_UYVY: 79 yStride = align_to((align_to(mWidth, 32) << 1), 64); 80 uvStride = 0; 81 mStride.yuv.yStride = yStride; 82 mStride.yuv.uvStride = uvStride; 83 break; 84 default: 85 mStride.rgb.stride = align_to(((mBpp >> 3) * align_to(mWidth, 32)), 64); 86 break; 87 } 88} 89 90} 91} 92