Skip to content
Snippets Groups Projects
x265Intra_VS_Inter_analysis.py 1.2 KiB
Newer Older
Ulysse Darmet's avatar
Ulysse Darmet committed
#!/usr/bin/env python3

filename = 'out.txt'

PredMode = {1:'inter', 2:'intra', 5:'skip'}
CUData = {
	'addr'    :int,
	'depth'   :int,
	'f_intra' :int,
	'f_inter' :int,
	'f_MVD'   :int,
	'isLeaf'  :lambda x: bool(int(x)),
	'predMode':lambda x: PredMode[int(x[0])]}

# Parse data
data = []
import os
with open(os.path.join(os.path.dirname(__file__), filename)) as f:
	for line in f.readlines():
		tokens = line.replace(':',' ').split()
		cu = {k:CUData[k](v) for k, v in zip(tokens[0::2], tokens[1::2])}
		data.append(cu)

# Analyse
count = dict(zip(PredMode.values(), [0]*len(PredMode)))
errors = 0
for cu in data:
	addr     = cu['addr']
	depth    = cu['depth']
	isLeaf   = cu['isLeaf']
	predMode = cu['predMode']
	
	count[predMode] += 1
	
	if isLeaf and depth > 0 and predMode != 'skip':
		f_intra  = cu['f_intra']
		f_inter  = cu['f_inter']
		f_MVD    = cu['f_MVD']
		df_ratio = (f_intra - f_inter) / max(f_intra, f_inter)
		
		if (predMode == 'intra' and df_ratio > 0) or (predMode == 'inter' and df_ratio < 0):
			print('df_ratio: {:6.2f}\tf_MVD: {:6}\tpredMode: {}'.format(df_ratio, f_MVD, predMode))
			errors += 1

print('errors: {} ({:.0f})%'.format(errors, 100*errors/(count['intra'] + count['inter'])))
print(count)