Opened 13 years ago
Closed 13 years ago
#2234 closed defect (needs_more_info)
FFMPEG crashes when trying to convert from PIX_FMT_YUV420P for specfic size of images
| Reported by: | Kiran Kumar | Owned by: | |
|---|---|---|---|
| Priority: | important | Component: | avcodec |
| Version: | unspecified | Keywords: | crash |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | yes | |
| Analyzed by developer: | no |
Description
Summary of the bug:
Hi I am trying to convert frames from PIX_FMT_YUYV422 to PIX_FMT_YUV420P, for some resolution it crashes, but works for other resolutions of frame.
We have compiled Windows Version using instruction from http://ffmpeg.zeranoe.com, and are using the latest build.
I managed to debug with windows using MinGW and used GDB, & below isthe stack when it crashes.
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1792.0x14fc]
(gdb) bt
#0 0x6ab246f7 in extract_odd2avg_MMXEXT (count=-44, dst1=0x1c5c502c <Address 0x1c5c502c out of bounds>, dst0=0x1c5af10c "",
{r\201-|_\200_{r,-}_,r~-.rzrƒ-y-,-{-\201-}¬\200«{«,«z«.c{¬,¬"...,
201r{r\200-zr,r\177_\200-~¬,-{_,r{-\201ry-ƒ-y«ƒ¬{¬,¬z¬+¬|¬+¬"...) at libswscale/x86/rgb2rgb_template.c:2348
#1 yuyvtoyuv420_MMXEXT (ydst=<optimized out>,
| |z}|\177|~}x{}|{y{z | {{zy}{y{}{{}\177}~|{\177{z{~}{{zxzz|{yzzy{zy|zxzzyzzy~z | }zz{|}|xx{ywwxzzxxuyyzwxxxwxvyywzyyxwyzyxxzzzzy{y~wwzyx}yxyxzy}vxzwxyy{|wzyxy{{xy{yzz{}{|}xxyxwwy{" |
,
vdst=0x1c5c4f58 ".,+,+++,ƒ,ƒ+.,.ƒ\201\201ƒ\201\200,ƒ,ƒƒƒ,\201\201\201\201,\201ƒ,......+.,.,ƒ,ƒ,\201..++++\210<SSS\210++S<+SS<\210SO\215\210<\210<<<%<<\210%<\210\210\210+S%OS%%\210\
210%O%\210%SZS%SS%<%<<SSSO\215<O%SSSS%<OS\210S%O%S<S%+%%SS\210SOS%S" <Address 0x1c5c5000 out of bounds>, src=<optimized out>, width=424, height=240, lumStride=424, chromStride=212, srcStride=848)
at libswscale/x86/rgb2rgb_template.c:2363
#2 0x6ab1c25a in yuyvToYuv420Wrapper (c=0x9f3a470, src=0x1d99fb60, srcStride=0x1d99fb80, srcSliceY=0, srcSliceH=240, dstParam=0x1d99fb70, dstStride=0x1d99fb90)
at libswscale/swscale_unscaled.c:235
#3 0x6ab192f7 in sws_scale (c=0x9f3a470, srcSlice=0x1d99fbf4, srcStride=0x1d99fbfc, srcSliceY=0, srcSliceH=240, dst=0x1d99fbe8, dstStride=0x1d99fbdc)
at libswscale/swscale.c:928
How to reproduce:
Code to reproduce the issue is :
BOOL ConvertFromYUY2ToI420(BYTE* dataIn, DWORD inWidth, DWORD inHeight, DWORD InLen)
{
struct SwsContext *img_convert_ctx = NULL;
uint8_t *downSample = new BYTE[InLen]; //new BYTE[InLen];
if (!downSample)
{
return FALSE;
}
memset(downSample, 0 , InLen);
int outstride[3];
int instride[2] ;
instride[0] = inWidth *2;
instride[1] = 0;
uint8_t *buf[2];
uint8_t *out[2];
out[0] = (uint8_t *) downSample;
out[1] = (uint8_t *) (downSample + (inWidth * inWidth)/2);
out[2] = (uint8_t *) (out[1] + ((inWidth * inWidth)/2));
//Strides
outstride[0] = inWidth;
outstride[1] = inWidth/2;
//outstride[2] = inWidth/4;
buf[0] = (uint8_t *) dataIn;
if(img_convert_ctx == NULL) {
img_convert_ctx = sws_getContext(inWidth, inHeight,
PIX_FMT_YUYV422,
inWidth,
inHeight,
PIX_FMT_YUV420P,
SWS_BICUBIC,
NULL,
NULL,
NULL);
}
if(img_convert_ctx == NULL) {
return FALSE;
}
sws_scale(img_convert_ctx,
buf,
instride,
0,
inHeight,
out,
outstride);
memset(dataIn, 0, InLen);
CopyMemory(dataIn, out[0], inWidth *inHeight);
CopyMemory((dataIn + (inWidth *inHeight)), out[1], (inWidth *inHeight/4));
CopyMemory( (dataIn + (inWidth *inHeight) + ((inWidth * inHeight)/4) ) , out[2], ((inWidth * inHeight)/4) );
sws_freeContext(img_convert_ctx);
img_convert_ctx = NULL;
if (downSample)
{
delete[] downSample;
downSample = NULL;
}
return TRUE;
}
The above code works for all Width X Height expect when the input resoultion is the fallowing combinaton :
424 x 240
800 x 448
960 x 544
1280 x 720
ffmpeg version : 0.11.0
built on: Windows
Patches should be submitted to the ffmpeg-devel mailing list and not this bug tracker.
Change History (3)
comment:1 by , 13 years ago
comment:2 by , 13 years ago
| Keywords: | Crash PIX_FMT_YUV420P removed |
|---|
Your code does not compile here, please add a c file as attachment, ideally with compilation instructions.
comment:3 by , 13 years ago
| Keywords: | crash added |
|---|---|
| Priority: | normal → important |
| Resolution: | → needs_more_info |
| Status: | new → closed |
Please reopen this ticket if you can add information on how this can be reproduced.



Tried to reproduce the issue using test application libswscale/swscale-test. It was executed as follows in Ubuntu:
make libswscale/swscale-test
./libswscale/swscale-test -src yuyv422 -dst yuv420p
Didnt see any crash for the above mentioned resolutions.
Have you tried verifying the erroneous resolutions using swscale-test test app?