mlt
mlt copied to clipboard
crash and bad frames generated
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.
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.
But you are going to fix it, right? On one day?
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.
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?
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...