/*
* 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 */
Messung V0.5 in Prozent C=90 H=92 G=90
¤ Dauer der Verarbeitung: 0.6 Sekunden
¤
*© Formatika GbR, Deutschland