[vlc-commits] commit: Allocated mod16 D3D surfaces. (Laurent Aimar )
git at videolan.org
git at videolan.org
Sun Jun 27 19:04:44 CEST 2010
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sat Jun 26 21:55:20 2010 +0200| [d5a5026d7f4567d12481099e80b15061dacc9b96] | committer: Laurent Aimar
Allocated mod16 D3D surfaces.
It seems necessary for ATI(?) dxva2 support.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d5a5026d7f4567d12481099e80b15061dacc9b96
---
modules/codec/avcodec/dxva2.c | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c
index 50c1bd5..dc8a2ae 100644
--- a/modules/codec/avcodec/dxva2.c
+++ b/modules/codec/avcodec/dxva2.c
@@ -227,6 +227,8 @@ typedef struct
/* */
vlc_object_t *log;
int codec_id;
+ int width;
+ int height;
/* DLL */
HINSTANCE hd3d9_dll;
@@ -303,8 +305,7 @@ static int Setup(vlc_va_t *external, void **hw, vlc_fourcc_t *chroma,
{
vlc_va_dxva2_t *va = vlc_va_dxva2_Get(external);
- if (va->surface_width == width &&
- va->surface_height == height)
+ if (va->width == width && va->height == height && va->decoder)
goto ok;
/* */
@@ -375,7 +376,7 @@ static int Extract(vlc_va_t *external, picture_t *picture, AVFrame *ff)
lock.Pitch / 2,
};
CopyFromYv12(picture, plane, pitch,
- va->surface_width, va->surface_height,
+ va->width, va->height,
&va->surface_cache);
} else {
assert(va->render == MAKEFOURCC('N','V','1','2'));
@@ -388,7 +389,7 @@ static int Extract(vlc_va_t *external, picture_t *picture, AVFrame *ff)
lock.Pitch,
};
CopyFromNv12(picture, plane, pitch,
- va->surface_width, va->surface_height,
+ va->width, va->height,
&va->surface_cache);
}
@@ -826,7 +827,12 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va,
msg_Dbg(va->log, "DxCreateVideoDecoder id %d %dx%d",
codec_id, fmt->i_width, fmt->i_height);
+ va->width = fmt->i_width;
+ va->height = fmt->i_height;
+
/* Allocates all surfaces needed for the decoder */
+ va->surface_width = (fmt->i_width + 15) & ~15;
+ va->surface_height = (fmt->i_height + 15) & ~15;
switch (codec_id) {
case CODEC_ID_H264:
va->surface_count = 16 + 1;
@@ -837,8 +843,8 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va,
}
LPDIRECT3DSURFACE9 surface_list[VA_DXVA2_MAX_SURFACE_COUNT];
if (FAILED(IDirectXVideoDecoderService_CreateSurface(va->vs,
- fmt->i_width,
- fmt->i_height,
+ va->surface_width,
+ va->surface_height,
va->surface_count - 1,
va->render,
D3DPOOL_DEFAULT,
@@ -856,8 +862,6 @@ static int DxCreateVideoDecoder(vlc_va_dxva2_t *va,
surface->refcount = 0;
surface->order = 0;
}
- va->surface_width = fmt->i_width;
- va->surface_height = fmt->i_height;
msg_Dbg(va->log, "IDirectXVideoAccelerationService_CreateSurface succeed with %d surfaces (%dx%d)",
va->surface_count, fmt->i_width, fmt->i_height);
More information about the vlc-commits
mailing list