Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  gralloc_priv.h

  Sprache: C
 

/*
 * Copyright (C) 2010 ARM Limited. All rights reserved.
 *
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


#ifndef GRALLOC_PRIV_H_
#define GRALLOC_PRIV_H_

#include <stdint.h>
#include <pthread.h>
#include <errno.h>
#include <linux/fb.h>
#include <sys/types.h>
#include <unistd.h>

#include <hardware/gralloc.h>
#include <cutils/native_handle.h>
#include "alloc_device.h"
#include <utils/Log.h>

#ifdef MALI_600
#define GRALLOC_ARM_UMP_MODULE 0
#define GRALLOC_ARM_DMA_BUF_MODULE 1
#else

/* NOTE:
 * If your framebuffer device driver is integrated with UMP, you will have to
 * change this IOCTL definition to reflect your integration with the framebuffer
 * device.
 * Expected return value is a UMP secure id backing your framebuffer device memory.
 */


/*#define IOCTL_GET_FB_UMP_SECURE_ID    _IOR('F', 311, unsigned int)*/
#define GRALLOC_ARM_UMP_MODULE 0
#define GRALLOC_ARM_DMA_BUF_MODULE 1

/* NOTE:
 * If your framebuffer device driver is integrated with dma_buf, you will have to
 * change this IOCTL definition to reflect your integration with the framebuffer
 * device.
 * Expected return value is a structure filled with a file descriptor
 * backing your framebuffer device memory.
 */

#if GRALLOC_ARM_DMA_BUF_MODULE
struct fb_dmabuf_export
{
 __u32 fd;
 __u32 flags;
};

/* Un-comment this line to use dma_buf framebuffer */
/*#define FBIOGET_DMABUF    _IOR('F', 0x21, struct fb_dmabuf_export)*/

#if PLATFORM_SDK_VERSION >= 21
typedef int ion_user_handle_t;
#define ION_INVALID_HANDLE 0
#else

typedef struct ion_handle *ion_user_handle_t;

#define ION_INVALID_HANDLE NULL
#endif /* new libion */

#endif /* GRALLOC_ARM_DMA_BUF_MODULE */


#endif

/* the max string size of GRALLOC_HARDWARE_GPU0 & GRALLOC_HARDWARE_FB0
 * 8 is big enough for "gpu0" & "fb0" currently
 */

#define MALI_GRALLOC_HARDWARE_MAX_STR_LEN 8
#define NUM_FB_BUFFERS 2

#if GRALLOC_ARM_UMP_MODULE
#include <ump/ump.h>
#endif

#define MALI_IGNORE(x) (void)x
typedef enum
{
 MALI_YUV_NO_INFO,
 MALI_YUV_BT601_NARROW,
 MALI_YUV_BT601_WIDE,
 MALI_YUV_BT709_NARROW,
 MALI_YUV_BT709_WIDE,
} mali_gralloc_yuv_info;

struct private_handle_t;

struct private_module_t
{
 gralloc_module_t base;

 private_handle_t *framebuffer;
 uint32_t flags;
 uint32_t numBuffers;
 uint32_t bufferMask;
 pthread_mutex_t lock;
 buffer_handle_t currentBuffer;
 int ion_client;
 int system_heap_id;
 int cma_heap_id;
 bool gralloc_legacy_ion;

 struct fb_var_screeninfo info;
 struct fb_fix_screeninfo finfo;
 float xdpi;
 float ydpi;
 float fps;

 enum
 {
  // flag to indicate we'll post this buffer
  PRIV_USAGE_LOCKED_FOR_POST = 0x80000000
 };

 /* default constructor */
 private_module_t();
};

#ifdef __cplusplus
struct private_handle_t : public native_handle
{
#else
struct private_handle_t
{
 struct native_handle nativeHandle;
#endif

 enum
 {
  PRIV_FLAGS_FRAMEBUFFER = 0x00000001,
  PRIV_FLAGS_USES_UMP    = 0x00000002,
  PRIV_FLAGS_USES_ION    = 0x00000004,
 };

 enum
 {
  LOCK_STATE_WRITE     =   1 << 31,
  LOCK_STATE_MAPPED    =   1 << 30,
  LOCK_STATE_UNREGISTERED  =   1 << 29,
  LOCK_STATE_READ_MASK =   0x3FFFFFFF
 };

 // ints
#if GRALLOC_ARM_DMA_BUF_MODULE
 /*shared file descriptor for dma_buf sharing*/
 int     share_fd;
#endif
 int     magic;
 int     flags;
 int     usage;
 int     size;
 int     width;
 int     height;
 union {
  int     format;
  int req_format; /* same name as gralloc960 */
  /*unused but referenced in drm_hwc */
  int internal_format;
 };
 int     stride;
 union
 {
  void   *base;
  uint64_t padding;
 };
 int     lockState;
 int     writeOwner;
 int     pid;

 mali_gralloc_yuv_info yuv_info;

 // Following members are for UMP memory only
#if GRALLOC_ARM_UMP_MODULE
 int     ump_id;
 int     ump_mem_handle;
#endif

