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 <common/utils/HwcTrace.h>
17#include <ips/common/GrallocBufferBase.h>
18#include <DisplayQuery.h>
19#include <khronos/openmax/OMX_IntelVideoExt.h>
20#include <hal_public.h>
21
22namespace android {
23namespace intel {
24
25GrallocBufferBase::GrallocBufferBase(uint32_t handle)
26    : GraphicBuffer(handle)
27{
28    ALOGTRACE("handle = %#x", handle);
29    initBuffer(handle);
30}
31
32void GrallocBufferBase::resetBuffer(uint32_t handle)
33{
34    GraphicBuffer::resetBuffer(handle);
35    initBuffer(handle);
36}
37
38void GrallocBufferBase::initBuffer(uint32_t /* handle */)
39{
40    // nothing to initialize
41}
42
43void GrallocBufferBase::initStride()
44{
45    int yStride, uvStride;
46
47    // setup stride
48    switch (mFormat) {
49    case HAL_PIXEL_FORMAT_YV12:
50    case HAL_PIXEL_FORMAT_INTEL_YV12:
51    case HAL_PIXEL_FORMAT_I420:
52        uint32_t yStride_align;
53        yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(mFormat);
54        if (yStride_align > 0)
55        {
56            yStride = align_to(align_to(mWidth, 32), yStride_align);
57        }
58        else
59        {
60            yStride = align_to(align_to(mWidth, 32), 64);
61        }
62        uvStride = align_to(yStride >> 1, 64);
63        mStride.yuv.yStride = yStride;
64        mStride.yuv.uvStride = uvStride;
65        break;
66    case HAL_PIXEL_FORMAT_NV12:
67        yStride = align_to(align_to(mWidth, 32), 64);
68        uvStride = yStride;
69        mStride.yuv.yStride = yStride;
70        mStride.yuv.uvStride = uvStride;
71        break;
72    case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:
73    case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled:
74        yStride = align_to(align_to(mWidth, 32), 64);
75        uvStride = yStride;
76        mStride.yuv.yStride = yStride;
77        mStride.yuv.uvStride = uvStride;
78        break;
79    case HAL_PIXEL_FORMAT_YUY2:
80    case HAL_PIXEL_FORMAT_UYVY:
81        yStride = align_to((align_to(mWidth, 32) << 1), 64);
82        uvStride = 0;
83        mStride.yuv.yStride = yStride;
84        mStride.yuv.uvStride = uvStride;
85        break;
86    default:
87        mStride.rgb.stride = align_to(((mBpp >> 3) * align_to(mWidth, 32)), 64);
88        break;
89    }
90}
91
92}
93}
94