Home | History | Annotate | Download | only in common
      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_I420:
     51         uint32_t yStride_align;
     52         yStride_align = DisplayQuery::getOverlayLumaStrideAlignment(mFormat);
     53         if (yStride_align > 0)
     54         {
     55             yStride = align_to(align_to(mWidth, 32), yStride_align);
     56         }
     57         else
     58         {
     59             yStride = align_to(align_to(mWidth, 32), 64);
     60         }
     61         uvStride = align_to(yStride >> 1, 64);
     62         mStride.yuv.yStride = yStride;
     63         mStride.yuv.uvStride = uvStride;
     64         break;
     65     case HAL_PIXEL_FORMAT_NV12:
     66         yStride = align_to(align_to(mWidth, 32), 64);
     67         uvStride = yStride;
     68         mStride.yuv.yStride = yStride;
     69         mStride.yuv.uvStride = uvStride;
     70         break;
     71     case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar:
     72     case OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled:
     73         yStride = align_to(align_to(mWidth, 32), 64);
     74         uvStride = yStride;
     75         mStride.yuv.yStride = yStride;
     76         mStride.yuv.uvStride = uvStride;
     77         break;
     78     case HAL_PIXEL_FORMAT_YUY2:
     79     case HAL_PIXEL_FORMAT_UYVY:
     80         yStride = align_to((align_to(mWidth, 32) << 1), 64);
     81         uvStride = 0;
     82         mStride.yuv.yStride = yStride;
     83         mStride.yuv.uvStride = uvStride;
     84         break;
     85     default:
     86         mStride.rgb.stride = align_to(((mBpp >> 3) * align_to(mWidth, 32)), 64);
     87         break;
     88     }
     89 }
     90 
     91 }
     92 }
     93