[MPlayer-cvslog] CVS: main/libmpcodecs vd_libmpeg2.c,1.37,1.38

Jindrich Makovicka makovick at kmlinux.fjfi.cvut.cz
Mon Nov 22 18:01:38 CET 2004


Ivan Kalvachev wrote:
> On Mon, 22 Nov 2004 16:32:10 +0100 (CET)
> syncmail at mplayerhq.hu (Jindrich Makovicka CVS) wrote:
> 
> 
>>CVS change done by Jindrich Makovicka CVS
>>
>>Update of /cvsroot/mplayer/main/libmpcodecs
>>In directory mail:/var2/tmp/cvs-serv20667
>>
>>Modified Files:
>>	vd_libmpeg2.c 
>>Log Message:
>>fix segfault with (height|width)%6!=0
>>
>>Index: vd_libmpeg2.c
>>===================================================================
>>RCS file: /cvsroot/mplayer/main/libmpcodecs/vd_libmpeg2.c,v
>>retrieving revision 1.37
>>retrieving revision 1.38
>>diff -u -r1.37 -r1.38
>>--- vd_libmpeg2.c	22 Nov 2004 10:20:47 -0000	1.37
>>+++ vd_libmpeg2.c	22 Nov 2004 15:32:08 -0000	1.38
>>@@ -157,13 +157,13 @@
>> 	    if (info->sequence->width >> 1 == info->sequence->chroma_width &&
>> 		info->sequence->height >> 1 == info->sequence->chroma_height) {
>> 		if(!mpcodecs_config_vo(sh,
>>-				       info->sequence->width,
>>-				       info->sequence->height, IMGFMT_YV12)) return 0;
>>+				       info->sequence->picture_width,
>>+				       info->sequence->picture_height, IMGFMT_YV12)) return 0;
>> 	    } else if (info->sequence->width >> 1 == info->sequence->chroma_width &&
>> 		info->sequence->height == info->sequence->chroma_height) {
>> 		if(!mpcodecs_config_vo(sh,
>>-				       info->sequence->width,
>>-				       info->sequence->height, IMGFMT_422P)) return 0;
>>+				       info->sequence->picture_width,
>>+				       info->sequence->picture_height, IMGFMT_422P)) return 0;
>> 	    } else return 0;
>> 	    break;
>> 	case STATE_PICTURE:
>>@@ -186,8 +186,8 @@
>> 	    mpi_new=mpcodecs_get_image(sh,MP_IMGTYPE_IPB,
>> 				       (type==PIC_FLAG_CODING_TYPE_B) ?
>> 					use_callback : (MP_IMGFLAG_PRESERVE|MP_IMGFLAG_READABLE),
>>-				       (info->sequence->picture_width+15)&(~15),
>>-				       (info->sequence->picture_height+15)&(~15) );
>>+				       info->sequence->picture_width,
>>+				       info->sequence->picture_height );
> 
> 
> The above change does not make sense for me. Are you aware that the video system may actually
> return buffer that is not aligned to 16? This will segfault, as mpeg always write full macro blocks.
> I see that you are aware that sequence->height is already aligned to 16. While picture_height is
> raw mpeg stream value (visible dimension)

I must admit I am confused here, because the original with aligned 
dimensions crashes exactly in the case when the dimensions are not 
multiples of 16. For example the following 1920x1080 video playes using 
-vo x11 crashes (xv doesn't work for me due to the video size).

http://mplayerhq.hu/~diego/libmpeg2bug.ts

The crash occurs at the end of playback, byt valgrind reports write 
access error the YUV->RGB conversion right after line 1080. This occurs 
with the original code with dims aligned to 16. The current code works 
flawlessly.

> BTW something I forgot to mention in my previous mail. libmpeg2 already takes care of chroma_height,
> why are you messing with it?

This is the 422 vs 420 detection taken from original mpeg2dec code.

Regards,

-- 
Jindrich Makovicka




More information about the MPlayer-cvslog mailing list