📄 tagtree.cpp
字号:
/* //////////////////////////////////////////////////////////////////////////// INTEL CORPORATION PROPRIETARY INFORMATION// This software is supplied under the terms of a license agreement or// nondisclosure agreement with Intel Corporation and may not be copied// or disclosed except in accordance with the terms of that agreement.// Copyright(c) 2002-2005 Intel Corporation. All Rights Reserved.//////*//*// TagTree class encapsulate building of tag tree in memory// space. It is used in tag tree coding/decoding systems defined// in B.10.2 article of standard.//////*/#include "tagtree.h"#include "genalg.h"#include "wtmetric.h"TagTree::TagTree(): m_width(0), m_height(0){}void TagTree::Init(const RectSize &size){ m_width = size.Width(); m_height = size.Height(); m_nodes.ReAlloc(NOfNodes(m_width, m_height)); int nOfLevels = NOfLevels(m_width, m_height); Node *node = m_nodes; Node *parent = &m_nodes[m_width * m_height]; Node *parent0 = parent; for (int level = 0; level < nOfLevels - 1; level++) { int levelHeight = RShiftCeil(m_height, level); int levelWidth = RShiftCeil(m_width, level); for (int j = 0; j < levelHeight; j++) { int k = levelWidth; while (--k >= 0) { node->m_parent = parent; ++node; if (--k >= 0) { node->m_parent = parent; ++node; } ++parent; } if ((j & 1) || j == levelHeight - 1) { parent0 = parent; } else { parent = parent0; parent0 += levelWidth; } } }}int TagTree::NOfNodes(int width, int height){ int count = 0; int level = 0; int n; do { n = RShiftCeil(width, level) * RShiftCeil(height, level); count += n; level++; } while (n > 1); return count;}int TagTree::NOfLevels(int width, int height){ if(width*height <= 1) return 1; return MaxNOfWTLevels(Max(width, height)) + 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -