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 <HwcTrace.h> 17 #include <common/GrallocBufferBase.h> 18 #include <DisplayQuery.h> 19 20 21 namespace android { 22 namespace intel { 23 24 GrallocBufferBase::GrallocBufferBase(buffer_handle_t handle) 25 : GraphicBuffer(handle) 26 { 27 ATRACE("handle = %#x", handle); 28 initBuffer(handle); 29 } 30 31 void GrallocBufferBase::resetBuffer(buffer_handle_t handle) 32 { 33 GraphicBuffer::resetBuffer(handle); 34 initBuffer(handle); 35 } 36 37 void GrallocBufferBase::initBuffer(buffer_handle_t handle) 38 { 39 // nothing to initialize 40 } 41 42 void 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