tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.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 */