ISO/IEC 14496-16:2004/Cor 1:2005
(Corrigendum)Information technology — Coding of audio-visual objects — Part 16: Animation Framework eXtension (AFX) — Technical Corrigendum 1
Information technology — Coding of audio-visual objects — Part 16: Animation Framework eXtension (AFX) — Technical Corrigendum 1
Technologies de l'information — Codage des objets audiovisuels — Partie 16: Extension du cadre d'animation (AFX) — Rectificatif technique 1
General Information
Relations
Standards Content (Sample)
INTERNATIONAL STANDARD ISO/IEC 14496-16:2004
TECHNICAL CORRIGENDUM 1
Published 2005-03-01
INTERNATIONAL ORGANIZATION FOR STANDARDIZATION • МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ • ORGANISATION INTERNATIONALE DE NORMALISATION
INTERNATIONAL ELECTROTECHNICAL COMMISSION • МЕЖДУНАРОДНАЯ ЭЛЕКТРОТЕХНИЧЕСКАЯ КОМИССИЯ • COMMISSION ÉLECTROTECHNIQUE INTERNATIONALE
Information technology — Coding of audio-visual objects —
Part 16:
Animation Framework eXtension (AFX)
TECHNICAL CORRIGENDUM 1
Technologies de l'information — Codage des objets audiovisuels —
Partie 16: Extension du cadre d'animation (AFX)
RECTIFICATIF TECHNIQUE 1
Technical Corrigendum 1 to ISO/IEC 14496-16:2004 was prepared by Joint Technical Committee
ISO/IEC JTC 1, Information technology, Subcommittee SC 29, Coding of audio, picture, multimedia and
hypermedia information.
ICS 35.040 Ref. No. ISO/IEC 14496-16:2004/Cor.1:2005(E)
© ISO/IEC 2005 – All rights reserved
Published in Switzerland
---------------------- Page: 1 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
In Clause 3, replace the list with:
AFX Animation Framework eXtension
BIFS BInary Format for Scene
DIBR Depth-Image Based Representation
ES Elementary Stream
IBR Image-Based Rendering
NDT Node Data Type
OD Object Descriptor
VRML Virtual Reality Modelling Language
In subclause 4.3.1, remove reference to particle system:
- Particle systems, which consists of the following nodes: Particles, ParticleInitiBox, ParticleInitCone,
ParticleObstacle, and PointAttractor.
In subclause 4.3.4.1.3, replace:
A MeshGrid mesh allows view-dependent streaming (see subclause 5.1) and particular animation possibilities,
such as: hierarchical grid animation, and offset based animation (see subclause 4.3.4.3).
with:
A MeshGrid mesh allows view-dependent streaming (see subclause 5.2) and particular animation possibilities,
such as: hierarchical grid animation, and offset based animation (see subclause 4.3.4.3).
In subclause 4.4.2.1, replace Table 2: General arithmetic operator with:
Op Description Rules for each P(X1,X2,X3,X4) Syntax
Sadd Arithmetic Sadd (F0, F1)
(P)= (P)+ (P)
d d d
r 0 1
addition of the
density of two
forms
Arithmetic
Smul Smul (F0, F1)
(P)= (P) * (P)
d d d
r 0 1
multiplication of
the density of two
forms
Sdif The positive Returns the difference between the densities if Sdif (F0, F1)
difference of two this result is nonnegative, and 0 if the result is
forms F0 and F1. negative.
Sexp Exponentiation of Raises one form to the power of another form. Sexp (F0, F1)
forms The density of a point with respect to F1 serves
as exponent to the density of the same point with
respect to F0.
Greatest Returns the gcd of the densities of two forms.
Sgcd Sgcd (F0, F1)
common divisor
Slcm Least common Returns the lcm of the densities of two forms. Slcm (F0, F1)
multiple
Smod Integral The Integral remainder operator calculates the
Smod (F0, F1)
remainder integer remainder when the density of a point
with respect to F0 is divided by the density of that
point with respect to F1.
Ssab Absolute Returns the result of the subtraction between the Ssab (F0, F1)
difference densities of two forms when this result is
nonnegative. Otherwise, the return is the result
opposed value.
2 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 2 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
Scub Integral cube root Returns the integral cube root of the density of Scub (F0)
the form.
Integral square Returns the integral square root of the density of
Ssqr Ssqr (F0)
root the form.
Smax Maximum This operator is equivalent to the ternary union Smax (F0, F1)
for n-ary logic.
Minimum This operator is equivalent to the ternary
Smin Smin (F0, F1)
intersection for n-ary logic.
In subclause 4.4.2.2, replace Table 3: Ternary logic operators with:
Op Description Rules for each P(X1,X2,X3,X4) Syntax
Suni Ternary union of F1 Suni (F0, F1)
two forms.
Suni 0 1 2
0 0 1 2
F0 1 1 1 2
22 2 2
Ternary
Sint F1 Sint (F0, F1)
intersection
Sint 0 1 2
0 0 0 0
1 0 1 1
F0
20 1 2
Ternary
Simp F1 Simp (F0, F1)
implication
Simp 0 1 2
0 2 2 2
1 1 1 2
F0
20 1 2
Simr Reciprocal F1 Simr (F0, F1)
Ternary
0 1 2
Simr
implication
0 2 1 0
F0 1 1 1 1
20 1 2
Sdua Ternary dual of Sdua (F0)
the volume
Sdua
0 2
1 1
F0
20
In subclause 4.4.2.3, replace Table 4: Filtering and test operators with:
Filter Description Rules Syntax
Seqf Equality filter The density of the volume that checks the Seqf (F0, F1)
equality test, and 0 otherwise.
greater than or The density of the second volume if the density of
Sgtef Sgtef (F0, F1)
equal filter the first one is greater than or equal to the
density of the second volume, and 0 otherwise.
Greater than The density of the second volume if the density of
Sgtf Sgtf (F0, F1)
filter the first one is greater than the density of the
second volume, and 0 otherwise.
Sltef Less than or The density of the second volume if the density of
Sltef (F0, F1)
equal filter the first one is less than or equal to the density of
the second volume, and 0 otherwise.
Sltf Less than filter The density of the second volume if the density of Sltf (F0, F1)
the first one is less than the density of the second
volume, and 0 otherwise.
© ISO/IEC 2005 – All rights reserved 3
---------------------- Page: 3 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
Sevnf Even filter The volume density if the density is even, and 0 Sevnf (F0)
otherwise.
Odd filter The result is the volume density if the density is
Soddf Soddf (F0)
odd, and 0 otherwise.
Sneqf Difference filter The result is the second volume density if the Sneqf (F0, F1)
densities are different, and 0 otherwise.
In subclause 4.4.3, replace old operators symbols by the new ones. Replace:
# b: egg cut by a box
Group{
children [
# Primary SolidRep
DEF Le_Solid3 SolidRep{
bboxSize 5 5 5
densityList [1 3 4] # choice of densities to display
dual FALSE
}
DEF Le_Script Script{ # Solid Tree definition
field SFNode Srepout USE Le_Solid3
#primitives
field SFNode White # container
Transform {
translation 0 0 0
children [
Shape {
…
geometry
Quadric { P0 1 0 0 1
P1 -1 0 0 1
P2 0 1 0 0
P3 0 0 1 0
P4 0 1 0 1
P5 0 0 1 1
boxSize 1 1.3 0.95
solid FALSE}
}
]
}
field SFNode Yolk # matter inside
Transform {
children [
Shape {
…
geometry
Quadric { P0 1 0 0 1
P1 -1 0 0 1
P2 0 1 0 0
P3 0 0 1 0
P4 0 1 0 1
P5 0 0 1 1
bboxSize 0.7 0.7 0.4
density 3
solid FALSE}
}
]
}
field SFNode CuttingBox # cutting tool
Transform {
translation 0.5 0 0
children [
Quadric { P0 -1 0 0 1
P1 1 0 0 1
P2 0 1 0 0
P3 0 0 1 0
P4 0 1 0 0
P5 0 0 1 0
bboxSize 1 1 1
density 4
solid FALSE}
]
}
directOutput TRUE
4 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 4 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
url "vrmlscript:
function initialize(){
Srepout.solidTree = (White + Yolk)- CuttingBox;}
"
}
]
}
with:
# b: egg cut by a box
Group{
children [
# Primary SolidRep
DEF Le_Solid3 SolidRep{
bboxSize 5 5 5
densityList [1 3 4] # choice of densities to display
dual FALSE
}
DEF Le_Script Script{ # Solid Tree definition
field SFNode Srepout USE Le_Solid3
#primitives
field SFNode White # container
Transform {
translation 0 0 0
children [
Shape {
…
geometry
Quadric { P0 1 0 0 1
P1 -1 0 0 1
P2 0 1 0 0
P3 0 0 1 0
P4 0 1 0 1
P5 0 0 1 1
boxSize 1 1.3 0.95
solid FALSE}
}
]
}
field SFNode Yolk # matter inside
Transform {
children [
Shape {
…
geometry
Quadric { P0 1 0 0 1
P1 -1 0 0 1
P2 0 1 0 0
P3 0 0 1 0
P4 0 1 0 1
P5 0 0 1 1
bboxSize 0.7 0.7 0.4
density 3
solid FALSE}
}
]
}
field SFNode CuttingBox # cutting tool
Transform {
translation 0.5 0 0
children [
Quadric { P0 -1 0 0 1
P1 1 0 0 1
P2 0 1 0 0
P3 0 0 1 0
P4 0 1 0 0
P5 0 0 1 0
bboxSize 1 1 1
density 4
solid FALSE}
]
}
directOutput TRUE
url "vrmlscript:
function initialize(){
© ISO/IEC 2005 – All rights reserved 5
---------------------- Page: 5 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
Srepout.solidTree = Sdif(Sadd(White,Yolk), CuttingBox);}
"
}
]
}
In subclause 4.5.1, replace:
Two technologies are defined in this subclause:
1. Depth image-based representation comprises the following nodes: DepthImage, SimpleTexture,
PointTexture, and OctreeImage.
2. Light-field mapping comprises the following nodes: LFM_Appearance, LFM_FrameList,
LFM_LightMap, LFM_SurfaceMapList, LFM_ViewMapList, and LFM_BlendList.
with:
The technologie defined in this subclause is called "Depth image-based representation" and comprises the
following nodes: DepthImage, SimpleTexture, PointTexture, and OctreeImage.
In subclause 4.5.3, Light Field Mapping, remove the entire subclause.
In subclause 4.7.1.1.1, Node Interface, replace Types of the SBBone:
SBBone{ #%NDT=SFSBBoneNode
with:
SBBone{ #%NDT=SFSBBoneNode, SF3DNode, SF2DNode
In subclause 4.7.1.1.1, Node Interface, replace default value for the “scale” field:
exposedField SFVec3f scale 0 0 0
with:
exposedField SFVec3f scale 1 1 1
In subclause 4.7.1.2.1, Node Interface, replace Types of the SBSegment:
SBSegment{ #%NDT=SFSBSegmentNode
with:
SBSegment{ #%NDT=SFSBSegmentNode, SF3DNode, SF2DNode
6 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 6 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
In subclause 4.7.1.3.1, Node Interface, replace Types of the SBSite:
SBSite { #%NDT=SFSBSiteNode
with:
SBSite { #%NDT=SFSBSiteNode, SF3DNode, SF2DNode
In subclause 4.7.1.4.1, Node Interface, replace Types of the SBMuscle:
SBMuscle{ #%NDT=SFSBMuscleNode
with:
SBMuscle{ #%NDT=SFSBMuscleNode, SF3DNode, SF2DNode
In subclause 5.4.2.8.1, replace the definition of the bba_object_plane_mask class:
class bba_object_plane_mask() {
bit(5) NumberOfInterpolatedFrames; //NIF
if (isIntra){
bit(5) bba_quant;
bit(3) pow2quant;
bit(10) NumberOfBones; //NSBB
bit(10) NumberOfMuscles;//NSBM
for (bone=1;bone
bit(10) BoneIdentifier; //IDB
bone_mask bnmask();
}
for (ms=1;ms< NumberOfMuscles;ms+){
bit(10) MuscleIdentifier; //IDM
bit(6) NumberControlPoints; //NCP
bit(6) NumberKnots; //NK
muscle_mask msmask();
}
}
with:
class bba_object_plane_mask() {
bit(5) NumberOfInterpolatedFrames; //NIF
if (isIntra){
bit(5) bba_quant;
bit(3) pow2quant;
bit(3) NumberOfControllerTypes;
bit(10) NumberOfBones; //NSBB
bit(10) NumberOfMuscles;//NSBM
for (bone=1;bone
bit(10) BoneIdentifier; //IDB
bone_mask bnmask();
}
for (ms=1;ms< NumberOfMuscles;ms+){
bit(10) MuscleIdentifier; //IDM
bit(6) NumberControlPoints; //NCP
bit(6) NumberKnots; //NK
muscle_mask msmask();
}
}
© ISO/IEC 2005 – All rights reserved 7
---------------------- Page: 7 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
In subclause 5.4.2.8.2, add at the end of the subclause the following sentence:
NumberOfControllerTypes (NMF) - a 3-bit unsigned integer indicating the number of controller types used by
the current version of the BBA stream. As this version of the BBA stream use bones and muscles this variable
should take value « 2 » (two).
In subclause 5.4.2.9.1, replace:
class bone_mask() {
bit(1) IsTranslation_changed;
bit(1) marker_bit;
if (IsTranslation_changed){
bit(1) IsTranslationOnX_changed;
bit(1) IsTranslationOnY_changed;
bit(1) IsTranslationOnZ_changed;
}
bit(1) IsRotation_changed;
bit(1) marker_bit;
if (IsRotation_changed){
bit(1) IsRotationOnAxis1_changed;
bit(1) IsRotationOnAxis2_changed;
bit(1) IsRotationOnAxis3_changed;
}
bit(1) IsScale_changed;
bit(1) marker_bit;
if (IsScale_changed){
bit(1) IsScaleOnX_changed;
bit(1) IsScaleOnY_changed;
bit(1) IsScaleOnZ_changed;
}
bit(1) IsScaleOrientation_changed;
bit(1) marker_bit;
if (IsScaleOrientation_changed){
bit(1) IsScaleOrientation AxisX_changed;
bit(1) IsScaleOrientation AxisY_changed;
bit(1) IsScaleOrientation AxisZ_changed;
bit(1) IsScaleOrientation Value_changed;
}
bit(1) IsCenter_changed;
bit(1) marker_bit;
if (IsCenter_changed){
bit(1) IsCenterOnX_changed;
bit(1) IsCenterOnY_changed;
bit(1) IsCenterOnZ_changed;
}
}
with:
class bone_mask() {
bit(1) IsTranslation_changed;
bit(1) marker_bit;
if (IsTranslation_changed){
bit(1) IsTranslationOnX_changed;
bit(1) IsTranslationOnY_changed;
bit(1) IsTranslationOnZ_changed;
}
bit(1) IsRotation_changed;
bit(1) marker_bit;
if (IsRotation_changed){
bit(1) isQuaternion ;
if (!isQuaternion){
bit(1) IsRotationOnAxis1_changed;
bit(1) IsRotationOnAxis2_changed;
bit(1) IsRotationOnAxis3_changed;
8 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 8 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
}else{
bit(1) IsRotationOnQx_changed;
bit(1) IsRotationOnQy_changed;
bit(1) IsRotationOnQz_changed;
bit(1) IsRotationOnQw_changed;
}
}
bit(1) IsScale_changed;
bit(1) marker_bit;
if (IsScale_changed){
bit(1) IsScaleOnX_changed;
bit(1) IsScaleOnY_changed;
bit(1) IsScaleOnZ_changed;
}
bit(1) IsScaleOrientation_changed;
bit(1) marker_bit;
if (IsScaleOrientation_changed){
bit(1) IsScaleOrientation AxisX_changed;
bit(1) IsScaleOrientation AxisY_changed;
bit(1) IsScaleOrientation AxisZ_changed;
bit(1) IsScaleOrientation Value_changed;
}
bit(1) IsCenter_changed;
bit(1) marker_bit;
if (IsCenter_changed){
bit(1) IsCenterOnX_changed;
bit(1) IsCenterOnY_changed;
bit(1) IsCenterOnZ_changed;
}
}
In subclause 5.4.2.12.2, replace:
NUM_SBCs=NSBB*16+NSBM*(NCP*3+NCP+NK)
with:
NSBB NSBM
NUM _SBCs= c + (3*NCP + NCP + NK ),
∑ bn ∑ ms ms ms
bn=1 ms=1
with
16,if isQuaternion= 0
c = ,
bn
17,if isQuaternion= 1
is the number of the components for a bone transform.
In subclauses 5.1.1.2.1, Syntax of the Wavelet_Mesh_Object, replace:
class Wavelet_Mesh_Object {
bit(1) WMOL;
bit(1) isInLocalCoordinates;
if (WMOL && WMDecoderConfig.hasScaleCoeff)
Wavelet_Mesh_Object_Scale_Coeff Coefficients;
ReadZT ZeroTree;
}
with:
class Wavelet_Mesh_Object {
int(1) isInBand;
if (isInBand)
© ISO/IEC 2005 – All rights reserved 9
---------------------- Page: 9 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
WMDecoderConfig WMDecoderConfig;
bit(1) WMOL;
bit(1) isInLocalCoordinates;
if (WMOL && WMDecoderConfig.hasScaleCoeff)
Wavelet_Mesh_Object_Scale_Coeff Coefficients;
ReadZT ZeroTree;
}
In subclause 5.2.1, replace:
The MeshGrid stream will, in general, consist of three parts: (1) a connectivity-wireframe description, (2) a
reference-grid description, and (3) a vertices-refinement description (i.e. refining the position of the vertices
relative to the reference-grid – the offsets). A minimal stream may, however, only consist of the description of
the connectivity-wireframe, which is mandatory for every stream. All of these three parts can be encoded at
each resolution level, either as one single region of interest (ROI) or in separate ROIs, if view-dependent
decoding is needed.
with:
The MeshGrid stream has a modular structure consisting of a sequence of parts. There are several types of
parts with different semantics, each one identified by a unique tag. All part types are optional, and several parts
of the same type can be present in the stream, but their order is not imposed. The following parts of the
MeshGrid stream are encoded at each resolution level, either as one single region of interest (ROI) or in
separate ROIs, if view-dependent decoding is needed: (1) a connectivity-wireframe description, (2) a
reference-grid description, and (3) a vertices-refinement description (i.e. refining the position of the vertices
relative to the reference-grid – the offsets).
In subclause 5.2.2.1, Global Constants, remove:
const unsigned char MG_SIG = 0x10; The signature of the MeshGrid stream
In subclause 5.2.2.1, Global Constants, replace:
READ_REPOSITION_BITS No default value specified for the reposition bits
with:
const unsigned int READ_REPOSITION_BITS No default value specified for the reposition bits
= 2
In subclause 5.2.2.2.1, Syntax for the MeshGridDecoderConfig, replace the entire section with:
class MeshGridDecoderConfig extends AFXExtDescriptor: bit(8) tag=1{
// the max number of resolution levels
unsigned int totalNumLevelsMesh;
// number of resolution levels specified for each u,v,w direction
// of the reference-grid
ParsableUVW nLevelsMesh(LEVEL_BITS);
totalNumLevelsMesh = max(nLevelsMesh.u, max(nLevelsMesh.v, nLevelsMesh.w));
// number of slices (reference surfaces) corresponding to the last
// resolution level, in the u,v,w directions;
ParsableUVW nSlices(SLICES_BITS);
// flags
10 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 10 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
bit (1) hasConnectivityInfo;
bit (1) hasRefineInfo;
bit (1) hasRepositionInfo;
bit (1) hasGridInfo;
// reserved
bit(9) attributes = 0;
// type of homogeneous mesh
unsigned int(2) meshType;
if (meshType == QUADRI_MESH) {
if (hasConnectivityInfo) {
// connectivity bits and uniform quads splitting flags
bit (1) sameBorderOrientation;
bit (1) uniformSplit;
}
else {
unsigned int sameBorderOrientation = 1;
unsigned int uniformSplit = 1;
}
if (nSlices.u == 1 || nSlices.v == 1 || nSlices.w == 1)
GetValue offsetAmplitude;
}
// the choices for cyclic mesh
bit (3) cyclicMode;
// number of refine bits vertex
RefineVertexDescriptor refine;
// filter type for grid coding
unsigned int(FILTER_BITS) filterType;
// scale values for the x,y,z encoded grid coordinates
// minimum scale factor is MIN_SCALE
ScaleXYZ gridScale(FIELD_BITS);
// the grid corners
GridCorners gridCorner;
}
In subclause 5.2.2.2.2, Semantics for the MeshGridDecoderConfig, replace the entire section with:
The MeshGridDecoderConfig class initializes the MeshGrid decoder. It (1) parses the resolution levels of the
mesh (nLevelsMesh) for the {u,v,w} directions, encoded on LEVEL_BITS, with acceptable values for
31
nLevelsMesh.u, nLevelsMesh.v and nLevelsMesh.w, lying in the range [1, 2 -1], (2) computes the maximum
number of resolution levels totalNumLevelsMesh, (3) parses the number of slices (nSlices) {S ,S ,S }
U V W
corresponding to the last resolution level of the reference-grid, specified for the {u,v,w} directions, with
31
acceptable values for nSlices.u, nSlices.v and nSlices.w, lying in the range [1, 2 -1]. It reads 5 values: (4) 1-
bit flag hasConnectivityInfo, (5) 1-bit flag hasRefineInfo, (6) 1-bit flag hasRepositionInfo, (7) 1-bit flag
hasGridInfo, and (8) 9-bit flag attributes.
© ISO/IEC 2005 – All rights reserved 11
---------------------- Page: 11 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
Table 6 — Meaning of the flags
Flag Meaning
hasConnectivityInfo Boolean flag:
1. When set to ‘1’ it indicates that the parts identified by the MGMeshInfoTag,
MGMeshConnectivityROInfoTag and MGMeshConnectivityInfoTag tags can be
present in the stream at any resolution level description.
2. When set to ‘0’ it implies that the parts identified by the
MGMeshConnectivityROInfoTag and MGMeshConnectivityInfoTag tags are not
present in the stream. If the value of the hasRefineInfo flag is ‘1’, then the part
identified by the MGMeshInfoTag tag can be present in the stream only for the first
resolution level description. If the meshType parameter defined in Table 7 has the
value ‘2’ then a default quadrilateral mesh is generated as explained in subclause
5.2.3.4.
hasRefineInfo Boolean flag:
1. When set to ‘1’ it indicates that the parts identified by the MGMeshInfoTag,
MGVerticesRefinementROIInfoTag and MGVerticesRefinementInfoTag tags can be
present in the stream at any resolution level description. If the value of the
hasConnectivityInfo flag is ‘0’ these parts can only be available for the first resolution
level description, as explained in subclause 5.2.3.4.
2. When set to ‘0’ it implies that the parts identified by the
MGVerticesRefinementROIInfoTag and MGVerticesRefinementInfoTag tags are not
present in the stream. The part identified by the MGMeshInfoTag tag can be present
in the stream at any resolution level description only if the value of the
hasConnectivityInfo flag is set to ‘1’.
hasRepositionInfo Boolean flag:
1. It can be set to ‘1’ only if the hasConnectivityInfo flag is also ‘1’. When equal to ‘1’
it indicates that the parts identified by the MGMeshInfoTag,
MGVerticesRepositionROIInfoTag and MGVerticesRepositionInfoTag tags can be
present in the stream at any resolution level description except the last resolution
level.
2. When set to ‘0’ it implies that the parts identified by the
MGVerticesRepositionROIInfoTag and MGVerticesRepositionInfoTag tags are not
present in the stream. The part identified by the MGMeshInfoTag tag can be present
in the stream at any resolution level description only if the value of one of the
following two flags is set to ‘1’: hasConnectivityInfo, hasRefineInfo.
hasGridInfo Boolean flag:
1. When set to ‘1’ it indicates that the parts identified by the MGGridInfoTag,
MGGridCoefficientsROIInfoTag and MGGridCoefficientsInfoTag tags can be present
in the stream at any resolution level description.
2. When set to ‘0’ it implies that the parts identified by the MGGridInfoTag,
MGGridCoefficientsROIInfoTag and MGGridCoefficientsInfoTag tags are not present
in the stream. In this case the reference-grid points are uniformly distributed and
their coordinates are computed as a linear interpolation between the eight grid
corners parsed by GridCorners in the MeshGridDecoderConfig class.
attributes A 9-bit flag reserved for future use.
uniformSplit Boolean flag:
1. When set to ‘1’ it indicates that the stream contains a quadrilateral mesh allowing
to obtain the connectivity-wireframe for the higher resolution levels by uniformly
splitting each quad recursively into four sub-quads, as illustrated in Figure 40. The
parts identified by the MGMeshInfoTag, MGMeshConnectivityROInfoTag and
MGMeshConnectivityInfoTag tags are present in the stream only at the first
resolution level description.
2. When set to ‘0’ the parts identified by the MGMeshInfoTag,
MGMeshConnectivityROInfoTag and MGMeshConnectivityInfoTag tags can be
present in the stream at any resolution level description.
Further the MeshGridDecoderConfig class parses (9) the type of the mesh (meshType) as explained in
Table 7.
12 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 12 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
Table 7 — Encoding of the mesh type (meshType)
Value Meaning
0 GENERIC_MESH: Non-homogeneous mesh that may
consist of polygons ranging from triangles to heptagons.
1 TRI_MESH: Homogeneous triangular mesh
2 QUADRI_MESH: Homogeneous quadrilateral mesh
3 HEXA_MESH: Homogeneous hexagonal mesh
If meshType is quadrilateral (QUADRI_MESH) than (10) a 1-bit flag (sameBorderOrientation) defines the
number of bits used to store the connectivity links between the vertices, as explained in subclause 5.2.3.1.1,
and defined in Table 8, and (11) another 1-bit flag (uniformSplit) indicates the type of multiresolution as
explained in subclause 5.2.3.4 and Table 6. If the number of slices (nSlices) in any of the {u,v,w} directions is
equal to ‘1’, i.e. the reference-grid consists of one layer of points, then (12) the variable length variable
offsetAmplitude defines the maximum value of the offsets as explained in subclause 4.3.4.3.2.
Table 8 — Encoding of the sameBorderOrientation flag
Value Meaning
0 2-bits are used to encode a connectivity link between two
vertices; it is the general case.
1 1-bit is used to encode a connectivity link between two
vertices; it is a particular case which may occur for
homogeneous quadrilateral meshes.
Further the MeshGridDecoderConfig class parses (13) the cyclicMode variable defined in Table COR1.1 that
specifies the cyclic behaviour of the mesh, as explained in subclause 5.2.3.1.3, (14) the description of the
vertices’ refinement bits (refine), (15) the type of filter used in the wavelet transform (filterType), encoded on
FILTER_TYPE bits, (16) the scaling factor for the {x,y,z} grid coefficients (gridScale), encoded on FIELD_BITS
bits, (17) the {x,y,z} coordinates of the 8 corners of the reference-grid (gridCorner).
Table COR1.1 — Encoding of the cyclicMode variable
Value Meaning
0 general case non-cyclic mesh.
1 cyclic mesh in the “U” direction.
2 cyclic mesh in the “V” direction.
3 cyclic mesh in the “UV” directions.
4 cyclic mesh in the “W” direction.
5 cyclic mesh in the “UW” directions.
6 cyclic mesh in the “VW” directions.
7 reserved
In subclause 5.2.2.4.2, Semantics for the MeshGridCommand, replace the entire section with:
This is an abstract base class for the different types of command units of the MeshGrid stream. This class is
extended by the classes identified by the class tags defined in Table 9.
Table 9 — MeshGrid command table
Tag value Tag name Description
0x00 Forbidden
0x01 MGInfoTag Tag for the MeshGrid stream coding information.
0x02 MGMeshInfoTag Tag for the mesh coding information for a
specified mesh resolution level.
0x03 MGGridInfoTag Tag for grid coding information for a specified grid
resolution level.
0x04 MGMeshConnectivityROIInfoTag Tag for mesh connectivity information for a
specified mesh resolution level and regions of
interest (ROIs) list.
© ISO/IEC 2005 – All rights reserved 13
---------------------- Page: 13 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
0x05 MGMeshConnectivityInfoTag Tag for mesh connectivity information for a
specified mesh resolution level.
0x06 MGVerticesRepositionROIInfoTag Tag for vertices’ reposition bits (single bit-plane)
for a specified mesh resolution level and regions of
interest (ROIs) list.
0x07 MGVerticesRepositionInfoTag Tag for vertices’ reposition bits (single bit-plane)
for a specified mesh resolution level.
0x08 MGVerticesRefinementROIInfoTag Tag for refinement bit-planes (the offset) for a
specified mesh resolution level and regions of
interest (ROIs) list.
0x09 MGVerticesRefinementInfoTag Tag for refinement bit-planes (the offset) for a
specified mesh resolution level.
0x10 MGGridCoefficientsROIInfoTag Tag for wavelet coefficients for a specified grid
resolution level and tiles list.
0x11 MGGridCoefficientsInfoTag Tag for wavelet coefficients for a specified grid
resolution level.
0x12- Reserved for ISO use
0xFE
0xFF Forbidden
In subclause 5.2.2.6.1, Syntax for the MGMeshDescriptor , replace the entire section with:
class MGMeshDescriptor(MeshGridDecoderConfig mgd) extends MGLevelDescriptor: bit(8)
tag=MGMeshInfoTag
{
bool bLastLevel = resolutionLevel.value == mgd.totalNumLevelsMesh – 1;
bool bReposition = mgd.hasRepositionInfo && !bLastLevel;
bool bRefine = mgd.hasRefineInfo && (mgd.refine.bFull || bLastLevel);
MeshDescriptor mdl[[resolutionLevel.value]](mgd.hasConnectivityInfo, bReposition, bRefine);
}
In subclause 5.2.2.16.1, Syntax for the MeshDescriptor, replace the entire section with:
// Mesh Description for level
aligned(8) class MeshDescriptor(bool hasConnectivity, bool hasReposition, bool hasRefine) {
// some member variables
unsigned int nBitsIndex, totalNumROIs;
// retrieve the number of ROIs
ParsableUVW nROIs(ROI_BITS);
totalNumROIs = nROIs.u * nROIs.v * nROIs.w;
// if the total number of ROIs is 0, than no mesh information
// is available for the current resolution level
if (totalNumROIs == 0) return;
if (hasReposition) {
// retrieve the reposition bits flag
bit (2) repositionBits;
}
if (hasConnectivity) {
// number of bits for the ROI indices fields
nBitsIndex = (int) floor(log (totalNumROIs) + 1);
2
14 © ISO/IEC 2005 – All rights reserved
---------------------- Page: 14 ----------------------
ISO/IEC 14496-16:2004/Cor.1:2005(E)
// number of bits for the counter fields
unsigned int(VERTS_BITS) nBitsConnectivity;
}
if (hasReposition && repositionBits == READ_REPOSITION_BITS) {
unsigned int(VERTS_BITS) nBitsReposition;
}
if (hasRefine) {
unsigned int(VERTS_BITS) nBitsRefine;
}
}
In subclause 5.2.2.16.2, Semantics for the MeshDescriptor, replace the entire section with:
The MeshDescriptor class parses the coding information for a specified mesh resolution level. It (1) retrieves
the number of ROIs (nROIs) for each {u,v,w} direction, (2) computes the total number of ROIs (totalNumROIs).
If totalNumROIs is equal to ‘0’ than no mesh connectivity, reposition and refinement data is available for the
current resolution level. Further, if the hasReposition flag is set to ‘1’ (the hasRepositionInfo flag from the
MeshGridDecoderConfig is set to ‘1’ and the specified mesh resolution level is not the last) it reads (3) a 2-bit
flag (repositionBits), which indicates the default value of the vertices’ reposition bits or their presence in the
stream as given in Table 10. When a default value is specified, the reposition bits are not present in the stream
for the specified resolution level.
Ta
...
Questions, Comments and Discussion
Ask us and Technical Secretary will try to provide an answer. You can facilitate discussion about the standard in here.