d3d11va.h (2610B)
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 /** 49 * This structure is used to provides the necessary configurations and data 50 * to the Direct3D11 FFmpeg HWAccel implementation. 51 * 52 * The application must make it available as AVCodecContext.hwaccel_context. 53 * 54 * Use av_d3d11va_alloc_context() exclusively to allocate an AVD3D11VAContext. 55 */ 56 typedef struct AVD3D11VAContext { 57 /** 58 * D3D11 decoder object 59 */ 60 ID3D11VideoDecoder *decoder; 61 62 /** 63 * D3D11 VideoContext 64 */ 65 ID3D11VideoContext *video_context; 66 67 /** 68 * D3D11 configuration used to create the decoder 69 */ 70 D3D11_VIDEO_DECODER_CONFIG *cfg; 71 72 /** 73 * The number of surface in the surface array 74 */ 75 unsigned surface_count; 76 77 /** 78 * The array of Direct3D surfaces used to create the decoder 79 */ 80 ID3D11VideoDecoderOutputView **surface; 81 82 /** 83 * A bit field configuring the workarounds needed for using the decoder 84 */ 85 uint64_t workaround; 86 87 /** 88 * Private to the FFmpeg AVHWAccel implementation 89 */ 90 unsigned report_id; 91 92 /** 93 * Mutex to access video_context 94 */ 95 HANDLE context_mutex; 96 } AVD3D11VAContext; 97 98 /** 99 * Allocate an AVD3D11VAContext. 100 * 101 * @return Newly-allocated AVD3D11VAContext or NULL on failure. 102 */ 103 AVD3D11VAContext *av_d3d11va_alloc_context(void); 104 105 /** 106 * @} 107 */ 108 109 #endif /* AVCODEC_D3D11VA_H */