Opened 5 years ago

Last modified 5 years ago

#2524 new enhancement

vc1 error concealment

Reported by: cehoyos Owned by:
Priority: wish Component: avcodec
Version: git-master Keywords: vc1
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Original sample: http://samples.ffmpeg.org/archive/all/vc1+vc1+++artifacts7.vc1
I will attach a vc1 sample containing 13 frames (first and last are I-frames, both decoded bit-exact). The reference decoder fails to decode the 12th frame (a B-frame afaict) with "FATAL ERROR: DecodeACRunLevel: AC coef array overrun", ffmpeg shows artefacts that can probably be concealed better.

$ ffmpeg -loglevel debug -i vc1+vc1+++artifacts7_cut.vc1 -qscale 2 out.avi
ffmpeg version N-52608-g0061ba0 Copyright (c) 2000-2013 the FFmpeg developers
  built on May  1 2013 10:57:35 with gcc 4.7 (SUSE Linux)
  configuration: --enable-gpl --disable-indev=jack
  libavutil      52. 27.101 / 52. 27.101
  libavcodec     55.  6.100 / 55.  6.100
  libavformat    55.  3.100 / 55.  3.100
  libavdevice    55.  0.100 / 55.  0.100
  libavfilter     3. 61.101 /  3. 61.101
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  3.100 / 52.  3.100
Splitting the commandline.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-i' ... matched as input file with argument 'vc1+vc1+++artifacts7_cut.vc1'.
Reading option '-qscale' ... matched as option 'qscale' (use fixed quality scale (VBR)) with argument '2'.
Reading option 'out.avi' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option loglevel (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input file vc1+vc1+++artifacts7_cut.vc1.
Successfully parsed a group of options.
Opening an input file: vc1+vc1+++artifacts7_cut.vc1.
[vc1 @ 0x2c6d7e0] Format vc1 probed with size=2048 and score=50
[vc1 @ 0x2c6d7e0] File position before avformat_find_stream_info() is 0
[NULL @ 0x2c6e380] Header: DBFE3BF2
[NULL @ 0x2c6e380] Advanced Profile level 3:
frmrtq_postproc=7, bitrtq_postproc=31
LoopFilter=0, ChromaFormat=1, Pulldown=1, Interlace: 1
TFCTRflag=0, FINTERPflag=0
[NULL @ 0x2c6e380] Display extended info:
[NULL @ 0x2c6e380] Display dimensions: 1920x1080
[NULL @ 0x2c6e380] Aspect: 1:1
[NULL @ 0x2c6e380] Entry point: 1ADFFCEF
[NULL @ 0x2c6e380] Entry point info:
BrokenLink=0, ClosedEntry=0, PanscanFlag=0
RefDist=1, Postproc=1, FastUVMC=0, ExtMV=1
DQuant=1, VSTransform=1, Overlap=0, Qmode=3
[vc1 @ 0x2c6e380] Header: DBFE3BF2
[vc1 @ 0x2c6e380] Advanced Profile level 3:
frmrtq_postproc=7, bitrtq_postproc=31
LoopFilter=0, ChromaFormat=1, Pulldown=1, Interlace: 1
TFCTRflag=0, FINTERPflag=0
[vc1 @ 0x2c6e380] Display extended info:
[vc1 @ 0x2c6e380] Display dimensions: 1920x1080
[vc1 @ 0x2c6e380] Aspect: 1:1
[vc1 @ 0x2c6e380] Entry point: 1ADFFCEF
[vc1 @ 0x2c6e380] Entry point info:
BrokenLink=0, ClosedEntry=0, PanscanFlag=0
RefDist=1, Postproc=1, FastUVMC=0, ExtMV=1
DQuant=1, VSTransform=1, Overlap=0, Qmode=3
[vc1 @ 0x2c6e380] Header: DBFE3BF2
[vc1 @ 0x2c6e380] Advanced Profile level 3:
frmrtq_postproc=7, bitrtq_postproc=31
LoopFilter=1, ChromaFormat=1, Pulldown=1, Interlace: 1
TFCTRflag=0, FINTERPflag=0
[vc1 @ 0x2c6e380] Display extended info:
[vc1 @ 0x2c6e380] Display dimensions: 1920x1080
[vc1 @ 0x2c6e380] Aspect: 1:1
[vc1 @ 0x2c6e380] Entry point: 1ADFFCEF
[vc1 @ 0x2c6e380] Entry point info:
BrokenLink=0, ClosedEntry=0, PanscanFlag=0
RefDist=1, Postproc=1, FastUVMC=0, ExtMV=1
DQuant=1, VSTransform=1, Overlap=0, Qmode=3
[vc1 @ 0x2c6d7e0] File position after avformat_find_stream_info() is 919438
Input #0, vc1, from 'vc1+vc1+++artifacts7_cut.vc1':
  Duration: N/A, bitrate: N/A
    Stream #0:0, 13, 1/1200000: Video: vc1 (Advanced), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1001/60000, 29.97 fps, 29.97 tbr, 1200k tbn, 59.94 tbc
Successfully opened the file.
Parsing a group of options: output file out.avi.
Applying option qscale (use fixed quality scale (VBR)) with argument 2.
Please use -q:a or -q:v, -qscale is ambiguous
Successfully parsed a group of options.
Opening an output file: out.avi.
Successfully opened the file.
[graph 0 input from stream 0:0 @ 0x2ccf1a0] Setting 'video_size' to value '1920x1080'
[graph 0 input from stream 0:0 @ 0x2ccf1a0] Setting 'pix_fmt' to value '0'
[graph 0 input from stream 0:0 @ 0x2ccf1a0] Setting 'time_base' to value '1/1200000'
[graph 0 input from stream 0:0 @ 0x2ccf1a0] Setting 'pixel_aspect' to value '1/1'
[graph 0 input from stream 0:0 @ 0x2ccf1a0] Setting 'sws_param' to value 'flags=2'
[graph 0 input from stream 0:0 @ 0x2ccf1a0] Setting 'frame_rate' to value '60000/2002'
[graph 0 input from stream 0:0 @ 0x2ccf1a0] w:1920 h:1080 pixfmt:yuv420p tb:1/1200000 fr:30000/1001 sar:1/1 sws_param:flags=2
[format @ 0x2c6ece0] compat: called with args=[yuv420p]
[format @ 0x2c6ece0] Setting 'pix_fmts' to value 'yuv420p'
[AVFilterGraph @ 0x2c75dc0] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed
[mpeg4 @ 0x2c755e0] detected 8 logical cores
[mpeg4 @ 0x2c755e0] intra_quant_bias = 0 inter_quant_bias = -64
[vc1 @ 0x2c6e380] Header: DBFE3BF2
[vc1 @ 0x2c6e380] Advanced Profile level 3:
frmrtq_postproc=7, bitrtq_postproc=31
LoopFilter=0, ChromaFormat=1, Pulldown=1, Interlace: 1
TFCTRflag=0, FINTERPflag=0
[vc1 @ 0x2c6e380] Display extended info:
[vc1 @ 0x2c6e380] Display dimensions: 1920x1080
[vc1 @ 0x2c6e380] Aspect: 1:1
[vc1 @ 0x2c6e380] Entry point: 1ADFFCEF
[vc1 @ 0x2c6e380] Entry point info:
BrokenLink=0, ClosedEntry=0, PanscanFlag=0
RefDist=1, Postproc=1, FastUVMC=0, ExtMV=1
DQuant=1, VSTransform=1, Overlap=0, Qmode=3
Output #0, avi, to 'out.avi':
  Metadata:
    ISFT            : Lavf55.3.100
    Stream #0:0, 0, 1001/30000: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 1001/30000, q=2-31, 200 kb/s, 29.97 tbn, 29.97 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (vc1 -> mpeg4)
Press [q] to stop, [?] for help
[vc1 @ 0x2c6e380] Entry point: 1ADFFCEF
[vc1 @ 0x2c6e380] Entry point info:
BrokenLink=0, ClosedEntry=0, PanscanFlag=0
RefDist=1, Postproc=1, FastUVMC=0, ExtMV=1
DQuant=1, VSTransform=1, Overlap=0, Qmode=3
[vc1 @ 0x2c6e380] ACPRED plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 5, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 5, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 2, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 5, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 5, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 5, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 1
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] MB Direct Type plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] MB Skip plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[vc1 @ 0x2c6e380] Entry point: 1ADFFCEF
[vc1 @ 0x2c6e380] Entry point info:
BrokenLink=0, ClosedEntry=0, PanscanFlag=0
RefDist=1, Postproc=1, FastUVMC=0, ExtMV=1
DQuant=1, VSTransform=1, Overlap=0, Qmode=3
[vc1 @ 0x2c6e380] ACPRED plane encoding: Imode: 4, Invert: 0
[vc1 @ 0x2c6e380] VOP DQuant info
[output stream 0:0 @ 0x2cd03c0] EOF on sink link output stream 0:0:default.
No more output streams to write to, finishing.
frame=   13 fps=0.0 q=2.0 Lsize=     420kB time=00:00:00.56 bitrate=6059.0kbits/s
video:414kB audio:0kB subtitle:0 global headers:0kB muxing overhead 1.458072%
14 frames successfully decoded, 0 decoding errors
[AVIOContext @ 0x2c75c40] Statistics: 9 seeks, 25 writeouts
[AVIOContext @ 0x2c75e60] Statistics: 919438 bytes read, 0 seeks

It could be considered a bug imo that FFmpeg does not warn about the broken frame.

Attachments (1)

vc1+vc1+++artifacts7_cut.vc1 (897.9 KB) - added by cehoyos 5 years ago.

Download all attachments as: .zip

Change History (2)

Note: See TracTickets for help on using tickets.