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