Opened 4 years ago

Closed 4 years ago

#8634 closed defect (fixed)

Unexpected filterchain behaviour

Reported by: Carl Eugen Hoyos Owned by:
Priority: normal Component: avfilter
Version: git-master Keywords: interleave
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Some filterchains do not terminate, they do terminate with minimal changes:

$ ffmpeg -f lavfi -i testsrc=d=10 -vf "split[a],select=eq(mod(n\,2)\,1)[b],[a]select=eq(mod(n\,2)\,0),[b]interleave" -f null -
ffmpeg version N-97485-g6cfb33f976 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9 (SUSE Linux)
  configuration: --enable-gpl
  libavutil      56. 43.100 / 56. 43.100
  libavcodec     58. 82.100 / 58. 82.100
  libavformat    58. 42.101 / 58. 42.101
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 79.100 /  7. 79.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, lavfi, from 'testsrc=d=10':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf58.42.101
    Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 1000k tbn, 1000k tbc
    Metadata:
      encoder         : Lavc58.82.100 wrapped_avframe
[Parsed_testsrc_0 @ 0x3d35780] EOF timestamp not reliable
frame=  250 fps=0.0 q=-0.0 Lsize=N/A time=00:00:09.96 bitrate=N/A speed= 197x    
video:131kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

(above does terminate)

$ ffmpeg -f lavfi -i testsrc=d=10 -vf "split[a],select=eq(mod(n\,2)\,0)[b],[a]select=eq(mod(n\,2)\,1),[b]interleave" -f null -
ffmpeg version N-97485-g6cfb33f976 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9 (SUSE Linux)
  configuration: --enable-gpl
  libavutil      56. 43.100 / 56. 43.100
  libavcodec     58. 82.100 / 58. 82.100
  libavformat    58. 42.101 / 58. 42.101
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 79.100 /  7. 79.100
  libswscale      5.  6.101 /  5.  6.101
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, lavfi, from 'testsrc=d=10':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 320x240 [SAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf58.42.101
    Stream #0:0: Video: wrapped_avframe, rgb24, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 1000k tbn, 1000k tbc
    Metadata:
      encoder         : Lavc58.82.100 wrapped_avframe
[Parsed_testsrc_0 @ 0x3d95780] EOF timestamp not reliable
frame=  249 fps= 92 q=-0.0 Lsize=N/A time=00:00:09.92 bitrate=N/A speed=3.65x

(above does not terminate, the only difference is that the select filters are exchanged)

The difference is also visible if the duration of the input changed:

$ ffmpeg -f lavfi -i testsrc=d=10 -vf "split[a],select=eq(mod(n\,2)\,1)[b],[a]select=eq(mod(n\,2)\,0),[b]interleave" -f null -
$ ffmpeg -f lavfi -i testsrc=d=11 -vf "split[a],select=eq(mod(n\,2)\,1)[b],[a]select=eq(mod(n\,2)\,0),[b]interleave" -f null -

The first command terminates, the second does not.

Above command lines allow to reproduce the issue since f_interleave was switched to active.

Change History (1)

comment:1 by Carl Eugen Hoyos, 4 years ago

Keywords: interleave added
Resolution: fixed
Status: newclosed

Different aspects of this behaviour were fixed by Paul in 35bcbfd6da59ecb5288a6a823be731b4db30b365 and some earlier commits.

Note: See TracTickets for help on using tickets.