[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