mlt icon indicating copy to clipboard operation
mlt copied to clipboard

crash and bad frames generated

Open jaffa4 opened this issue 8 years ago • 5 comments

Hi,

If you run segfault.sh, you will see a crash in customer because the resolution of the image is not what is expect, an image with a bad resolution is copied.

It also causes bad frames in video, broken frames, noisy pictures.. Try artifacts.sh

My debugging showed me what for first frame , the producer returns bad resolution, not for the rest.

artifacts.zip

jaffa4 avatar Mar 03 '16 13:03 jaffa4

I only took a quick look into this, and I am not very motivated at the moment to dig into it deeper. Most people that want to use composite as a filter use the watermark filter, and filter_transition is actually seldom used. However, I see you are also doing geometry animation, and composite/watermark really sucks for that because it does not support sub-pixel interpolation, and it operates in YUV 4:2:2, which means it only has 2 pixel precision - not even 1! Therefore, I recommend using the affine transition/filter, which does interpolation.

ddennedy avatar Mar 03 '16 17:03 ddennedy

But you are going to fix it, right? On one day?

jaffa4 avatar Mar 05 '16 08:03 jaffa4

Someone will probably look at it some day. It is difficult to determine the priority because we don't know anything about your project or how many people it affects.

bmatherly avatar Mar 05 '16 12:03 bmatherly

Problem reproduced by segfault.sh in at:

(gdb) bt
#0  0x0000003253339add in __memcpy_ssse3 () from /lib64/libc.so.6
#1  0x00007fffef71befd in consumer_thread (arg=0x619610) at consumer_avformat.c:1789
#2  0x0000003253607d90 in start_thread () from /lib64/libpthread.so.0
#3  0x00000032532f119d in clone () from /lib64/libc.so.6

it happens because of size of image returned from:

1773: mlt_frame_get_image( frame, &image, &img_fmt, &img_width, &img_height, 0 );

differ:

consumer_thread:1772 img_width=1280, img_height=720, width=1280, height=720
consumer_thread:1775 img_width=514, img_height=105, width=1280, height=720

then image allocated at video_avframe

as result it cause memcpy to access memory outside of received image.

May be scaler not inserted?

max-verem avatar Oct 04 '16 13:10 max-verem

Problem reproduced by artifacts.sh has similar nature.

Frame 0 (broken/corrupted)

consumer_thread:1772 img_width=1280, img_height=720, width=1280, height=720
consumer_thread:1775 img_width=1216, img_height=760, width=1280, height=720

Frame 1 (broken/corrupted)

consumer_thread:1772 img_width=1216, img_height=760, width=1280, height=720
consumer_thread:1775 img_width=1280, img_height=720, width=1280, height=720

Frame 2 (normal)

consumer_thread:1772 img_width=1280, img_height=720, width=1280, height=720
consumer_thread:1775 img_width=1280, img_height=720, width=1280, height=720

It seems no normalizing filters attached/executed. as result avformat consumer receives frames that is not in profile sizes...

max-verem avatar Oct 05 '16 08:10 max-verem