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