hwcontext_vaapi.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. #ifndef AVUTIL_HWCONTEXT_VAAPI_H
  19. #define AVUTIL_HWCONTEXT_VAAPI_H
  20. #include <va/va.h>
  21. /**
  22. * @file
  23. * API-specific header for AV_HWDEVICE_TYPE_VAAPI.
  24. *
  25. * Dynamic frame pools are supported, but note that any pool used as a render
  26. * target is required to be of fixed size in order to be be usable as an
  27. * argument to vaCreateContext().
  28. *
  29. * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs
  30. * with the data pointer set to a VASurfaceID.
  31. */
  32. enum {
  33. /**
  34. * The quirks field has been set by the user and should not be detected
  35. * automatically by av_hwdevice_ctx_init().
  36. */
  37. AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0),
  38. /**
  39. * The driver does not destroy parameter buffers when they are used by
  40. * vaRenderPicture(). Additional code will be required to destroy them
  41. * separately afterwards.
  42. */
  43. AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1),
  44. /**
  45. * The driver does not support the VASurfaceAttribMemoryType attribute,
  46. * so the surface allocation code will not try to use it.
  47. */
  48. AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2),
  49. /**
  50. * The driver does not support surface attributes at all.
  51. * The surface allocation code will never pass them to surface allocation,
  52. * and the results of the vaQuerySurfaceAttributes() call will be faked.
  53. */
  54. AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3),
  55. };
  56. /**
  57. * VAAPI connection details.
  58. *
  59. * Allocated as AVHWDeviceContext.hwctx
  60. */
  61. typedef struct AVVAAPIDeviceContext {
  62. /**
  63. * The VADisplay handle, to be filled by the user.
  64. */
  65. VADisplay display;
  66. /**
  67. * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(),
  68. * with reference to a table of known drivers, unless the
  69. * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user
  70. * may need to refer to this field when performing any later
  71. * operations using VAAPI with the same VADisplay.
  72. */
  73. unsigned int driver_quirks;
  74. } AVVAAPIDeviceContext;
  75. /**
  76. * VAAPI-specific data associated with a frame pool.
  77. *
  78. * Allocated as AVHWFramesContext.hwctx.
  79. */
  80. typedef struct AVVAAPIFramesContext {
  81. /**
  82. * Set by the user to apply surface attributes to all surfaces in
  83. * the frame pool. If null, default settings are used.
  84. */
  85. VASurfaceAttrib *attributes;
  86. int nb_attributes;
  87. /**
  88. * The surfaces IDs of all surfaces in the pool after creation.
  89. * Only valid if AVHWFramesContext.initial_pool_size was positive.
  90. * These are intended to be used as the render_targets arguments to
  91. * vaCreateContext().
  92. */
  93. VASurfaceID *surface_ids;
  94. int nb_surfaces;
  95. } AVVAAPIFramesContext;
  96. /**
  97. * VAAPI hardware pipeline configuration details.
  98. *
  99. * Allocated with av_hwdevice_hwconfig_alloc().
  100. */
  101. typedef struct AVVAAPIHWConfig {
  102. /**
  103. * ID of a VAAPI pipeline configuration.
  104. */
  105. VAConfigID config_id;
  106. } AVVAAPIHWConfig;
  107. #endif /* AVUTIL_HWCONTEXT_VAAPI_H */