Opened 4 years ago

Last modified 4 months ago

#8515 open defect

vc1_parser erroneously flagged every packet as keyframe

Reported by: HolyWu Owned by:
Priority: important Component: avcodec
Version: git-master Keywords: vc1 regression
Cc: Mika Fischer Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description (last modified by Carl Eugen Hoyos)

Since 701e8b42e12ad625c64ceae2252acb1de390278c, vc-1 parser erroneously flagged every packet as keyframe. If you recompile the tool with that commit reverted, you will get the expected result.

The first shows the result with that commit. The second shows the result without that commit.

$ ffprobe -pretty -show_packets vc1_sample.mkv
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=959
dts_time=0:00:00.959000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=9.016602 Kibyte
pos=5494
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1001
dts_time=0:00:01.001000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=14734
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1043
dts_time=0:00:01.043000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=16302
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1084
dts_time=0:00:01.084000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=17869
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1126
dts_time=0:00:01.126000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=17881
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1168
dts_time=0:00:01.168000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=19449
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1210
dts_time=0:00:01.210000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=21016
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1251
dts_time=0:00:01.251000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=21028
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1293
dts_time=0:00:01.293000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=22596
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1335
dts_time=0:00:01.335000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=24163
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1376
dts_time=0:00:01.376000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=24175
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1418
dts_time=0:00:01.418000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=25743
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1460
dts_time=0:00:01.460000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=27310
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1502
dts_time=0:00:01.502000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=27322
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1543
dts_time=0:00:01.543000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=28890
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1585
dts_time=0:00:01.585000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=30457
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1627
dts_time=0:00:01.627000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=30469
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1668
dts_time=0:00:01.668000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=32037
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1710
dts_time=0:00:01.710000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=33604
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1752
dts_time=0:00:01.752000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=33616
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1793
dts_time=0:00:01.793000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=35184
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1835
dts_time=0:00:01.835000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=36751
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1877
dts_time=0:00:01.877000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=36763
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1919
dts_time=0:00:01.919000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=38331
flags=K_
[/PACKET]
ffprobe version 4.2.git Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9.2.0 (Rev2, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --disable-doc --disable-debug
  libavutil      56. 39.100 / 56. 39.100
  libavcodec     58. 68.100 / 58. 68.100
  libavformat    58. 38.100 / 58. 38.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 75.100 /  7. 75.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, matroska,webm, from 'vc1_sample.mkv':
  Metadata:
    encoder         : libebml v1.3.10 + libmatroska v1.5.2
    creation_time   : 2020-02-09T07:04:30.000000Z
  Duration: 00:00:01.00, bitrate: 321 kb/s
    Stream #0:0: Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      BPS-eng         : 273405
      DURATION-eng    : 00:00:01.002000000
      NUMBER_OF_FRAMES-eng: 24
      NUMBER_OF_BYTES-eng: 34244
      _STATISTICS_WRITING_APP-eng: mkvmerge v43.0.0 ('The Quartermaster') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2020-02-09 07:04:30
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
$ ffprobe -pretty -show_packets vc1_sample.mkv
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=959
dts_time=0:00:00.959000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=9.016602 Kibyte
pos=5494
flags=K_
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1001
pts_time=0:00:01.001000
dts=1001
dts_time=0:00:01.001000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=14734
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1043
pts_time=0:00:01.043000
dts=1043
dts_time=0:00:01.043000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=16302
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1084
dts_time=0:00:01.084000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=17869
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1126
pts_time=0:00:01.126000
dts=1126
dts_time=0:00:01.126000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=17881
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1168
pts_time=0:00:01.168000
dts=1168
dts_time=0:00:01.168000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=19449
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1210
dts_time=0:00:01.210000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=21016
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1251
pts_time=0:00:01.251000
dts=1251
dts_time=0:00:01.251000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=21028
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1293
pts_time=0:00:01.293000
dts=1293
dts_time=0:00:01.293000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=22596
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1335
dts_time=0:00:01.335000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=24163
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1376
pts_time=0:00:01.376000
dts=1376
dts_time=0:00:01.376000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=24175
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1418
pts_time=0:00:01.418000
dts=1418
dts_time=0:00:01.418000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=25743
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1460
dts_time=0:00:01.460000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=27310
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1502
pts_time=0:00:01.502000
dts=1502
dts_time=0:00:01.502000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=27322
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1543
pts_time=0:00:01.543000
dts=1543
dts_time=0:00:01.543000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=28890
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1585
dts_time=0:00:01.585000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=30457
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1627
pts_time=0:00:01.627000
dts=1627
dts_time=0:00:01.627000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=30469
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1668
pts_time=0:00:01.668000
dts=1668
dts_time=0:00:01.668000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=32037
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1710
dts_time=0:00:01.710000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=33604
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1752
pts_time=0:00:01.752000
dts=1752
dts_time=0:00:01.752000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=33616
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1793
pts_time=0:00:01.793000
dts=1793
dts_time=0:00:01.793000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=35184
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=N/A
pts_time=N/A
dts=1835
dts_time=0:00:01.835000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=5 byte
pos=36751
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1877
pts_time=0:00:01.877000
dts=1877
dts_time=0:00:01.877000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=36763
flags=__
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1919
pts_time=0:00:01.919000
dts=1919
dts_time=0:00:01.919000
duration=41
duration_time=0:00:00.041000
convergence_duration=N/A
convergence_duration_time=N/A
size=1.524414 Kibyte
pos=38331
flags=__
[/PACKET]
ffprobe version 4.2.git Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9.2.0 (Rev2, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --disable-doc --disable-debug
  libavutil      56. 39.100 / 56. 39.100
  libavcodec     58. 68.100 / 58. 68.100
  libavformat    58. 38.100 / 58. 38.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 75.100 /  7. 75.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, matroska,webm, from 'vc1_sample.mkv':
  Metadata:
    encoder         : libebml v1.3.10 + libmatroska v1.5.2
    creation_time   : 2020-02-09T07:04:30.000000Z
  Duration: 00:00:01.00, bitrate: 321 kb/s
    Stream #0:0: Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      BPS-eng         : 273405
      DURATION-eng    : 00:00:01.002000000
      NUMBER_OF_FRAMES-eng: 24
      NUMBER_OF_BYTES-eng: 34244
      _STATISTICS_WRITING_APP-eng: mkvmerge v43.0.0 ('The Quartermaster') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2020-02-09 07:04:30
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES

Attachments (1)

vc1_sample.mkv (39.4 KB ) - added by HolyWu 4 years ago.

Download all attachments as: .zip

Change History (7)

by HolyWu, 4 years ago

Attachment: vc1_sample.mkv added

comment:1 by Carl Eugen Hoyos, 4 years ago

Description: modified (diff)
Keywords: vc1 regression added; vc-1 parser removed
Priority: normalimportant

comment:2 by Balling, 4 years ago

Status: newopen

How does it even work if it thinks every frame is a key frame? WTF?

comment:3 by Balling, 3 years ago

Interestingly enough it does not happen in Blu-rays like here

Stream #0:0[0x1011]: Video: vc1 (Advanced) (VC-1 / 0x312D4356), yuv420p(bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc

but it does show some warnings in ffplay while seeking

[vc1 @ 0000026d58d23480] warning: first frame is no keyframe

Also in THIS vc1_sample.mkv file it is a little bit different (WVC1?)

Stream #0:0: Video: vc1 (Advanced) (WVC1 / 0x31435657), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Last edited 3 years ago by Balling (previous) (diff)

comment:4 by mkver, 3 years ago

It happens whenever the PARSER_FLAG_COMPLETE_FRAMES is set (it is for Matroska), because unesc_index is never reset in this case after having parsed the first frame.

in reply to:  4 comment:5 by Balling, 3 years ago

Replying to mkver:

It happens whenever the PARSER_FLAG_COMPLETE_FRAMES is set (it is for Matroska), because unesc_index is never reset in this case after having parsed the first frame.

Can you fix it? Or just revert 701e8b42e12ad625c64ceae2252acb1de390278c.

comment:6 by Mika Fischer, 4 months ago

Cc: Mika Fischer added
Note: See TracTickets for help on using tickets.