Opened 10 years ago

Closed 10 years ago

Last modified 10 years ago

#3185 closed defect (fixed)

ffprobe do not handle HEVC correctly

Reported by: figgis Owned by:
Priority: normal Component: avcodec
Version: git-master Keywords: hevc
Cc: Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Summary of the bug:
How to reproduce:

I encoded some frames using the HM-encoder.
This is what the decoder says:

$ ./TAppDecoderStatic -b foreman_352x288.hevc 

HM software: Decoder Version [12.1][Linux][GCC 4.7.3][64 bit] 

POC    0 TId: 0 ( I-SLICE, QP 32 ) [DT  0.020] [L0 ] [L1 ] [:,,,(unk)] 
POC    1 TId: 0 ( P-SLICE, QP 35 ) [DT  0.000] [L0 0 ] [L1 ] [:,,,(unk)] 
POC    2 TId: 0 ( B-SLICE, QP 34 ) [DT  0.000] [L0 1 0 ] [L1 1 0 ] [:,,,(unk)] 
POC    3 TId: 0 ( B-SLICE, QP 35 ) [DT  0.010] [L0 2 1 0 ] [L1 2 1 0 ] [:,,,(unk)] 
POC    4 TId: 0 ( B-SLICE, QP 33 ) [DT  0.010] [L0 3 2 1 0 ] [L1 3 2 1 0 ] [:,,,(unk)] 
 Total Time:        0.040 sec.

This is the output from ffprobe for the first frame:
$ ./ffprobe -show_frames ~/src/jctvc-hm/bin/foreman_352x288.hevc 
ffprobe version N-58684-gf068aed Copyright (c) 2007-2013 the FFmpeg developers
  built on Nov 30 2013 23:52:44 with gcc 4.7 (Ubuntu/Linaro 4.7.3-1ubuntu1)
  configuration: --enable-libx264 --enable-gpl --enable-libmp3lame
  libavutil      52. 56.100 / 52. 56.100
  libavcodec     55. 44.100 / 55. 44.100
  libavformat    55. 21.102 / 55. 21.102
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     3. 91.100 /  3. 91.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
Input #0, hevc, from '/home/fp/src/jctvc-hm/bin/foreman_352x288.hevc':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: hevc (Main), yuv420p(tv), 352x288, 25 fps, 25 tbr, 1200k tbn, 25 tbc
[FRAME]
media_type=video
key_frame=1
pkt_pts=0
pkt_pts_time=0.000000
pkt_dts=0
pkt_dts_time=0.000000
pkt_duration=48000
pkt_duration_time=0.040000
pkt_pos=0
pkt_size=3695
width=352
height=288
pix_fmt=yuv420p
sample_aspect_ratio=N/A
pict_type=?
coded_picture_number=0
display_picture_number=0
interlaced_frame=0
top_field_first=0
repeat_pict=0
[/FRAME]

in the above, pict_type do not display the correct frame-type, also coded_picture_number and display_picture_number always displays as zero.

HEVC reference decoder/encoder uses the slize-type do determine the type, i.e. I, P, B.

Valid code in the reference decoder is
Lib/TLibDecoder/TDecGop.cpp:219

  Char c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B');
  if (!pcSlice->isReferenced()) c += 32;

  //-- For time output for each slice
  printf("\nPOC %4d TId: %1d ( %c-SLICE, QP%3d ) ", pcSlice->getPOC(),
                                                    pcSlice->getTLayer(),
                                                    c,
                                                    pcSlice->getSliceQp() );

See e.g. table 7.7, page 77. in HEVC-standard 
http://www.itu.int/rec/T-REC-H.265-201304-I/en

Attachments (1)

foreman_352x288.hevc (5.5 KB ) - added by figgis 10 years ago.
hevc-binary file to show different slize-types

Download all attachments as: .zip

Change History (8)

by figgis, 10 years ago

Attachment: foreman_352x288.hevc added

hevc-binary file to show different slize-types

comment:1 by figgis, 10 years ago

Version: unspecifiedgit-master

comment:2 by Carl Eugen Hoyos, 10 years ago

Component: FFprobeavcodec
Keywords: hevc added

comment:3 by Michael Niedermayer, 10 years ago

Reproduced by developer: set
Resolution: fixed
Status: newclosed

comment:4 by Đonny, 10 years ago

Resolution: fixed
Status: closedreopened

I hope it's not too daring from me to reopen a ticket, but I'm still having problems with detection of duration of H.265 files in N-63366-gf932e5f.
I have a H.265 file and FFprobe still tells me that the duration is unknown :-(

D:\UgcTestFiles\Video>ffprobe Sintel_272p_logo.265
ffprobe version N-63366-gf932e5f Copyright (c) 2007-2014 the FFmpeg developers
  built on May 21 2014 22:09:16 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable
-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex
--enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --ena
ble-decklink --enable-zlib
  libavutil      52. 86.100 / 52. 86.100
  libavcodec     55. 63.100 / 55. 63.100
  libavformat    55. 40.100 / 55. 40.100
  libavdevice    55. 13.101 / 55. 13.101
  libavfilter     4.  5.100 /  4.  5.100
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
  libpostproc    52.  3.100 / 52.  3.100
[hevc @ 0000000000355ba0] Unknown HEVC profile: 0
    Last message repeated 3 times
Input #0, hevc, from 'Sintel_272p_logo.265':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: hevc, yuv420p(tv), 640x272, 25 fps, 25 tbr, 1200k tbn, 25 tbc
[hevc @ 000000000034c960] Unknown HEVC profile: 0
    Last message repeated 1 times

Download the test file form here: http://docs.voanews.eu/en-US-TEST-LTR/2014/05/22/34be68b8-b0c9-4185-9332-8bc1d85a31bb.265

Last edited 10 years ago by Đonny (previous) (diff)

comment:5 by Hendrik, 10 years ago

durations are just not supported for raw video files like .h265, the same thing will most likely happen with .h264

You cannot determine the duration of a .h265 file without reading it from start to end, which it doesn't do.

comment:6 by Carl Eugen Hoyos, 10 years ago

Resolution: fixed
Status: reopenedclosed

comment:7 by Đonny, 10 years ago

Aha thanks for info,
is there any way to actually instruct ffprobe to read it from start to end to determine the duration?

Note: See TracTickets for help on using tickets.