| 
							- /*
 -  * This file is part of FFmpeg.
 -  *
 -  * FFmpeg is free software; you can redistribute it and/or
 -  * modify it under the terms of the GNU Lesser General Public
 -  * License as published by the Free Software Foundation; either
 -  * version 2.1 of the License, or (at your option) any later version.
 -  *
 -  * FFmpeg is distributed in the hope that it will be useful,
 -  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 -  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 -  * Lesser General Public License for more details.
 -  *
 -  * You should have received a copy of the GNU Lesser General Public
 -  * License along with FFmpeg; if not, write to the Free Software
 -  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 -  */
 - 
 - #ifndef AVUTIL_HWCONTEXT_DRM_H
 - #define AVUTIL_HWCONTEXT_DRM_H
 - 
 - #include <stddef.h>
 - #include <stdint.h>
 - 
 - /**
 -  * @file
 -  * API-specific header for AV_HWDEVICE_TYPE_DRM.
 -  *
 -  * Internal frame allocation is not currently supported - all frames
 -  * must be allocated by the user.  Thus AVHWFramesContext is always
 -  * NULL, though this may change if support for frame allocation is
 -  * added in future.
 -  */
 - 
 - enum {
 -     /**
 -      * The maximum number of layers/planes in a DRM frame.
 -      */
 -     AV_DRM_MAX_PLANES = 4
 - };
 - 
 - /**
 -  * DRM object descriptor.
 -  *
 -  * Describes a single DRM object, addressing it as a PRIME file
 -  * descriptor.
 -  */
 - typedef struct AVDRMObjectDescriptor {
 -     /**
 -      * DRM PRIME fd for the object.
 -      */
 -     int fd;
 -     /**
 -      * Total size of the object.
 -      *
 -      * (This includes any parts not which do not contain image data.)
 -      */
 -     size_t size;
 -     /**
 -      * Format modifier applied to the object (DRM_FORMAT_MOD_*).
 -      *
 -      * If the format modifier is unknown then this should be set to
 -      * DRM_FORMAT_MOD_INVALID.
 -      */
 -     uint64_t format_modifier;
 - } AVDRMObjectDescriptor;
 - 
 - /**
 -  * DRM plane descriptor.
 -  *
 -  * Describes a single plane of a layer, which is contained within
 -  * a single object.
 -  */
 - typedef struct AVDRMPlaneDescriptor {
 -     /**
 -      * Index of the object containing this plane in the objects
 -      * array of the enclosing frame descriptor.
 -      */
 -     int object_index;
 -     /**
 -      * Offset within that object of this plane.
 -      */
 -     ptrdiff_t offset;
 -     /**
 -      * Pitch (linesize) of this plane.
 -      */
 -     ptrdiff_t pitch;
 - } AVDRMPlaneDescriptor;
 - 
 - /**
 -  * DRM layer descriptor.
 -  *
 -  * Describes a single layer within a frame.  This has the structure
 -  * defined by its format, and will contain one or more planes.
 -  */
 - typedef struct AVDRMLayerDescriptor {
 -     /**
 -      * Format of the layer (DRM_FORMAT_*).
 -      */
 -     uint32_t format;
 -     /**
 -      * Number of planes in the layer.
 -      *
 -      * This must match the number of planes required by format.
 -      */
 -     int nb_planes;
 -     /**
 -      * Array of planes in this layer.
 -      */
 -     AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES];
 - } AVDRMLayerDescriptor;
 - 
 - /**
 -  * DRM frame descriptor.
 -  *
 -  * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames.
 -  * It is also used by user-allocated frame pools - allocating in
 -  * AVHWFramesContext.pool must return AVBufferRefs which contain
 -  * an object of this type.
 -  *
 -  * The fields of this structure should be set such it can be
 -  * imported directly by EGL using the EGL_EXT_image_dma_buf_import
 -  * and EGL_EXT_image_dma_buf_import_modifiers extensions.
 -  * (Note that the exact layout of a particular format may vary between
 -  * platforms - we only specify that the same platform should be able
 -  * to import it.)
 -  *
 -  * The total number of planes must not exceed AV_DRM_MAX_PLANES, and
 -  * the order of the planes by increasing layer index followed by
 -  * increasing plane index must be the same as the order which would
 -  * be used for the data pointers in the equivalent software format.
 -  */
 - typedef struct AVDRMFrameDescriptor {
 -     /**
 -      * Number of DRM objects making up this frame.
 -      */
 -     int nb_objects;
 -     /**
 -      * Array of objects making up the frame.
 -      */
 -     AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES];
 -     /**
 -      * Number of layers in the frame.
 -      */
 -     int nb_layers;
 -     /**
 -      * Array of layers in the frame.
 -      */
 -     AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES];
 - } AVDRMFrameDescriptor;
 - 
 - /**
 -  * DRM device.
 -  *
 -  * Allocated as AVHWDeviceContext.hwctx.
 -  */
 - typedef struct AVDRMDeviceContext {
 -     /**
 -      * File descriptor of DRM device.
 -      *
 -      * This is used as the device to create frames on, and may also be
 -      * used in some derivation and mapping operations.
 -      *
 -      * If no device is required, set to -1.
 -      */
 -     int fd;
 - } AVDRMDeviceContext;
 - 
 - #endif /* AVUTIL_HWCONTEXT_DRM_H */
 
 
  |