 // Following members is for framebuffer only
 int     fd; //Shallow copy, DO NOT duplicate
 int     offset;
 union
 {
  void *fb_paddr;
  uint64_t fb_paddr_padding;
 };
 int byte_stride;
#if GRALLOC_ARM_DMA_BUF_MODULE
 ion_user_handle_t ion_hnd;
#endif
#if GRALLOC_ARM_DMA_BUF_MODULE
#define GRALLOC_ARM_NUM_FDS 1
#else
#define GRALLOC_ARM_NUM_FDS 0
#endif

#ifdef __cplusplus
 static const int sNumFds = GRALLOC_ARM_NUM_FDS;
 static const int sMagic = 0x3141592;

#if GRALLOC_ARM_UMP_MODULE
 private_handle_t(int flags, int usage, int size, void *base, int lock_state, ump_secure_id secure_id, ump_handle handle):
#if GRALLOC_ARM_DMA_BUF_MODULE
  share_fd(-1),
#endif
  magic(sMagic),
  flags(flags),
  usage(usage),
  size(size),
  width(0),
  height(0),
  format(0),
  stride(0),
  base(base),
  lockState(lock_state),
  writeOwner(0),
  pid(getpid()),
  yuv_info(MALI_YUV_NO_INFO),
  ump_id((int)secure_id),
  ump_mem_handle((int)handle),
  fd(0),
  offset(0),
  fb_paddr(NULL)
#if GRALLOC_ARM_DMA_BUF_MODULE
  ,
  ion_hnd(ION_INVALID_HANDLE)
#endif

 {
  version = sizeof(native_handle);
  numFds = sNumFds;
  numInts = (sizeof(private_handle_t) - sizeof(native_handle)) / sizeof(int) - sNumFds;
 }
#endif

#if GRALLOC_ARM_DMA_BUF_MODULE
 private_handle_t(int flags, int usage, int size, void *base, int lock_state):
  share_fd(-1),
  magic(sMagic),
  flags(flags),
  usage(usage),
  size(size),
  width(0),
  height(0),
  format(0),
  stride(0),
  base(base),
  lockState(lock_state),
  writeOwner(0),
  pid(getpid()),
  yuv_info(MALI_YUV_NO_INFO),
#if GRALLOC_ARM_UMP_MODULE
  ump_id((int)UMP_INVALID_SECURE_ID),
  ump_mem_handle((int)UMP_INVALID_MEMORY_HANDLE),
#endif
  fd(0),
  offset(0),
  fb_paddr(NULL),
  ion_hnd(ION_INVALID_HANDLE)

 {
  version = sizeof(native_handle);
  numFds = sNumFds;
  numInts = (sizeof(private_handle_t) - sizeof(native_handle)) / sizeof(int) - sNumFds;
 }

#endif

 private_handle_t(int flags, int usage, int size, void *base, int lock_state, int fb_file, int fb_offset, void *fb_paddr):
#if GRALLOC_ARM_DMA_BUF_MODULE
  share_fd(-1),
#endif
  magic(sMagic),
  flags(flags),
  usage(usage),
  size(size),
  width(0),
  height(0),
  format(0),
  stride(0),
  base(base),
  lockState(lock_state),
  writeOwner(0),
  pid(getpid()),
  yuv_info(MALI_YUV_NO_INFO),
#if GRALLOC_ARM_UMP_MODULE
  ump_id((int)UMP_INVALID_SECURE_ID),
  ump_mem_handle((int)UMP_INVALID_MEMORY_HANDLE),
#endif
  fd(fb_file),
  offset(fb_offset),
  fb_paddr(fb_paddr)
#if GRALLOC_ARM_DMA_BUF_MODULE
  ,
  ion_hnd(ION_INVALID_HANDLE)
#endif

 {
  version = sizeof(native_handle);
  numFds = sNumFds;
  numInts = (sizeof(private_handle_t) - sizeof(native_handle)) / sizeof(int) - sNumFds;
 }

 ~private_handle_t()
 {
  magic = 0;
 }

 bool usesPhysicallyContiguousMemory()
 {
  return (flags & PRIV_FLAGS_FRAMEBUFFER) ? true : false;
 }

 static int validate(const native_handle *h)
 {
  const private_handle_t *hnd = (const private_handle_t *)h;

  if (!hnd || hnd->version != sizeof(native_handle) || hnd->magic != sMagic)
  {
   return -EINVAL;
  }

  int numFds = sNumFds;
  int numInts = (sizeof(private_handle_t) - sizeof(native_handle)) / sizeof(int) - sNumFds;

#if GRALLOC_ARM_DMA_BUF_MODULE
  if (hnd->share_fd < 0)
  {
   numFds--;
   numInts++;
  }
#endif

  if (hnd->numFds != numFds || hnd->numInts != numInts)
  {
   return -EINVAL;
  }

  return 0;
 }

 static private_handle_t *dynamicCast(const native_handle *in)
 {
  if (validate(in) == 0)
  {
   return (private_handle_t *) in;
  }

  return NULL;
 }
#endif
};

#endif /* GRALLOC_PRIV_H_ */

Messung V0.5 in Prozent
C=87 H=91 G=88

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-06-27) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik