Re: [Cin] [Libav-user] Dynamic_input filters and avfilter_pad_get_type
On Sat, May 10, 2025 at 11:14 AM Andrew Randrianasulu wrote: > > On Sat, May 10, 2025 at 9:05 AM Paul B Mahol wrote: > > > > > > > > On Fri, May 9, 2025 at 11:38 PM Andrew Randrianasulu > > wrote: > >> > >> I was looking at why our application (cinelerra-gg) crashed at trying to > >> use libplacebo > >> > >> I found that libplacebo defines itself > >> > >> https://ffmpeg.org/doxygen/7.0/vf__libplacebo_8c.html > >> > >> as > >> > >> .flags = AVFILTER_FLAG_HWDEVICE | AVFILTER_FLAG_DYNAMIC_INPUTS, > >> > >> so only output pad is defined, as far as I can see: > >> > >> static const AVFilterPad libplacebo_outputs[] = { > >> { > >> .name = "default", > >> .type = AVMEDIA_TYPE_VIDEO, > >> .config_props = &libplacebo_config_output, > >> }, > >> }; > >> > >> > >> > >> then when our code calls > >> > >> avfilter_pad_get_type() > > > > > > You need to call it only after filtergraph have been configured, not before > > because in such cases number of output pads may be 0 before configuration. > > In any case you need to check current number of input pads and output pads > > for each filter before trying to access them. > > > > Thanks. Attached patch makes this crash go away, just 32-bit cingg > can't cope with 4k frames filtering en-masse :) Sadly wtch ffmpeg.git patch does not work anymore. I tried to use int nb_pads = avfilter_filter_pad_count(filter,0); but this one apparently crashes when I try zscale :( while may be zscale was just not compiled in? I'll retry with some more env. options. On the plus side ffmpeg.git + radv + h264 video = it mostly works. Some vids still crash us ... > > Andrea, can you test attached patch + this opts file put alongside > test 4k HDR video decodable by hardware? > > > > > > >> > >> > >> it promptly crashes. > >> > >> BC_Signals::dump_stack > >> cin() [0x8b2c9e2] > >> linux-gate.so.1(__kernel_rt_sigreturn+0) [0xf7fb8590] > >> cin(avfilter_pad_get_type+0x14) [0x99266a4] > >> cin(_ZN13FFVideoStream13create_filterEPKc+0xbc) [0x865669c] > >> cin(_ZN6FFMPEG12open_decoderEv+0x80f) [0x865732f] > >> cin(_ZN10FileFFMPEG9check_sigEP5Asset+0x81) [0x8670071] > >> cin(_ZN4File5probeEv+0x376) [0x867cd86] > >> cin(_ZN4File9open_fileEP11PreferencesP5Assetii+0x378) [0x867d628] > >> cin(_ZN7MWindow14load_filenamesEP9ArrayListIPcEiii+0x250) [0x87301f0] > >> cin(_ZN17CommandLineThread3runEv+0x53) [0x86e2cd3] > >> cin(_ZN6Thread10entrypointEPv+0x41) [0x8b70c11] > >> /lib/libpthread.so.0(+0x7328) [0xf7df9328] > >> /lib/libc.so.6(clone+0x66) [0xf0373f06] > >> > >> > >> > >> We still hope to get libplacebo's tonemapping + vulkan hevc decoding > >> going, so any pointers how to talk to those dynamic_input filters will be > >> useful. Even swscale is dynamic_input in ffmpeg 7.1+, so I (we) really > >> hope to keep it working, too. > >> > >> Code: > >> > >> https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-5.1/cinelerra/ffmpeg.C;h=1d0979df59f932628246678a920aca002d8dd88b;hb=HEAD#l3893 > >> > >> > >> > >> ___ > >> Libav-user mailing list > >> libav-u...@ffmpeg.org > >> https://ffmpeg.org/mailman/listinfo/libav-user > >> > >> To unsubscribe, visit link above, or email > >> libav-user-requ...@ffmpeg.org with subject "unsubscribe". > > > > ___ > > Libav-user mailing list > > libav-u...@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/libav-user > > > > To unsubscribe, visit link above, or email > > libav-user-requ...@ffmpeg.org with subject "unsubscribe". -- Cin mailing list Cin@lists.cinelerra-gg.org https://lists.cinelerra-gg.org/mailman/listinfo/cin
Re: [Cin] [Libav-user] Dynamic_input filters and avfilter_pad_get_type
сб, 10 мая 2025 г., 16:20 Andrea paz : > >> Andrea, can you test attached patch + this opts file put alongside > >> test 4k HDR video decodable by hardware? > > I compiled with the patch and put the opts in .../bin/ffmpeg. > I don't think I know what and how to test. I loaded the > iPhone13_tonemapping_checker_rev2.mp4 file you had provided. The > playback performance is good (even in reverse, with only a few > freezes). However, the video card does not activate and the CPU (not > particularly busy) does everything. The behavior is the same even > removing the opts. Suggestions? > > PS: the same is true with the lines for zscale that you asked to put > in the manual. Do I have to do an opts on it? How do I text it? > I also don't quite understand how the line you report works. > you create file with .opts extension in same folder where your main_media_file.mov located. You name it main_media_file.opts You put test lines there. You might need RADV_PERFTEST=video_decode set before you launch cin. I usually just launch cin path_to_test_media/main_media_file.mov It should pick up .opts file from there. I did not try to put those lines in global decode.opts you also need to set cin to Vulkan decoding (should be already in git). -- Cin mailing list Cin@lists.cinelerra-gg.org https://lists.cinelerra-gg.org/mailman/listinfo/cin
Re: [Cin] [Libav-user] Dynamic_input filters and avfilter_pad_get_type
>> Andrea, can you test attached patch + this opts file put alongside >> test 4k HDR video decodable by hardware? I compiled with the patch and put the opts in .../bin/ffmpeg. I don't think I know what and how to test. I loaded the iPhone13_tonemapping_checker_rev2.mp4 file you had provided. The playback performance is good (even in reverse, with only a few freezes). However, the video card does not activate and the CPU (not particularly busy) does everything. The behavior is the same even removing the opts. Suggestions? PS: the same is true with the lines for zscale that you asked to put in the manual. Do I have to do an opts on it? How do I text it? I also don't quite understand how the line you report works. -- Cin mailing list Cin@lists.cinelerra-gg.org https://lists.cinelerra-gg.org/mailman/listinfo/cin
Re: [Cin] [Libav-user] Dynamic_input filters and avfilter_pad_get_type
сб, 10 мая 2025 г., 11:14 Andrew Randrianasulu : > On Sat, May 10, 2025 at 9:05 AM Paul B Mahol wrote: > > > > > > > > On Fri, May 9, 2025 at 11:38 PM Andrew Randrianasulu < > randrianas...@gmail.com> wrote: > >> > >> I was looking at why our application (cinelerra-gg) crashed at trying > to use libplacebo > >> > >> I found that libplacebo defines itself > >> > >> https://ffmpeg.org/doxygen/7.0/vf__libplacebo_8c.html > >> > >> as > >> > >> .flags = AVFILTER_FLAG_HWDEVICE | AVFILTER_FLAG_DYNAMIC_INPUTS, > >> > >> so only output pad is defined, as far as I can see: > >> > >> static const AVFilterPad libplacebo_outputs[] = { > >> { > >> .name = "default", > >> .type = AVMEDIA_TYPE_VIDEO, > >> .config_props = &libplacebo_config_output, > >> }, > >> }; > >> > >> > >> > >> then when our code calls > >> > >> avfilter_pad_get_type() > > > > > > You need to call it only after filtergraph have been configured, not > before because in such cases number of output pads may be 0 before > configuration. > > In any case you need to check current number of input pads and output > pads for each filter before trying to access them. > > > > Thanks. Attached patch makes this crash go away, just 32-bit cingg > can't cope with 4k frames filtering en-masse :) > > Andrea, can you test attached patch + this opts file put alongside > test 4k HDR video decodable by hardware? > Aw, tried to reduce resolution to very barest minimum allowed by hevc encoder (228*128!) and while libplacebo works (sloowly!) with software decoder, it does not produce good frames with Vulkan hw decoder (even if I seen in nvtop hw decoder really runs sometimes at close to 100%). So, something confuses libplacebo greatly if used like this. I also tried *_vulkan filters on input, hoping they will also pick up hw vulkan decoding device but apparently no? > > > > > >> > >> > >> it promptly crashes. > >> > >> BC_Signals::dump_stack > >> cin() [0x8b2c9e2] > >> linux-gate.so.1(__kernel_rt_sigreturn+0) [0xf7fb8590] > >> cin(avfilter_pad_get_type+0x14) [0x99266a4] > >> cin(_ZN13FFVideoStream13create_filterEPKc+0xbc) [0x865669c] > >> cin(_ZN6FFMPEG12open_decoderEv+0x80f) [0x865732f] > >> cin(_ZN10FileFFMPEG9check_sigEP5Asset+0x81) [0x8670071] > >> cin(_ZN4File5probeEv+0x376) [0x867cd86] > >> cin(_ZN4File9open_fileEP11PreferencesP5Assetii+0x378) [0x867d628] > >> cin(_ZN7MWindow14load_filenamesEP9ArrayListIPcEiii+0x250) [0x87301f0] > >> cin(_ZN17CommandLineThread3runEv+0x53) [0x86e2cd3] > >> cin(_ZN6Thread10entrypointEPv+0x41) [0x8b70c11] > >> /lib/libpthread.so.0(+0x7328) [0xf7df9328] > >> /lib/libc.so.6(clone+0x66) [0xf0373f06] > >> > >> > >> > >> We still hope to get libplacebo's tonemapping + vulkan hevc decoding > going, so any pointers how to talk to those dynamic_input filters will be > useful. Even swscale is dynamic_input in ffmpeg 7.1+, so I (we) really hope > to keep it working, too. > >> > >> Code: > >> > >> > https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-5.1/cinelerra/ffmpeg.C;h=1d0979df59f932628246678a920aca002d8dd88b;hb=HEAD#l3893 > >> > >> > >> > >> ___ > >> Libav-user mailing list > >> libav-u...@ffmpeg.org > >> https://ffmpeg.org/mailman/listinfo/libav-user > >> > >> To unsubscribe, visit link above, or email > >> libav-user-requ...@ffmpeg.org with subject "unsubscribe". > > > > ___ > > Libav-user mailing list > > libav-u...@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/libav-user > > > > To unsubscribe, visit link above, or email > > libav-user-requ...@ffmpeg.org with subject "unsubscribe". > -- Cin mailing list Cin@lists.cinelerra-gg.org https://lists.cinelerra-gg.org/mailman/listinfo/cin
Re: [Cin] [Libav-user] Dynamic_input filters and avfilter_pad_get_type
On Sat, May 10, 2025 at 9:05 AM Paul B Mahol wrote: > > > > On Fri, May 9, 2025 at 11:38 PM Andrew Randrianasulu > wrote: >> >> I was looking at why our application (cinelerra-gg) crashed at trying to use >> libplacebo >> >> I found that libplacebo defines itself >> >> https://ffmpeg.org/doxygen/7.0/vf__libplacebo_8c.html >> >> as >> >> .flags = AVFILTER_FLAG_HWDEVICE | AVFILTER_FLAG_DYNAMIC_INPUTS, >> >> so only output pad is defined, as far as I can see: >> >> static const AVFilterPad libplacebo_outputs[] = { >> { >> .name = "default", >> .type = AVMEDIA_TYPE_VIDEO, >> .config_props = &libplacebo_config_output, >> }, >> }; >> >> >> >> then when our code calls >> >> avfilter_pad_get_type() > > > You need to call it only after filtergraph have been configured, not before > because in such cases number of output pads may be 0 before configuration. > In any case you need to check current number of input pads and output pads > for each filter before trying to access them. > Thanks. Attached patch makes this crash go away, just 32-bit cingg can't cope with 4k frames filtering en-masse :) Andrea, can you test attached patch + this opts file put alongside test 4k HDR video decodable by hardware? > >> >> >> it promptly crashes. >> >> BC_Signals::dump_stack >> cin() [0x8b2c9e2] >> linux-gate.so.1(__kernel_rt_sigreturn+0) [0xf7fb8590] >> cin(avfilter_pad_get_type+0x14) [0x99266a4] >> cin(_ZN13FFVideoStream13create_filterEPKc+0xbc) [0x865669c] >> cin(_ZN6FFMPEG12open_decoderEv+0x80f) [0x865732f] >> cin(_ZN10FileFFMPEG9check_sigEP5Asset+0x81) [0x8670071] >> cin(_ZN4File5probeEv+0x376) [0x867cd86] >> cin(_ZN4File9open_fileEP11PreferencesP5Assetii+0x378) [0x867d628] >> cin(_ZN7MWindow14load_filenamesEP9ArrayListIPcEiii+0x250) [0x87301f0] >> cin(_ZN17CommandLineThread3runEv+0x53) [0x86e2cd3] >> cin(_ZN6Thread10entrypointEPv+0x41) [0x8b70c11] >> /lib/libpthread.so.0(+0x7328) [0xf7df9328] >> /lib/libc.so.6(clone+0x66) [0xf0373f06] >> >> >> >> We still hope to get libplacebo's tonemapping + vulkan hevc decoding going, >> so any pointers how to talk to those dynamic_input filters will be useful. >> Even swscale is dynamic_input in ffmpeg 7.1+, so I (we) really hope to keep >> it working, too. >> >> Code: >> >> https://git.cinelerra-gg.org/git/?p=goodguy/cinelerra.git;a=blob;f=cinelerra-5.1/cinelerra/ffmpeg.C;h=1d0979df59f932628246678a920aca002d8dd88b;hb=HEAD#l3893 >> >> >> >> ___ >> Libav-user mailing list >> libav-u...@ffmpeg.org >> https://ffmpeg.org/mailman/listinfo/libav-user >> >> To unsubscribe, visit link above, or email >> libav-user-requ...@ffmpeg.org with subject "unsubscribe". > > ___ > Libav-user mailing list > libav-u...@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/libav-user > > To unsubscribe, visit link above, or email > libav-user-requ...@ffmpeg.org with subject "unsubscribe". From 73e74b064b80a0c4cdeb80a3733faf666fd0e4a9 Mon Sep 17 00:00:00 2001 From: Andrew Randrianasulu Date: Sat, 10 May 2025 11:06:44 +0300 Subject: [PATCH] Add check for nb_inputs before calling avfilter_get_pad_name, fixes crash --- cinelerra-5.1/cinelerra/ffmpeg.C | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cinelerra-5.1/cinelerra/ffmpeg.C b/cinelerra-5.1/cinelerra/ffmpeg.C index 1d0979df..82ae0856 100644 --- a/cinelerra-5.1/cinelerra/ffmpeg.C +++ b/cinelerra-5.1/cinelerra/ffmpeg.C @@ -3903,7 +3903,9 @@ int FFVideoStream::create_filter(const char *filter_spec) while( --i>=0 && *sp!=0 && !strchr(" \t:=,",*sp) ) *np++ = *sp++; *np = 0; const AVFilter *filter = !filter_name[0] ? 0 : avfilter_get_by_name(filter_name); - if( !filter || avfilter_pad_get_type(filter->inputs,0) != AVMEDIA_TYPE_VIDEO ) { + //AVFilterContext *ctx = filter->ctx; + int nb_pads = filter->nb_inputs; + if( !filter || (nb_pads>1 && avfilter_pad_get_type(filter->inputs,0)) != AVMEDIA_TYPE_VIDEO ) { ff_err(AVERROR(EINVAL), "FFVideoStream::create_filter: %s\n", filter_spec); return -1; } -- 2.46.3 iPhone11_4K-recorder_59.940HDR10.opts Description: Binary data -- Cin mailing list Cin@lists.cinelerra-gg.org https://lists.cinelerra-gg.org/mailman/listinfo/cin