diff options
author | Anton Khirnov <anton@khirnov.net> | 2015-10-11 22:02:26 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2015-10-16 20:00:40 +0200 |
commit | dc923bc23b3efd949d0bf67ff1abdb95059e5843 (patch) | |
tree | 59c1c0149eef364623957408d37addb7b5c1b1a3 /libavcodec/qsv.h | |
parent | 2ec96b6bd5bf7b22978711bcf2cee702bee89c6f (diff) | |
download | ffmpeg-dc923bc23b3efd949d0bf67ff1abdb95059e5843.tar.gz |
qsvenc: add an API for allocating opaque surfaces
Diffstat (limited to 'libavcodec/qsv.h')
-rw-r--r-- | libavcodec/qsv.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/libavcodec/qsv.h b/libavcodec/qsv.h index 922b8582a4..1d1f8b47a7 100644 --- a/libavcodec/qsv.h +++ b/libavcodec/qsv.h @@ -23,6 +23,8 @@ #include <mfx/mfxvideo.h> +#include "libavutil/buffer.h" + /** * This struct is used for communicating QSV parameters between libavcodec and * the caller. It is managed by the caller and must be assigned to @@ -48,6 +50,51 @@ typedef struct AVQSVContext { */ mfxExtBuffer **ext_buffers; int nb_ext_buffers; + + /** + * Encoding only. If this field is set to non-zero by the caller, libavcodec + * will create an mfxExtOpaqueSurfaceAlloc extended buffer and pass it to + * the encoder initialization. This only makes sense if iopattern is also + * set to MFX_IOPATTERN_IN_OPAQUE_MEMORY. + * + * The number of allocated opaque surfaces will be the sum of the number + * required by the encoder and the user-provided value nb_opaque_surfaces. + * The array of the opaque surfaces will be exported to the caller through + * the opaque_surfaces field. + */ + int opaque_alloc; + + /** + * Encoding only, and only if opaque_alloc is set to non-zero. Before + * calling avcodec_open2(), the caller should set this field to the number + * of extra opaque surfaces to allocate beyond what is required by the + * encoder. + * + * On return from avcodec_open2(), this field will be set by libavcodec to + * the total number of allocated opaque surfaces. + */ + int nb_opaque_surfaces; + + /** + * Encoding only, and only if opaque_alloc is set to non-zero. On return + * from avcodec_open2(), this field will be used by libavcodec to export the + * array of the allocated opaque surfaces to the caller, so they can be + * passed to other parts of the pipeline. + * + * The buffer reference exported here is owned and managed by libavcodec, + * the callers should make their own reference with av_buffer_ref() and free + * it with av_buffer_unref() when it is no longer needed. + * + * The buffer data is an nb_opaque_surfaces-sized array of mfxFrameSurface1. + */ + AVBufferRef *opaque_surfaces; + + /** + * Encoding only, and only if opaque_alloc is set to non-zero. On return + * from avcodec_open2(), this field will be set to the surface type used in + * the opaque allocation request. + */ + int opaque_alloc_type; } AVQSVContext; /** |