diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c index 2fd3561c88..19fcf37a84 100644 --- a/libavutil/hwcontext_d3d11va.c +++ b/libavutil/hwcontext_d3d11va.c @@ -72,6 +72,11 @@ static av_cold void load_functions(void) } typedef struct D3D11VAFramesContext { + /** + * The public AVD3D11VAFramesContext. See hwcontext_d3d11va.h for it. + */ + AVD3D11VAFramesContext p; + int nb_surfaces; int nb_surfaces_used; @@ -113,8 +118,8 @@ static void d3d11va_default_unlock(void *ctx) static void d3d11va_frames_uninit(AVHWFramesContext *ctx) { - AVD3D11VAFramesContext *frames_hwctx = ctx->hwctx; - D3D11VAFramesContext *s = ctx->internal->priv; + D3D11VAFramesContext *s = ctx->hwctx; + AVD3D11VAFramesContext *frames_hwctx = &s->p; if (frames_hwctx->texture) ID3D11Texture2D_Release(frames_hwctx->texture); @@ -169,8 +174,8 @@ static AVBufferRef *wrap_texture_buf(AVHWFramesContext *ctx, ID3D11Texture2D *te { AVBufferRef *buf; AVD3D11FrameDescriptor *desc = av_mallocz(sizeof(*desc)); - D3D11VAFramesContext *s = ctx->internal->priv; - AVD3D11VAFramesContext *frames_hwctx = ctx->hwctx; + D3D11VAFramesContext *s = ctx->hwctx; + AVD3D11VAFramesContext *frames_hwctx = &s->p; if (!desc) { ID3D11Texture2D_Release(tex); return NULL; @@ -206,8 +211,8 @@ static AVBufferRef *wrap_texture_buf(AVHWFramesContext *ctx, ID3D11Texture2D *te static AVBufferRef *d3d11va_alloc_single(AVHWFramesContext *ctx) { - D3D11VAFramesContext *s = ctx->internal->priv; - AVD3D11VAFramesContext *hwctx = ctx->hwctx; + D3D11VAFramesContext *s = ctx->hwctx; + AVD3D11VAFramesContext *hwctx = &s->p; AVD3D11VADeviceContext *device_hwctx = ctx->device_ctx->hwctx; HRESULT hr; ID3D11Texture2D *tex; @@ -235,8 +240,8 @@ static AVBufferRef *d3d11va_alloc_single(AVHWFramesContext *ctx) static AVBufferRef *d3d11va_pool_alloc(void *opaque, size_t size) { AVHWFramesContext *ctx = (AVHWFramesContext*)opaque; - D3D11VAFramesContext *s = ctx->internal->priv; - AVD3D11VAFramesContext *hwctx = ctx->hwctx; + D3D11VAFramesContext *s = ctx->hwctx; + AVD3D11VAFramesContext *hwctx = &s->p; D3D11_TEXTURE2D_DESC texDesc; if (!hwctx->texture) @@ -255,9 +260,9 @@ static AVBufferRef *d3d11va_pool_alloc(void *opaque, size_t size) static int d3d11va_frames_init(AVHWFramesContext *ctx) { - AVD3D11VAFramesContext *hwctx = ctx->hwctx; AVD3D11VADeviceContext *device_hwctx = ctx->device_ctx->hwctx; - D3D11VAFramesContext *s = ctx->internal->priv; + D3D11VAFramesContext *s = ctx->hwctx; + AVD3D11VAFramesContext *hwctx = &s->p; int i; HRESULT hr; @@ -345,7 +350,7 @@ static int d3d11va_transfer_get_formats(AVHWFramesContext *ctx, enum AVHWFrameTransferDirection dir, enum AVPixelFormat **formats) { - D3D11VAFramesContext *s = ctx->internal->priv; + D3D11VAFramesContext *s = ctx->hwctx; enum AVPixelFormat *fmts; fmts = av_malloc_array(2, sizeof(*fmts)); @@ -367,7 +372,7 @@ static int d3d11va_transfer_get_formats(AVHWFramesContext *ctx, static int d3d11va_create_staging_texture(AVHWFramesContext *ctx, DXGI_FORMAT format) { AVD3D11VADeviceContext *device_hwctx = ctx->device_ctx->hwctx; - D3D11VAFramesContext *s = ctx->internal->priv; + D3D11VAFramesContext *s = ctx->hwctx; HRESULT hr; D3D11_TEXTURE2D_DESC texDesc = { .Width = ctx->width, @@ -407,7 +412,7 @@ static int d3d11va_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, const AVFrame *src) { AVD3D11VADeviceContext *device_hwctx = ctx->device_ctx->hwctx; - D3D11VAFramesContext *s = ctx->internal->priv; + D3D11VAFramesContext *s = ctx->hwctx; int download = src->format == AV_PIX_FMT_D3D11; const AVFrame *frame = download ? src : dst; const AVFrame *other = download ? dst : src; @@ -696,8 +701,7 @@ const HWContextType ff_hwcontext_type_d3d11va = { .name = "D3D11VA", .device_hwctx_size = sizeof(AVD3D11VADeviceContext), - .frames_hwctx_size = sizeof(AVD3D11VAFramesContext), - .frames_priv_size = sizeof(D3D11VAFramesContext), + .frames_hwctx_size = sizeof(D3D11VAFramesContext), .device_create = d3d11va_device_create, .device_init = d3d11va_device_init,