tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

hwcontext_drm.h (4527B)


      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 */