diff -Nur xine-lib-1.1.15-old/src/libw32dll/dmo/DMO_VideoDecoder.c xine-lib-1.1.15/src/libw32dll/dmo/DMO_VideoDecoder.c
--- xine-lib-1.1.15-old/src/libw32dll/dmo/DMO_VideoDecoder.c	2008-09-27 20:55:34.000000000 +0300
+++ xine-lib-1.1.15/src/libw32dll/dmo/DMO_VideoDecoder.c	2008-09-27 21:33:01.000000000 +0300
@@ -87,7 +87,7 @@
     {     24, 24, &MEDIASUBTYPE_RGB24, CAP_NONE },
     {     32, 32, &MEDIASUBTYPE_RGB32, CAP_NONE },
 
-    {0},
+    {0,0,NULL,0},
 };
 
 DMO_VideoDecoder * DMO_VideoDecoder_Open(char* dllname, GUID* guid, BITMAPINFOHEADER * format, int flip, int maxauto)
@@ -288,8 +288,8 @@
     props.cBuffers = 1;
     props.cbBuffer = this->m_sDestType.lSampleSize;
 
-    //don't know how to do this correctly
-    props.cbAlign = props.cbPrefix = 0;
+    props.cbAlign = 1;
+    props.cbPrefix = 0;
     this->m_pDMO_Filter->m_pAll->vt->SetProperties(this->m_pDMO_Filter->m_pAll, &props, &props1);
     this->m_pDMO_Filter->m_pAll->vt->Commit(this->m_pDMO_Filter->m_pAll);
 #endif    
@@ -327,7 +327,7 @@
     bufferin = CMediaBufferCreate(size, (void*)src, size, 0);
     result = this->m_pDMO_Filter->m_pMedia->vt->ProcessInput(this->m_pDMO_Filter->m_pMedia, 0,
 						      (IMediaBuffer*)bufferin,
-						      (is_keyframe) ? DMO_INPUT_DATA_BUFFERF_SYNCPOINT : 0,
+						      DMO_INPUT_DATA_BUFFERF_SYNCPOINT,
 						      0, 0);
     ((IMediaBuffer*)bufferin)->vt->Release((IUnknown*)bufferin);
 
@@ -463,8 +463,9 @@
 	  this->iv.m_obh.biSize = sizeof(BITMAPINFOHEADER);
 	  this->iv.m_obh.biCompression=csp;
 	  this->iv.m_obh.biBitCount=bits;
-	  this->iv.m_obh.biSizeImage=labs(this->iv.m_obh.biBitCount*
-             this->iv.m_obh.biWidth*this->iv.m_obh.biHeight)>>3;
+
+	  this->iv.m_obh.biSizeImage = labs(this->iv.m_obh.biWidth * this->iv.m_obh.biHeight)
+                                       * ((this->iv.m_obh.biBitCount + 7) / 8);
         }
     }
     this->m_sDestType.lSampleSize = this->iv.m_obh.biSizeImage;
