Log in

View Full Version : HEVCESBrowser - A tool for analyzing HEVC(h265) bitstreams.


Kurtnoise
4th May 2015, 16:10
This application displays syntax elements of hevc elementary streams. Input file for HEVCESBrowser should be unmuxed elementary stream. If analysis of the video in any type of container (e.g. in .ts or .mp4 files) is needed, preliminary demuxing is required. For example, you can use ffmpeg for this: ffmpeg -i your_file -vcodec copy -an video.h265. There are gui and cli applications in this product.

https://cloud.githubusercontent.com/assets/10683398/6995983/2f0a3974-db20-11e4-8d8f-cd6db7a954c4.png

https://github.com/virinext/hevcesbrowser

Selur
12th May 2015, 20:50
nice :) Thanks for the link!

virinext
17th May 2015, 14:41
Kurtnoise, thanks for announce :)

Latest build for windows: latest_release (https://github.com/virinext/hevcesbrowser/releases) (tested on win8 and win7)
Pre-builded binaries for others platforms are not available. But you should not have any problems with building for linux and mac.

If you found bug in this software, please drop a line to me (here, via github issues (https://github.com/virinext/hevcesbrowser/issues), or email).

Any questions and proposals are welcome.

Kurtnoise
18th May 2015, 10:22
Hey,

Welcome to D9 forum and thanks to you for your work...:cool:

Could you add a new feature to check Profiles Conformance based on constraints defined in the specs ?

For instance, for the Main Profile :
Bitstreams conforming to the Main profile shall obey the following constraints:
– Active VPSs shall have vps_base_layer_internal_flag and vps_base_layer_available_flag both equal to 1 only.
– Active SPSs for the base layer shall have chroma_format_idc equal to 1 only.
– Active SPSs for the base layer shall have bit_depth_luma_minus8 equal to 0 only.
– Active SPSs for the base layer shall have bit_depth_chroma_minus8 equal to 0 only.
– Active SPSs for the base layer shall have transform_skip_rotation_enabled_flag, transform_skip_context_enabled_flag, implicit_rdpcm_enabled_flag, explicit_rdpcm_enabled_flag, extended_precision_processing_flag, intra_smoothing_disabled_flag, high_precision_offsets_enabled_flag, persistent_rice_adaptation_enabled_flag and cabac_bypass_alignment_enabled_flag, when present, equal to 0 only.
– CtbLog2SizeY derived according to active SPSs for the base layer shall be in the range of 4 to 6, inclusive.
– Active PPSs for the base layer shall have log2_max_transform_skip_block_size_minus2 and chroma_qp_offset_list_enabled_flag, when present, equal to 0 only.
– When an active PPS for the base layer has tiles_enabled_flag equal to 1, it shall have entropy_coding_sync_enabled_flag equal to 0.
– When an active PPS for the base layer has tiles_enabled_flag equal to 1, ColumnWidthInLumaSamples[ i ] shall be greater than or equal to 256 for all values of i in the range of 0 to num_tile_columns_minus1, inclusive, and RowHeightInLumaSamples[ j ] shall be greater than or equal to 64 for all values of j in the range of 0 to num_tile_rows_minus1, inclusive.
– The number of times read_bits( 1 ) is called in clauses 9.3.4.3.3 and 9.3.4.3.4 when parsing coding_tree_unit( ) data for any coding tree unit shall be less than or equal to 5 * RawCtuBits / 3.
– general_level_idc and sub_layer_level_idc[ i ] for all values of i in active SPSs for the base layer shall not be equal to 255 (which indicates level 8.5).
– The level constraints specified for the Main profile in clause A.4 shall be fulfilled.

Conformance of a bitstream to the Main profile is indicated by general_profile_idc being equal to 1 or general_profile_compatibility_flag[ 1 ] being equal to 1. Conformance of a sub-layer representation with TemporalId equal to i to the Main profile is indicated by sub_layer_profile_idc[ i ] being equal to 1 or sub_layer_profile_compatibility_flag[ i ][ 1 ] being equal to 1.
NOTE – When general_profile_compatibility_flag[ 1 ] is equal to 1, general_profile_compatibility_flag[ 2 ] should also be equal to 1. When sub_layer_profile_compatibility_flag[ i ][ 1 ] is equal to 1 for a value of i, sub_layer_profile_compatibility_flag[ i ][ 2 ] should also be equal to 1.
Decoders conforming to the Main profile at a specific level (identified by a specific value of general_level_idc) of a specific tier (identified by a specific value of general_tier_flag) shall be capable of decoding all bitstreams and sub-layer representations for which all of the following conditions apply:
– The bitstream or sub-layer representation is indicated to conform to the Main profile or the Main Still Picture profile.
– The bitstream or sub-layer representation is indicated to conform to a level that is not level 8.5 and is lower than or equal to the specified level.
– The bitstream or sub-layer representation is indicated to conform to a tier that is lower than or equal to the specified tier.


With some basic colors (green = rely to the constraint / red = does not) highlighted for each values found in the stream...

virinext
18th May 2015, 17:59
Profile conformance verification is usefull feature.
I will add this one and let you know.

foxyshadis
18th May 2015, 20:49
My wish list is exposing the full RPS, because I've been tinkering with reference selection and this is a fantastic tool for cracking the stream open, but it's not that big of a deal.

virinext
31st May 2015, 14:28
Hi!
I am pleased to announce to you new version of hevcesbrowser.
Binaries (Windows): latest_release (https://github.com/virinext/hevcesbrowser/releases/latest)

Features:
1) Profile conformance verification (via 'warnings...' widget). If profile conformance violation are detected describing message will be added.
2) Full slice header parsing (for displaying rps in slice header).

virinext
11th February 2016, 17:10
new version here: latest_release (https://github.com/virinext/hevcesbrowser/releases/latest)


More stable version. No new features, only bugfixing and testing.

Supported features:
- viewing of syntax elements of hevc elementary streams
- syntax level errors detection
- profile conformance verification

filler56789
11th February 2016, 18:40
^ Thanks :thanks: