xref: /aosp_15_r20/external/libwebm/webm_parser/src/ancestory.cc (revision 103e46e4cd4b6efcf6001f23fa8665fb110abf8d)
1*103e46e4SHarish Mahendrakar // Copyright (c) 2016 The WebM project authors. All Rights Reserved.
2*103e46e4SHarish Mahendrakar //
3*103e46e4SHarish Mahendrakar // Use of this source code is governed by a BSD-style license
4*103e46e4SHarish Mahendrakar // that can be found in the LICENSE file in the root of the source
5*103e46e4SHarish Mahendrakar // tree. An additional intellectual property rights grant can be found
6*103e46e4SHarish Mahendrakar // in the file PATENTS.  All contributing project authors may
7*103e46e4SHarish Mahendrakar // be found in the AUTHORS file in the root of the source tree.
8*103e46e4SHarish Mahendrakar #include "src/ancestory.h"
9*103e46e4SHarish Mahendrakar 
10*103e46e4SHarish Mahendrakar #include "webm/id.h"
11*103e46e4SHarish Mahendrakar 
12*103e46e4SHarish Mahendrakar namespace webm {
13*103e46e4SHarish Mahendrakar 
ById(Id id,Ancestory * ancestory)14*103e46e4SHarish Mahendrakar bool Ancestory::ById(Id id, Ancestory* ancestory) {
15*103e46e4SHarish Mahendrakar   // These lists of IDs were generated and must match the switch statement and
16*103e46e4SHarish Mahendrakar   // have static storage duration. They were generated as follows:
17*103e46e4SHarish Mahendrakar   //
18*103e46e4SHarish Mahendrakar   // 1. List all the master elements:
19*103e46e4SHarish Mahendrakar   //      kEbml
20*103e46e4SHarish Mahendrakar   //      kSegment
21*103e46e4SHarish Mahendrakar   //      kSeekHead
22*103e46e4SHarish Mahendrakar   //      kSeek
23*103e46e4SHarish Mahendrakar   //      kInfo
24*103e46e4SHarish Mahendrakar   //      kCluster
25*103e46e4SHarish Mahendrakar   //      kBlockGroup
26*103e46e4SHarish Mahendrakar   //      kBlockAdditions
27*103e46e4SHarish Mahendrakar   //      kBlockMore
28*103e46e4SHarish Mahendrakar   //      kSlices
29*103e46e4SHarish Mahendrakar   //      kTimeSlice
30*103e46e4SHarish Mahendrakar   //      etc.
31*103e46e4SHarish Mahendrakar   //
32*103e46e4SHarish Mahendrakar   // 2. Now prefix each entry with its full ancestory:
33*103e46e4SHarish Mahendrakar   //      kEbml
34*103e46e4SHarish Mahendrakar   //      kSegment
35*103e46e4SHarish Mahendrakar   //      kSegment, kSeekHead
36*103e46e4SHarish Mahendrakar   //      kSegment, kSeekHead, kSeek
37*103e46e4SHarish Mahendrakar   //      kSegment, kInfo
38*103e46e4SHarish Mahendrakar   //      kSegment, kCluster
39*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup
40*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup, kBlockAdditions
41*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup, kBlockAdditions, kBlockMore
42*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup, kSlices
43*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup, kSlices, kTimeSlice
44*103e46e4SHarish Mahendrakar   //      etc.
45*103e46e4SHarish Mahendrakar   //
46*103e46e4SHarish Mahendrakar   // 3. Now remove entries that are just subsets of others:
47*103e46e4SHarish Mahendrakar   //      kEbml
48*103e46e4SHarish Mahendrakar   //      kSegment, kSeekHead, kSeek
49*103e46e4SHarish Mahendrakar   //      kSegment, kInfo
50*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup, kBlockAdditions, kBlockMore
51*103e46e4SHarish Mahendrakar   //      kSegment, kCluster, kBlockGroup, kSlices, kTimeSlice
52*103e46e4SHarish Mahendrakar   //      etc.
53*103e46e4SHarish Mahendrakar   static constexpr Id kEbmlAncestory[] = {
54*103e46e4SHarish Mahendrakar       Id::kEbml,
55*103e46e4SHarish Mahendrakar   };
56*103e46e4SHarish Mahendrakar   static constexpr Id kSeekAncestory[] = {
57*103e46e4SHarish Mahendrakar       Id::kSegment,
58*103e46e4SHarish Mahendrakar       Id::kSeekHead,
59*103e46e4SHarish Mahendrakar       Id::kSeek,
60*103e46e4SHarish Mahendrakar   };
61*103e46e4SHarish Mahendrakar   static constexpr Id kInfoAncestory[] = {
62*103e46e4SHarish Mahendrakar       Id::kSegment,
63*103e46e4SHarish Mahendrakar       Id::kInfo,
64*103e46e4SHarish Mahendrakar   };
65*103e46e4SHarish Mahendrakar   static constexpr Id kBlockMoreAncestory[] = {
66*103e46e4SHarish Mahendrakar       Id::kSegment,        Id::kCluster,   Id::kBlockGroup,
67*103e46e4SHarish Mahendrakar       Id::kBlockAdditions, Id::kBlockMore,
68*103e46e4SHarish Mahendrakar   };
69*103e46e4SHarish Mahendrakar   static constexpr Id kTimeSliceAncestory[] = {
70*103e46e4SHarish Mahendrakar       Id::kSegment, Id::kCluster, Id::kBlockGroup, Id::kSlices, Id::kTimeSlice,
71*103e46e4SHarish Mahendrakar   };
72*103e46e4SHarish Mahendrakar   static constexpr Id kVideoAncestory[] = {
73*103e46e4SHarish Mahendrakar       Id::kSegment,
74*103e46e4SHarish Mahendrakar       Id::kTracks,
75*103e46e4SHarish Mahendrakar       Id::kTrackEntry,
76*103e46e4SHarish Mahendrakar       Id::kVideo,
77*103e46e4SHarish Mahendrakar   };
78*103e46e4SHarish Mahendrakar   static constexpr Id kAudioAncestory[] = {
79*103e46e4SHarish Mahendrakar       Id::kSegment,
80*103e46e4SHarish Mahendrakar       Id::kTracks,
81*103e46e4SHarish Mahendrakar       Id::kTrackEntry,
82*103e46e4SHarish Mahendrakar       Id::kAudio,
83*103e46e4SHarish Mahendrakar   };
84*103e46e4SHarish Mahendrakar   static constexpr Id kContentEncAesSettingsAncestory[] = {
85*103e46e4SHarish Mahendrakar       Id::kSegment,
86*103e46e4SHarish Mahendrakar       Id::kTracks,
87*103e46e4SHarish Mahendrakar       Id::kTrackEntry,
88*103e46e4SHarish Mahendrakar       Id::kContentEncodings,
89*103e46e4SHarish Mahendrakar       Id::kContentEncoding,
90*103e46e4SHarish Mahendrakar       Id::kContentEncryption,
91*103e46e4SHarish Mahendrakar       Id::kContentEncAesSettings,
92*103e46e4SHarish Mahendrakar   };
93*103e46e4SHarish Mahendrakar   static constexpr Id kCueTrackPositionsAncestory[] = {
94*103e46e4SHarish Mahendrakar       Id::kSegment,
95*103e46e4SHarish Mahendrakar       Id::kCues,
96*103e46e4SHarish Mahendrakar       Id::kCuePoint,
97*103e46e4SHarish Mahendrakar       Id::kCueTrackPositions,
98*103e46e4SHarish Mahendrakar   };
99*103e46e4SHarish Mahendrakar   static constexpr Id kChapterDisplayAncestory[] = {
100*103e46e4SHarish Mahendrakar       Id::kSegment,     Id::kChapters,       Id::kEditionEntry,
101*103e46e4SHarish Mahendrakar       Id::kChapterAtom, Id::kChapterDisplay,
102*103e46e4SHarish Mahendrakar   };
103*103e46e4SHarish Mahendrakar   static constexpr Id kTargetsAncestory[] = {
104*103e46e4SHarish Mahendrakar       Id::kSegment,
105*103e46e4SHarish Mahendrakar       Id::kTags,
106*103e46e4SHarish Mahendrakar       Id::kTag,
107*103e46e4SHarish Mahendrakar       Id::kTargets,
108*103e46e4SHarish Mahendrakar   };
109*103e46e4SHarish Mahendrakar   static constexpr Id kSimpleTagAncestory[] = {
110*103e46e4SHarish Mahendrakar       Id::kSegment,
111*103e46e4SHarish Mahendrakar       Id::kTags,
112*103e46e4SHarish Mahendrakar       Id::kTag,
113*103e46e4SHarish Mahendrakar       Id::kSimpleTag,
114*103e46e4SHarish Mahendrakar   };
115*103e46e4SHarish Mahendrakar 
116*103e46e4SHarish Mahendrakar   switch (id) {
117*103e46e4SHarish Mahendrakar     case Id::kEbmlVersion:
118*103e46e4SHarish Mahendrakar     case Id::kEbmlReadVersion:
119*103e46e4SHarish Mahendrakar     case Id::kEbmlMaxIdLength:
120*103e46e4SHarish Mahendrakar     case Id::kEbmlMaxSizeLength:
121*103e46e4SHarish Mahendrakar     case Id::kDocType:
122*103e46e4SHarish Mahendrakar     case Id::kDocTypeVersion:
123*103e46e4SHarish Mahendrakar     case Id::kDocTypeReadVersion:
124*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kEbmlAncestory, 1);
125*103e46e4SHarish Mahendrakar       return true;
126*103e46e4SHarish Mahendrakar 
127*103e46e4SHarish Mahendrakar     case Id::kSeekHead:
128*103e46e4SHarish Mahendrakar     case Id::kInfo:
129*103e46e4SHarish Mahendrakar     case Id::kCluster:
130*103e46e4SHarish Mahendrakar     case Id::kTracks:
131*103e46e4SHarish Mahendrakar     case Id::kCues:
132*103e46e4SHarish Mahendrakar     case Id::kChapters:
133*103e46e4SHarish Mahendrakar     case Id::kTags:
134*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kSeekAncestory, 1);
135*103e46e4SHarish Mahendrakar       return true;
136*103e46e4SHarish Mahendrakar 
137*103e46e4SHarish Mahendrakar     case Id::kSeek:
138*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kSeekAncestory, 2);
139*103e46e4SHarish Mahendrakar       return true;
140*103e46e4SHarish Mahendrakar 
141*103e46e4SHarish Mahendrakar     case Id::kSeekId:
142*103e46e4SHarish Mahendrakar     case Id::kSeekPosition:
143*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kSeekAncestory, 3);
144*103e46e4SHarish Mahendrakar       return true;
145*103e46e4SHarish Mahendrakar 
146*103e46e4SHarish Mahendrakar     case Id::kTimecodeScale:
147*103e46e4SHarish Mahendrakar     case Id::kDuration:
148*103e46e4SHarish Mahendrakar     case Id::kDateUtc:
149*103e46e4SHarish Mahendrakar     case Id::kTitle:
150*103e46e4SHarish Mahendrakar     case Id::kMuxingApp:
151*103e46e4SHarish Mahendrakar     case Id::kWritingApp:
152*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kInfoAncestory, 2);
153*103e46e4SHarish Mahendrakar       return true;
154*103e46e4SHarish Mahendrakar 
155*103e46e4SHarish Mahendrakar     case Id::kTimecode:
156*103e46e4SHarish Mahendrakar     case Id::kPrevSize:
157*103e46e4SHarish Mahendrakar     case Id::kSimpleBlock:
158*103e46e4SHarish Mahendrakar     case Id::kBlockGroup:
159*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kBlockMoreAncestory, 2);
160*103e46e4SHarish Mahendrakar       return true;
161*103e46e4SHarish Mahendrakar 
162*103e46e4SHarish Mahendrakar     case Id::kBlock:
163*103e46e4SHarish Mahendrakar     case Id::kBlockVirtual:
164*103e46e4SHarish Mahendrakar     case Id::kBlockAdditions:
165*103e46e4SHarish Mahendrakar     case Id::kBlockDuration:
166*103e46e4SHarish Mahendrakar     case Id::kReferenceBlock:
167*103e46e4SHarish Mahendrakar     case Id::kDiscardPadding:
168*103e46e4SHarish Mahendrakar     case Id::kSlices:
169*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kBlockMoreAncestory, 3);
170*103e46e4SHarish Mahendrakar       return true;
171*103e46e4SHarish Mahendrakar 
172*103e46e4SHarish Mahendrakar     case Id::kBlockMore:
173*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kBlockMoreAncestory, 4);
174*103e46e4SHarish Mahendrakar       return true;
175*103e46e4SHarish Mahendrakar 
176*103e46e4SHarish Mahendrakar     case Id::kBlockAddId:
177*103e46e4SHarish Mahendrakar     case Id::kBlockAdditional:
178*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kBlockMoreAncestory, 5);
179*103e46e4SHarish Mahendrakar       return true;
180*103e46e4SHarish Mahendrakar 
181*103e46e4SHarish Mahendrakar     case Id::kTimeSlice:
182*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kTimeSliceAncestory, 4);
183*103e46e4SHarish Mahendrakar       return true;
184*103e46e4SHarish Mahendrakar 
185*103e46e4SHarish Mahendrakar     case Id::kLaceNumber:
186*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kTimeSliceAncestory, 5);
187*103e46e4SHarish Mahendrakar       return true;
188*103e46e4SHarish Mahendrakar 
189*103e46e4SHarish Mahendrakar     case Id::kTrackEntry:
190*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kVideoAncestory, 2);
191*103e46e4SHarish Mahendrakar       return true;
192*103e46e4SHarish Mahendrakar 
193*103e46e4SHarish Mahendrakar     case Id::kTrackNumber:
194*103e46e4SHarish Mahendrakar     case Id::kTrackUid:
195*103e46e4SHarish Mahendrakar     case Id::kTrackType:
196*103e46e4SHarish Mahendrakar     case Id::kFlagEnabled:
197*103e46e4SHarish Mahendrakar     case Id::kFlagDefault:
198*103e46e4SHarish Mahendrakar     case Id::kFlagForced:
199*103e46e4SHarish Mahendrakar     case Id::kFlagLacing:
200*103e46e4SHarish Mahendrakar     case Id::kDefaultDuration:
201*103e46e4SHarish Mahendrakar     case Id::kName:
202*103e46e4SHarish Mahendrakar     case Id::kLanguage:
203*103e46e4SHarish Mahendrakar     case Id::kCodecId:
204*103e46e4SHarish Mahendrakar     case Id::kCodecPrivate:
205*103e46e4SHarish Mahendrakar     case Id::kCodecName:
206*103e46e4SHarish Mahendrakar     case Id::kCodecDelay:
207*103e46e4SHarish Mahendrakar     case Id::kSeekPreRoll:
208*103e46e4SHarish Mahendrakar     case Id::kVideo:
209*103e46e4SHarish Mahendrakar     case Id::kAudio:
210*103e46e4SHarish Mahendrakar     case Id::kContentEncodings:
211*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kVideoAncestory, 3);
212*103e46e4SHarish Mahendrakar       return true;
213*103e46e4SHarish Mahendrakar 
214*103e46e4SHarish Mahendrakar     case Id::kFlagInterlaced:
215*103e46e4SHarish Mahendrakar     case Id::kStereoMode:
216*103e46e4SHarish Mahendrakar     case Id::kAlphaMode:
217*103e46e4SHarish Mahendrakar     case Id::kPixelWidth:
218*103e46e4SHarish Mahendrakar     case Id::kPixelHeight:
219*103e46e4SHarish Mahendrakar     case Id::kPixelCropBottom:
220*103e46e4SHarish Mahendrakar     case Id::kPixelCropTop:
221*103e46e4SHarish Mahendrakar     case Id::kPixelCropLeft:
222*103e46e4SHarish Mahendrakar     case Id::kPixelCropRight:
223*103e46e4SHarish Mahendrakar     case Id::kDisplayWidth:
224*103e46e4SHarish Mahendrakar     case Id::kDisplayHeight:
225*103e46e4SHarish Mahendrakar     case Id::kDisplayUnit:
226*103e46e4SHarish Mahendrakar     case Id::kAspectRatioType:
227*103e46e4SHarish Mahendrakar     case Id::kFrameRate:
228*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kVideoAncestory, 4);
229*103e46e4SHarish Mahendrakar       return true;
230*103e46e4SHarish Mahendrakar 
231*103e46e4SHarish Mahendrakar     case Id::kSamplingFrequency:
232*103e46e4SHarish Mahendrakar     case Id::kOutputSamplingFrequency:
233*103e46e4SHarish Mahendrakar     case Id::kChannels:
234*103e46e4SHarish Mahendrakar     case Id::kBitDepth:
235*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kAudioAncestory, 4);
236*103e46e4SHarish Mahendrakar       return true;
237*103e46e4SHarish Mahendrakar 
238*103e46e4SHarish Mahendrakar     case Id::kContentEncoding:
239*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kContentEncAesSettingsAncestory, 4);
240*103e46e4SHarish Mahendrakar       return true;
241*103e46e4SHarish Mahendrakar 
242*103e46e4SHarish Mahendrakar     case Id::kContentEncodingOrder:
243*103e46e4SHarish Mahendrakar     case Id::kContentEncodingScope:
244*103e46e4SHarish Mahendrakar     case Id::kContentEncodingType:
245*103e46e4SHarish Mahendrakar     case Id::kContentEncryption:
246*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kContentEncAesSettingsAncestory, 5);
247*103e46e4SHarish Mahendrakar       return true;
248*103e46e4SHarish Mahendrakar 
249*103e46e4SHarish Mahendrakar     case Id::kContentEncAlgo:
250*103e46e4SHarish Mahendrakar     case Id::kContentEncKeyId:
251*103e46e4SHarish Mahendrakar     case Id::kContentEncAesSettings:
252*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kContentEncAesSettingsAncestory, 6);
253*103e46e4SHarish Mahendrakar       return true;
254*103e46e4SHarish Mahendrakar 
255*103e46e4SHarish Mahendrakar     case Id::kAesSettingsCipherMode:
256*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kContentEncAesSettingsAncestory, 7);
257*103e46e4SHarish Mahendrakar       return true;
258*103e46e4SHarish Mahendrakar 
259*103e46e4SHarish Mahendrakar     case Id::kCuePoint:
260*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kCueTrackPositionsAncestory, 2);
261*103e46e4SHarish Mahendrakar       return true;
262*103e46e4SHarish Mahendrakar 
263*103e46e4SHarish Mahendrakar     case Id::kCueTime:
264*103e46e4SHarish Mahendrakar     case Id::kCueTrackPositions:
265*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kCueTrackPositionsAncestory, 3);
266*103e46e4SHarish Mahendrakar       return true;
267*103e46e4SHarish Mahendrakar 
268*103e46e4SHarish Mahendrakar     case Id::kCueTrack:
269*103e46e4SHarish Mahendrakar     case Id::kCueClusterPosition:
270*103e46e4SHarish Mahendrakar     case Id::kCueRelativePosition:
271*103e46e4SHarish Mahendrakar     case Id::kCueDuration:
272*103e46e4SHarish Mahendrakar     case Id::kCueBlockNumber:
273*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kCueTrackPositionsAncestory, 4);
274*103e46e4SHarish Mahendrakar       return true;
275*103e46e4SHarish Mahendrakar 
276*103e46e4SHarish Mahendrakar     case Id::kEditionEntry:
277*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kChapterDisplayAncestory, 2);
278*103e46e4SHarish Mahendrakar       return true;
279*103e46e4SHarish Mahendrakar 
280*103e46e4SHarish Mahendrakar     case Id::kChapterAtom:
281*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kChapterDisplayAncestory, 3);
282*103e46e4SHarish Mahendrakar       return true;
283*103e46e4SHarish Mahendrakar 
284*103e46e4SHarish Mahendrakar     case Id::kChapterUid:
285*103e46e4SHarish Mahendrakar     case Id::kChapterStringUid:
286*103e46e4SHarish Mahendrakar     case Id::kChapterTimeStart:
287*103e46e4SHarish Mahendrakar     case Id::kChapterTimeEnd:
288*103e46e4SHarish Mahendrakar     case Id::kChapterDisplay:
289*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kChapterDisplayAncestory, 4);
290*103e46e4SHarish Mahendrakar       return true;
291*103e46e4SHarish Mahendrakar 
292*103e46e4SHarish Mahendrakar     case Id::kChapString:
293*103e46e4SHarish Mahendrakar     case Id::kChapLanguage:
294*103e46e4SHarish Mahendrakar     case Id::kChapCountry:
295*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kChapterDisplayAncestory, 5);
296*103e46e4SHarish Mahendrakar       return true;
297*103e46e4SHarish Mahendrakar 
298*103e46e4SHarish Mahendrakar     case Id::kTag:
299*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kTargetsAncestory, 2);
300*103e46e4SHarish Mahendrakar       return true;
301*103e46e4SHarish Mahendrakar 
302*103e46e4SHarish Mahendrakar     case Id::kTargets:
303*103e46e4SHarish Mahendrakar     case Id::kSimpleTag:
304*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kTargetsAncestory, 3);
305*103e46e4SHarish Mahendrakar       return true;
306*103e46e4SHarish Mahendrakar 
307*103e46e4SHarish Mahendrakar     case Id::kTargetTypeValue:
308*103e46e4SHarish Mahendrakar     case Id::kTargetType:
309*103e46e4SHarish Mahendrakar     case Id::kTagTrackUid:
310*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kTargetsAncestory, 4);
311*103e46e4SHarish Mahendrakar       return true;
312*103e46e4SHarish Mahendrakar 
313*103e46e4SHarish Mahendrakar     case Id::kTagName:
314*103e46e4SHarish Mahendrakar     case Id::kTagLanguage:
315*103e46e4SHarish Mahendrakar     case Id::kTagDefault:
316*103e46e4SHarish Mahendrakar     case Id::kTagString:
317*103e46e4SHarish Mahendrakar     case Id::kTagBinary:
318*103e46e4SHarish Mahendrakar       *ancestory = Ancestory(kSimpleTagAncestory, 4);
319*103e46e4SHarish Mahendrakar       return true;
320*103e46e4SHarish Mahendrakar 
321*103e46e4SHarish Mahendrakar     case Id::kEbml:
322*103e46e4SHarish Mahendrakar     case Id::kSegment:
323*103e46e4SHarish Mahendrakar       *ancestory = {};
324*103e46e4SHarish Mahendrakar       return true;
325*103e46e4SHarish Mahendrakar 
326*103e46e4SHarish Mahendrakar     default:
327*103e46e4SHarish Mahendrakar       // This is an unknown element or a global element (i.e. Void); its
328*103e46e4SHarish Mahendrakar       // ancestory cannot be deduced.
329*103e46e4SHarish Mahendrakar       *ancestory = {};
330*103e46e4SHarish Mahendrakar       return false;
331*103e46e4SHarish Mahendrakar   }
332*103e46e4SHarish Mahendrakar }
333*103e46e4SHarish Mahendrakar 
334*103e46e4SHarish Mahendrakar }  // namespace webm
335