Opened 7 years ago

Last modified 7 years ago

#6756 reopened defect

comfortnoise decoder prints warnings and decodes forever even if given a time limit

Reported by: James Cowgill Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
With ffmpeg 3.4 and git master, trying to decode a nut file encoded with the comfortnoise codec spews warnings everywhere and generates a huge output file (ie many GBs) even though the output is limited to 1 second.

How to reproduce:

$ ffmpeg -f lavfi -i sine=d=10 -c:a comfortnoise -f nut comfortnoise.nut -y
$ ffmpeg -i comfortnoise.nut -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y

The warnings are all like this and appear to go on forever (although I killed it once the log file grew to about 1GB):

[nut @ 0x5610e00d14c0] Non-monotonous DTS in output stream 0:0; previous: 699, current: 697; changing to 700. This may result in incorrect timestamps in the output file.
[nut @ 0x5610e00d14c0] Non-monotonous DTS in output stream 0:0; previous: 700, current: 697; changing to 701. This may result in incorrect timestamps in the output file.
...

One thing I notice is that trying to play the comfortnoise.nut file with ffplay causes the current timestamp to go wildly all over the place (including into negative time). I'm guessing this is related.

Change History (4)

comment:1 by James Cowgill, 7 years ago

Managed to bisect to this commit (first bad commit):

commit 061a0c14bb5767bca72e3a7227ca400de439ba09
Author: Anton Khirnov <anton@khirnov.net>
Date: Wed Oct 26 13:59:15 2016 +0200

decode: restructure the core decoding code

comment:2 by Carl Eugen Hoyos, 7 years ago

Resolution: worksforme
Status: newclosed
$ ffmpeg -f lavfi -i sine=d=10 -c:a comfortnoise -f nut comfortnoise.nut -y
ffmpeg version N-87875-gf685bbc Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 6.3.0 (GCC)
  configuration: --enable-gpl
  libavutil      55. 79.100 / 55. 79.100
  libavcodec     57.108.100 / 57.108.100
  libavformat    57. 84.100 / 57. 84.100
  libavdevice    57. 11.100 / 57. 11.100
  libavfilter     6.108.100 /  6.108.100
  libswscale      4.  9.100 /  4.  9.100
  libswresample   2. 10.100 /  2. 10.100
  libpostproc    54.  8.100 / 54.  8.100
Input #0, lavfi, from 'sine=d=10':
  Duration: N/A, start: 0.000000, bitrate: 705 kb/s
    Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> comfortnoise (native))
Press [q] to stop, [?] for help
Output #0, nut, to 'comfortnoise.nut':
  Metadata:
    encoder         : Lavf57.84.100
    Stream #0:0: Audio: comfortnoise (3389 / 0x39383333), 44100 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc57.108.100 comfortnoise
[Parsed_sine_0 @ 0x391d4c0] EOF timestamp not reliable
size=      10kB time=00:00:10.01 bitrate=   8.5kbits/s speed= 971x
video:0kB audio:7kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 39.986824%
$ ffmpeg -i comfortnoise.nut -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y
ffmpeg version N-87875-gf685bbc Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 6.3.0 (GCC)
  configuration: --enable-gpl
  libavutil      55. 79.100 / 55. 79.100
  libavcodec     57.108.100 / 57.108.100
  libavformat    57. 84.100 / 57. 84.100
  libavdevice    57. 11.100 / 57. 11.100
  libavfilter     6.108.100 /  6.108.100
  libswscale      4.  9.100 /  4.  9.100
  libswresample   2. 10.100 /  2. 10.100
  libpostproc    54.  8.100 / 54.  8.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, nut, from 'comfortnoise.nut':
  Metadata:
    encoder         : Lavf57.84.100
  Duration: 00:00:10.00, start: 0.000000, bitrate: 8 kb/s
    Stream #0:0: Audio: comfortnoise (3389 / 0x39383333), 8000 Hz, mono, s16
    Metadata:
      encoder         : Lavc57.108.100 comfortnoise
Stream mapping:
  Stream #0:0 -> #0:0 (comfortnoise (native) -> pcm_s32le (native))
Press [q] to stop, [?] for help
Output #0, nut, to '/dev/null':
  Metadata:
    encoder         : Lavf57.84.100
    Stream #0:0: Audio: pcm_s32le (PSD  / 0x20445350), 8000 Hz, mono, s32, 256 kb/s
    Metadata:
      encoder         : Lavc57.108.100 pcm_s32le
size=     163kB time=00:00:01.00 bitrate=1334.6kbits/s speed= 491x
video:0kB audio:162kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.425596%

comment:3 by James Cowgill, 7 years ago

Sorry, I copied the wrong command. It should be this:

$ ffmpeg -f lavfi -i sine=d=0.1 -c:a comfortnoise -f nut comfortnoise.nut -y
$ ffmpeg -i comfortnoise.nut -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y

ie "sine=d=0.1" instead of "sine=d=10"

comment:4 by James Cowgill, 7 years ago

Resolution: worksforme
Status: closedreopened
Note: See TracTickets for help on using tickets.