Some time ago the softdevice plugin started crashing when playing video streams containing errors, both while live viewing and watching recordings. Today I found a transponder where it reliably occurred within seconds and decided to investigate. The picture buffers used for video were 8-byte aligned, which happened to work for "normal" mpeg decoding, but wasn't enough. ffmpeg was executing SSE instructions when doing error concealment and those were segfaulting. Fix below. artur diff -uwp softdevice.noalign/PicBuffer.c softdevice/PicBuffer.c --- softdevice.noalign/PicBuffer.c 2007-03-13 02:57:19.000000000 +0100 +++ softdevice/PicBuffer.c 2007-07-10 15:25:38.000000000 +0200 @@ -316,9 +316,8 @@ bool AllocatePicBuffer(sPicBuffer *buf,P if ( !isPlanar(pix_fmt) ) { buf->stride[0]=ALIGN(pixel_size*w,16); - buf->pixel[0]=(uint8_t*)malloc((buf->stride[0]*h)+16); - if (buf->pixel[0]==NULL) { + if (posix_memalign(&buf->pixel[0], 16, buf->stride[0]*h+16)) { printf("could not allocate memory for picture buffer!\n") ; exit(-1); return false; @@ -337,9 +336,7 @@ bool AllocatePicBuffer(sPicBuffer *buf,P buf->stride[i]= ALIGN(pixel_size*w>>h_shift, STRIDE_ALIGN<<(h_chroma_shift-h_shift)); - buf->pixel[i]= (uint8_t*)malloc((buf->stride[i]*h>>v_shift)+16); //FIXME 16 - - if(buf->pixel[i]==NULL) { + if(posix_memalign(&buf->pixel[i], 16, (buf->stride[i]*h>>v_shift)+16)) { //FIXME 16 printf("could not allocate memory for picture buffer!\n") ; exit(-1); return false; _______________________________________________ vdr mailing list vdr@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr