1 /* 2 * Direct3D11 HW acceleration 3 * 4 * copyright (c) 2009 Laurent Aimar 5 * copyright (c) 2015 Steve Lhomme 6 * 7 * This file is part of FFmpeg. 8 * 9 * FFmpeg is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public 11 * License as published by the Free Software Foundation; either 12 * version 2.1 of the License, or (at your option) any later version. 13 * 14 * FFmpeg is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with FFmpeg; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 */ 23 24 #ifndef AVCODEC_D3D11VA_H 25 #define AVCODEC_D3D11VA_H 26 27 /** 28 * @file 29 * @ingroup lavc_codec_hwaccel_d3d11va 30 * Public libavcodec D3D11VA header. 31 */ 32 33 #if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0602 34 #undef _WIN32_WINNT 35 #define _WIN32_WINNT 0x0602 36 #endif 37 38 #include <stdint.h> 39 #include <d3d11.h> 40 41 /** 42 * @defgroup lavc_codec_hwaccel_d3d11va Direct3D11 43 * @ingroup lavc_codec_hwaccel 44 * 45 * @{ 46 */ 47 48 #define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for Direct3D11 and old UVD/UVD+ ATI video cards 49 #define FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO 2 ///< Work around for Direct3D11 and old Intel GPUs with ClearVideo interface 50 51 /** 52 * This structure is used to provides the necessary configurations and data 53 * to the Direct3D11 FFmpeg HWAccel implementation. 54 * 55 * The application must make it available as AVCodecContext.hwaccel_context. 56 * 57 * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. 58 */ 59 typedef struct AVD3D11VAContext { 60 /** 61 * D3D11 decoder object 62 */ 63 ID3D11VideoDecoder *decoder; 64 65 /** 66 * D3D11 VideoContext 67 */ 68 ID3D11VideoContext *video_context; 69 70 /** 71 * D3D11 configuration used to create the decoder 72 */ 73 D3D11_VIDEO_DECODER_CONFIG *cfg; 74 75 /** 76 * The number of surface in the surface array 77 */ 78 unsigned surface_count; 79 80 /** 81 * The array of Direct3D surfaces used to create the decoder 82 */ 83 ID3D11VideoDecoderOutputView **surface; 84 85 /** 86 * A bit field configuring the workarounds needed for using the decoder 87 */ 88 uint64_t workaround; 89 90 /** 91 * Private to the FFmpeg AVHWAccel implementation 92 */ 93 unsigned report_id; 94 95 /** 96 * Mutex to access video_context 97 */ 98 HANDLE context_mutex; 99 } AVD3D11VAContext; 100 101 /** 102 * Allocate an AVD3D11VAContext. 103 * 104 * @return Newly-allocated AVD3D11VAContext or NULL on failure. 105 */ 106 AVD3D11VAContext *av_d3d11va_alloc_context(void); 107 108 /** 109 * @} 110 */ 111 112 #endif /* AVCODEC_D3D11VA_H */ 113