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