1 /* 2 // Copyright(c)2014 IntelCorporation 3 // 4 // LicensedundertheApacheLicense,Version2.0(the"License"); 5 // youmaynotusethisfileexceptincompliancewiththeLicense. 6 // YoumayobtainacopyoftheLicenseat 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software 11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS, 12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. 13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand 14 // limitationsundertheLicense. 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 22 namespace android { 23 namespace intel { 24 25 GrallocBufferBase::GrallocBufferBase(uint32_t handle) 26 : GraphicBuffer(handle) 27 { 28 ALOGTRACE("handle = %#x", handle); 29 initBuffer(handle); 30 } 31 32 void GrallocBufferBase::resetBuffer(uint32_t handle) 33 { 34 GraphicBuffer::resetBuffer(handle); 35 initBuffer(handle); 36 } 37 38 void GrallocBufferBase::initBuffer(uint32_t /* handle */) 39 { 40 // nothing to initialize 41 } 42 43 void 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