summaryrefslogtreecommitdiffstats
path: root/video/d3d11va.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/d3d11va.c')
-rw-r--r--video/d3d11va.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/video/d3d11va.c b/video/d3d11va.c
index e27d7952cd..e64c26191c 100644
--- a/video/d3d11va.c
+++ b/video/d3d11va.c
@@ -21,6 +21,7 @@
struct d3d11va_surface {
HMODULE d3d11_dll;
ID3D11Texture2D *texture;
+ int subindex;
ID3D11VideoDecoderOutputView *surface;
};
@@ -38,6 +39,14 @@ ID3D11Texture2D *d3d11_texture_in_mp_image(struct mp_image *mpi)
return surface->texture;
}
+int d3d11_subindex_in_mp_image(struct mp_image *mpi)
+{
+ if (!mpi || mpi->imgfmt != IMGFMT_D3D11VA)
+ return -1;
+ struct d3d11va_surface *surface = (void *)mpi->planes[0];
+ return surface->subindex;
+}
+
static void d3d11va_release_img(void *arg)
{
struct d3d11va_surface *surface = arg;
@@ -69,6 +78,10 @@ struct mp_image *d3d11va_new_ref(ID3D11VideoDecoderOutputView *view,
ID3D11VideoDecoderOutputView_GetResource(
surface->surface, (ID3D11Resource **)&surface->texture);
+ D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC surface_desc;
+ ID3D11VideoDecoderOutputView_GetDesc(surface->surface, &surface_desc);
+ surface->subindex = surface_desc.Texture2D.ArraySlice;
+
struct mp_image *mpi =
mp_image_new_custom_ref(NULL, surface, d3d11va_release_img);
if (!mpi)