[FFmpeg-trac] #6884(avfilter:reopened): Crash if libvmaf model file has DOS line endings or can't be found
FFmpeg
trac at avcodec.org
Thu Nov 30 15:27:47 EET 2017
#6884: Crash if libvmaf model file has DOS line endings or can't be found
------------------------------------+------------------------------------
Reporter: Gyan | Owner:
Type: defect | Status: reopened
Priority: important | Component: avfilter
Version: git-master | Resolution:
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 1
Analyzed by developer: 1 |
------------------------------------+------------------------------------
Changes (by rbultje):
* analyzed: 0 => 1
* resolution: needs_more_info =>
* status: closed => reopened
* component: undetermined => avfilter
* reproduced: 0 => 1
Comment:
{{{
$ lldb ./ffmpeg_g
(lldb) target create "./ffmpeg_g"
r Current executable set to './ffmpeg_g' (x86_64).
(lldb) r -i ~/Movies/nflx360p/res/box.1k.ivf -i
~/Movies/nflx360p/BoxingPractice.ffv1.mkv -lavfi
libvmaf=/Users/ronaldbultje/Projects/vmaf/model/nflxall_vmafv3.pkl2 -f
null -
Process 52892 launched: './ffmpeg_g' (x86_64)
ffmpeg version N-88433-gfa21ab3 Copyright (c) 2000-2017 the FFmpeg
developers
built with Apple LLVM version 9.0.0 (clang-900.0.38)
configuration: --enable-gpl --samples=/Users/ronaldbultje/Movies/fate-
suite-ff --enable-libvpx --enable-libx264 --enable-libvmaf --extra-
cflags=-I/Users/ronaldbultje/Projects/libvpx --extra-libs='
-L/Users/ronaldbultje/Projects/libvpx/x86-64' --disable-autodetect
libavutil 56. 0.100 / 56. 0.100
libavcodec 58. 1.100 / 58. 1.100
libavformat 58. 0.102 / 58. 0.102
libavdevice 58. 0.100 / 58. 0.100
libavfilter 7. 0.101 / 7. 0.101
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.100 / 3. 0.100
libpostproc 55. 0.100 / 55. 0.100
Input #0, ivf, from '/Users/ronaldbultje/Movies/nflx360p/res/box.1k.ivf':
Duration: 00:00:04.23, start: 0.000000, bitrate: 985 kb/s
Stream #0:0: Video: vp9 (Profile 0) (VP90 / 0x30395056), yuv420p(tv),
640x360, 30 tbr, 30 tbn, 30 tbc
Input #1, matroska,webm, from
'/Users/ronaldbultje/Movies/nflx360p/BoxingPractice.ffv1.mkv':
Metadata:
ENCODER : Lavf57.23.100
Duration: 00:00:04.23, start: 0.000000, bitrate: 31842 kb/s
Stream #1:0: Video: ffv1 (FFV1 / 0x31564646), yuv420p, 640x360, SAR
1:1 DAR 16:9, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Metadata:
ENCODER : Lavc57.22.100 ffv1
DURATION : 00:00:04.233000000
Stream mapping:
Stream #0:0 (vp9) -> libvmaf:main
Stream #1:0 (ffv1) -> libvmaf:reference
libvmaf -> Stream #0:0 (wrapped_avframe)
Press [q] to stop, [?] for help
Start calculating VMAF score...
Output #0, null, to 'pipe:':
Metadata:
encoder : Lavf58.0.102
Stream #0:0: Video: wrapped_avframe, yuv420p, 640x360, q=2-31, 200
kb/s, 30 fps, 30 tbn, 30 tbc (default)
Metadata:
encoder : Lavc58.1.100 wrapped_avframe
Input model at /Users/ronaldbultje/Projects/vmaf/model/nflxall_vmafv3.pkl2
cannot be read successfully.
libc++abi.dylib: terminating with uncaught exception of type
VmafException: Error loading model (.pkl): Trouble reading the
file:/Users/ronaldbultje/Projects/vmaf/model/nflxall_vmafv3.pkl2
Process 52892 stopped
* thread #2, stop reason = signal SIGABRT
frame #0: 0x00007fffb554bd42 libsystem_kernel.dylib`__pthread_kill +
10
libsystem_kernel.dylib`__pthread_kill:
-> 0x7fffb554bd42 <+10>: jae 0x7fffb554bd4c ; <+20>
0x7fffb554bd44 <+12>: movq %rax, %rdi
0x7fffb554bd47 <+15>: jmp 0x7fffb5544caf ;
cerror_nocancel
0x7fffb554bd4c <+20>: retq
Target 0: (ffmpeg_g) stopped.
(lldb) bt
* thread #2, stop reason = signal SIGABRT
* frame #0: 0x00007fffb554bd42 libsystem_kernel.dylib`__pthread_kill +
10
frame #1: 0x00007fffb5639457 libsystem_pthread.dylib`pthread_kill + 90
frame #2: 0x00007fffb54b1420 libsystem_c.dylib`abort + 129
frame #3: 0x00007fffb400494a libc++abi.dylib`abort_message + 266
frame #4: 0x00007fffb4029c17
libc++abi.dylib`default_terminate_handler() + 243
frame #5: 0x00007fffb4b39713 libobjc.A.dylib`_objc_terminate() + 124
frame #6: 0x00007fffb4026d49 libc++abi.dylib`std::__terminate(void
(*)()) + 8
frame #7: 0x00007fffb40267be libc++abi.dylib`__cxa_throw + 121
frame #8: 0x0000000100d8dbe4
ffmpeg_g`_read_and_assert_model(model_path="/Users/ronaldbultje/Projects/vmaf/model/nflxall_vmafv3.pkl2",
feature_names=0x00007000104bb790, norm_type=<unavailable>,
slopes=0x00007000104bb730, intercepts=<unavailable>,
score_clip=<unavailable>, score_transform=<unavailable>) at vmaf.cpp:92
[opt]
frame #9: 0x0000000100d8e44c
ffmpeg_g`VmafRunner::run(this=0x00007000104bb890, asset=<unavailable>,
read_frame=(ffmpeg_g`read_frame_8bit at vf_libvmaf.c:145),
user_data=0x0000000102504f40, disable_clip=<unavailable>,
enable_transform=<unavailable>, do_psnr=<unavailable>,
do_ssim=<unavailable>, do_ms_ssim=<unavailable>)(float*, float*, float*,
int, void*), void*, bool, bool, bool, bool, bool) at vmaf.cpp:149 [opt]
frame #10: 0x0000000100d92aa2 ffmpeg_g`RunVmaf(fmt=<unavailable>,
width=640, height=360, read_frame=<unavailable>, user_data=<unavailable>,
model_path="/Users/ronaldbultje/Projects/vmaf/model/nflxall_vmafv3.pkl2",
log_path="UAWAVAUATSH\x83?HM\x89?A\x89?H\x89t$ H\x89?M\x8d?\x90",
log_fmt=<unavailable>, disable_clip=<unavailable>,
enable_transform=<unavailable>, do_psnr=<unavailable>,
do_ssim=<unavailable>, do_ms_ssim=<unavailable>,
pool_method=0x0000000000000000)(float*, float*, float*, int, void*),
void*, char const*, char const*, char const*, bool, bool, bool, bool,
bool, char const*) at vmaf.cpp:645 [opt]
frame #11: 0x0000000100d6696f
ffmpeg_g`::compute_vmaf(fmt=<unavailable>, width=<unavailable>,
height=<unavailable>, read_frame=<unavailable>, user_data=<unavailable>,
model_path=<unavailable>, log_path=0x0000000000000000,
log_fmt=0x0000000000000000, disable_clip=0, disable_avx=0,
enable_transform=0, phone_model=0, do_psnr=0, do_ssim=0, do_ms_ssim=0,
pool_method=0x0000000000000000)(float *, float *, float *, int, void *),
void *, char *, char *, char *, int, int, int, int, int, int, int, char *)
at libvmaf.cpp:63 [opt]
frame #12: 0x000000010010e86f ffmpeg_g`call_vmaf [inlined]
compute_vmaf_score(s=0x0000000102504f40) at vf_libvmaf.c:159 [opt]
frame #13: 0x000000010010e7cf
ffmpeg_g`call_vmaf(ctx=0x0000000102504f40) at vf_libvmaf.c:168 [opt]
frame #14: 0x00007fffb563693b libsystem_pthread.dylib`_pthread_body +
180
frame #15: 0x00007fffb5636887 libsystem_pthread.dylib`_pthread_start +
286
frame #16: 0x00007fffb563608d libsystem_pthread.dylib`thread_start +
13
}}}
It appears the library aborts if the model is missing, so we should
probably check that the model is valid before passing it in (at least
check if the file exists), or alternatively fix the upstream code to not
abort but instead return an error.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/6884#comment:4>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list