duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

hwcontext_drm.h (4673B)


      1 /*
      2  * This file is part of FFmpeg.
      3  *
      4  * FFmpeg is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU Lesser General Public
      6  * License as published by the Free Software Foundation; either
      7  * version 2.1 of the License, or (at your option) any later version.
      8  *
      9  * FFmpeg is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  * Lesser General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU Lesser General Public
     15  * License along with FFmpeg; if not, write to the Free Software
     16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     17  */
     18 
     19 #ifndef AVUTIL_HWCONTEXT_DRM_H
     20 #define AVUTIL_HWCONTEXT_DRM_H
     21 
     22 #include <stddef.h>
     23 #include <stdint.h>
     24 
     25 /**
     26  * @file
     27  * API-specific header for AV_HWDEVICE_TYPE_DRM.
     28  *
     29  * Internal frame allocation is not currently supported - all frames
     30  * must be allocated by the user.  Thus AVHWFramesContext is always
     31  * NULL, though this may change if support for frame allocation is
     32  * added in future.
     33  */
     34 
     35 enum {
     36     /**
     37      * The maximum number of layers/planes in a DRM frame.
     38      */
     39     AV_DRM_MAX_PLANES = 4
     40 };
     41 
     42 /**
     43  * DRM object descriptor.
     44  *
     45  * Describes a single DRM object, addressing it as a PRIME file
     46  * descriptor.
     47  */
     48 typedef struct AVDRMObjectDescriptor {
     49     /**
     50      * DRM PRIME fd for the object.
     51      */
     52     int fd;
     53     /**
     54      * Total size of the object.
     55      *
     56      * (This includes any parts not which do not contain image data.)
     57      */
     58     size_t size;
     59     /**
     60      * Format modifier applied to the object (DRM_FORMAT_MOD_*).
     61      *
     62      * If the format modifier is unknown then this should be set to
     63      * DRM_FORMAT_MOD_INVALID.
     64      */
     65     uint64_t format_modifier;
     66 } AVDRMObjectDescriptor;
     67 
     68 /**
     69  * DRM plane descriptor.
     70  *
     71  * Describes a single plane of a layer, which is contained within
     72  * a single object.
     73  */
     74 typedef struct AVDRMPlaneDescriptor {
     75     /**
     76      * Index of the object containing this plane in the objects
     77      * array of the enclosing frame descriptor.
     78      */
     79     int object_index;
     80     /**
     81      * Offset within that object of this plane.
     82      */
     83     ptrdiff_t offset;
     84     /**
     85      * Pitch (linesize) of this plane.
     86      */
     87     ptrdiff_t pitch;
     88 } AVDRMPlaneDescriptor;
     89 
     90 /**
     91  * DRM layer descriptor.
     92  *
     93  * Describes a single layer within a frame.  This has the structure
     94  * defined by its format, and will contain one or more planes.
     95  */
     96 typedef struct AVDRMLayerDescriptor {
     97     /**
     98      * Format of the layer (DRM_FORMAT_*).
     99      */
    100     uint32_t format;
    101     /**
    102      * Number of planes in the layer.
    103      *
    104      * This must match the number of planes required by format.
    105      */
    106     int nb_planes;
    107     /**
    108      * Array of planes in this layer.
    109      */
    110     AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES];
    111 } AVDRMLayerDescriptor;
    112 
    113 /**
    114  * DRM frame descriptor.
    115  *
    116  * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames.
    117  * It is also used by user-allocated frame pools - allocating in
    118  * AVHWFramesContext.pool must return AVBufferRefs which contain
    119  * an object of this type.
    120  *
    121  * The fields of this structure should be set such it can be
    122  * imported directly by EGL using the EGL_EXT_image_dma_buf_import
    123  * and EGL_EXT_image_dma_buf_import_modifiers extensions.
    124  * (Note that the exact layout of a particular format may vary between
    125  * platforms - we only specify that the same platform should be able
    126  * to import it.)
    127  *
    128  * The total number of planes must not exceed AV_DRM_MAX_PLANES, and
    129  * the order of the planes by increasing layer index followed by
    130  * increasing plane index must be the same as the order which would
    131  * be used for the data pointers in the equivalent software format.
    132  */
    133 typedef struct AVDRMFrameDescriptor {
    134     /**
    135      * Number of DRM objects making up this frame.
    136      */
    137     int nb_objects;
    138     /**
    139      * Array of objects making up the frame.
    140      */
    141     AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES];
    142     /**
    143      * Number of layers in the frame.
    144      */
    145     int nb_layers;
    146     /**
    147      * Array of layers in the frame.
    148      */
    149     AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES];
    150 } AVDRMFrameDescriptor;
    151 
    152 /**
    153  * DRM device.
    154  *
    155  * Allocated as AVHWDeviceContext.hwctx.
    156  */
    157 typedef struct AVDRMDeviceContext {
    158     /**
    159      * File descriptor of DRM device.
    160      *
    161      * This is used as the device to create frames on, and may also be
    162      * used in some derivation and mapping operations.
    163      *
    164      * If no device is required, set to -1.
    165      */
    166     int fd;
    167 } AVDRMDeviceContext;
    168 
    169 #endif /* AVUTIL_HWCONTEXT_DRM_H */