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 #ifndef INCLUDE_WEBM_CALLBACK_H_ 9*103e46e4SHarish Mahendrakar #define INCLUDE_WEBM_CALLBACK_H_ 10*103e46e4SHarish Mahendrakar 11*103e46e4SHarish Mahendrakar #include <cstdint> 12*103e46e4SHarish Mahendrakar 13*103e46e4SHarish Mahendrakar #include "./dom_types.h" 14*103e46e4SHarish Mahendrakar #include "./reader.h" 15*103e46e4SHarish Mahendrakar #include "./status.h" 16*103e46e4SHarish Mahendrakar 17*103e46e4SHarish Mahendrakar /** 18*103e46e4SHarish Mahendrakar \file 19*103e46e4SHarish Mahendrakar The main callback type that receives parsing events. 20*103e46e4SHarish Mahendrakar */ 21*103e46e4SHarish Mahendrakar 22*103e46e4SHarish Mahendrakar namespace webm { 23*103e46e4SHarish Mahendrakar 24*103e46e4SHarish Mahendrakar /** 25*103e46e4SHarish Mahendrakar \addtogroup PUBLIC_API 26*103e46e4SHarish Mahendrakar @{ 27*103e46e4SHarish Mahendrakar */ 28*103e46e4SHarish Mahendrakar 29*103e46e4SHarish Mahendrakar /** 30*103e46e4SHarish Mahendrakar The action to be performed when parsing an element. 31*103e46e4SHarish Mahendrakar */ 32*103e46e4SHarish Mahendrakar enum class Action { 33*103e46e4SHarish Mahendrakar /** 34*103e46e4SHarish Mahendrakar Read and parse the element. 35*103e46e4SHarish Mahendrakar */ 36*103e46e4SHarish Mahendrakar kRead, 37*103e46e4SHarish Mahendrakar 38*103e46e4SHarish Mahendrakar /** 39*103e46e4SHarish Mahendrakar Skip the element. Skipped elements are not parsed or stored, and the callback 40*103e46e4SHarish Mahendrakar is not given any further notifications regarding the element. 41*103e46e4SHarish Mahendrakar */ 42*103e46e4SHarish Mahendrakar kSkip, 43*103e46e4SHarish Mahendrakar }; 44*103e46e4SHarish Mahendrakar 45*103e46e4SHarish Mahendrakar /** 46*103e46e4SHarish Mahendrakar A callback that receives parsing events. 47*103e46e4SHarish Mahendrakar 48*103e46e4SHarish Mahendrakar Every method that returns a `Status` should return `Status::kOkCompleted` when 49*103e46e4SHarish Mahendrakar the method has completed and parsing should continue. Returning any other value 50*103e46e4SHarish Mahendrakar will cause parsing to stop. Parsing may be resumed if the returned status was 51*103e46e4SHarish Mahendrakar not a parsing error (see `Status::is_parsing_error()`). When parsing is 52*103e46e4SHarish Mahendrakar resumed, the same `Callback` method will be called again. 53*103e46e4SHarish Mahendrakar 54*103e46e4SHarish Mahendrakar Methods that take a `Reader` expect the implementation to consume (either via 55*103e46e4SHarish Mahendrakar `Reader::Read()` or `Reader::Skip()`) the specified number of bytes before 56*103e46e4SHarish Mahendrakar returning `Status::kOkCompleted`. Default implementations will call 57*103e46e4SHarish Mahendrakar `Reader::Skip()` to skip the specified number of bytes and the resulting 58*103e46e4SHarish Mahendrakar `Status` will be returned (unless it's `Status::kOkPartial`, in which case 59*103e46e4SHarish Mahendrakar `Reader::Skip()` will be called again to skip more data). 60*103e46e4SHarish Mahendrakar 61*103e46e4SHarish Mahendrakar Throwing an exception from the member functions is permitted, though if the 62*103e46e4SHarish Mahendrakar exception will be caught and parsing resumed, then the reader should not 63*103e46e4SHarish Mahendrakar advance its position (for methods that take a `Reader`) before the exception is 64*103e46e4SHarish Mahendrakar thrown. When parsing is resumed, the same `Callback` method will be called 65*103e46e4SHarish Mahendrakar again. 66*103e46e4SHarish Mahendrakar 67*103e46e4SHarish Mahendrakar Users should derive from this class and override member methods as needed. 68*103e46e4SHarish Mahendrakar */ 69*103e46e4SHarish Mahendrakar class Callback { 70*103e46e4SHarish Mahendrakar public: 71*103e46e4SHarish Mahendrakar virtual ~Callback() = default; 72*103e46e4SHarish Mahendrakar 73*103e46e4SHarish Mahendrakar /** 74*103e46e4SHarish Mahendrakar Called when the parser starts a new element. This is called after the 75*103e46e4SHarish Mahendrakar elements ID and size has been parsed, but before any of its body has been 76*103e46e4SHarish Mahendrakar read (or validated). 77*103e46e4SHarish Mahendrakar 78*103e46e4SHarish Mahendrakar Defaults to `Action::kRead` and returning `Status::kOkCompleted`. 79*103e46e4SHarish Mahendrakar 80*103e46e4SHarish Mahendrakar \param metadata Metadata about the element that has just been encountered. 81*103e46e4SHarish Mahendrakar \param[out] action The action that should be taken when handling this 82*103e46e4SHarish Mahendrakar element. Will not be null. 83*103e46e4SHarish Mahendrakar */ 84*103e46e4SHarish Mahendrakar virtual Status OnElementBegin(const ElementMetadata& metadata, 85*103e46e4SHarish Mahendrakar Action* action); 86*103e46e4SHarish Mahendrakar 87*103e46e4SHarish Mahendrakar /** 88*103e46e4SHarish Mahendrakar Called when the parser encounters an unknown element. 89*103e46e4SHarish Mahendrakar 90*103e46e4SHarish Mahendrakar Defaults to calling (and returning the result of) `Reader::Skip()`. 91*103e46e4SHarish Mahendrakar 92*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 93*103e46e4SHarish Mahendrakar \param reader The reader that should be used to consume data. Will not be 94*103e46e4SHarish Mahendrakar null. 95*103e46e4SHarish Mahendrakar \param[in,out] bytes_remaining The number of remaining bytes that need to be 96*103e46e4SHarish Mahendrakar consumed for the element. Will not be null. 97*103e46e4SHarish Mahendrakar \return `Status::kOkCompleted` when the element has been fully consumed and 98*103e46e4SHarish Mahendrakar `bytes_remaining` is now zero. 99*103e46e4SHarish Mahendrakar */ 100*103e46e4SHarish Mahendrakar virtual Status OnUnknownElement(const ElementMetadata& metadata, 101*103e46e4SHarish Mahendrakar Reader* reader, 102*103e46e4SHarish Mahendrakar std::uint64_t* bytes_remaining); 103*103e46e4SHarish Mahendrakar 104*103e46e4SHarish Mahendrakar /** 105*103e46e4SHarish Mahendrakar Called when the parser encounters an `Id::kEbml` element and it has been 106*103e46e4SHarish Mahendrakar fully parsed. 107*103e46e4SHarish Mahendrakar 108*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 109*103e46e4SHarish Mahendrakar 110*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 111*103e46e4SHarish Mahendrakar \param ebml The parsed element. 112*103e46e4SHarish Mahendrakar */ 113*103e46e4SHarish Mahendrakar virtual Status OnEbml(const ElementMetadata& metadata, const Ebml& ebml); 114*103e46e4SHarish Mahendrakar 115*103e46e4SHarish Mahendrakar /** 116*103e46e4SHarish Mahendrakar Called when the parser encounters an Id::kVoid element. 117*103e46e4SHarish Mahendrakar 118*103e46e4SHarish Mahendrakar Defaults to calling (and returning the result of) Reader::Skip. 119*103e46e4SHarish Mahendrakar 120*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 121*103e46e4SHarish Mahendrakar \param reader The reader that should be used to consume data. Will not be 122*103e46e4SHarish Mahendrakar null. 123*103e46e4SHarish Mahendrakar \param[in,out] bytes_remaining The number of remaining bytes that need to be 124*103e46e4SHarish Mahendrakar consumed for the element. Will not be null. 125*103e46e4SHarish Mahendrakar \return `Status::kOkCompleted` when the element has been fully consumed and 126*103e46e4SHarish Mahendrakar `bytes_remaining` is now zero. 127*103e46e4SHarish Mahendrakar */ 128*103e46e4SHarish Mahendrakar virtual Status OnVoid(const ElementMetadata& metadata, Reader* reader, 129*103e46e4SHarish Mahendrakar std::uint64_t* bytes_remaining); 130*103e46e4SHarish Mahendrakar 131*103e46e4SHarish Mahendrakar /** 132*103e46e4SHarish Mahendrakar Called when the parser starts an `Id::kSegment` element. 133*103e46e4SHarish Mahendrakar 134*103e46e4SHarish Mahendrakar Defaults to `Action::kRead` and returning `Status::kOkCompleted`. 135*103e46e4SHarish Mahendrakar 136*103e46e4SHarish Mahendrakar \param metadata Metadata about the element that has just been encountered. 137*103e46e4SHarish Mahendrakar \param[out] action The action that should be taken when handling this 138*103e46e4SHarish Mahendrakar element. Will not be null. 139*103e46e4SHarish Mahendrakar */ 140*103e46e4SHarish Mahendrakar virtual Status OnSegmentBegin(const ElementMetadata& metadata, 141*103e46e4SHarish Mahendrakar Action* action); 142*103e46e4SHarish Mahendrakar 143*103e46e4SHarish Mahendrakar /** 144*103e46e4SHarish Mahendrakar Called when the parser encounters an `Id::kSeek` element and it has been 145*103e46e4SHarish Mahendrakar fully parsed. 146*103e46e4SHarish Mahendrakar 147*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 148*103e46e4SHarish Mahendrakar 149*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 150*103e46e4SHarish Mahendrakar \param seek The parsed element. 151*103e46e4SHarish Mahendrakar */ 152*103e46e4SHarish Mahendrakar virtual Status OnSeek(const ElementMetadata& metadata, const Seek& seek); 153*103e46e4SHarish Mahendrakar 154*103e46e4SHarish Mahendrakar /** 155*103e46e4SHarish Mahendrakar Called when the parser encounters an `Id::kInfo` element and it has been 156*103e46e4SHarish Mahendrakar fully parsed. 157*103e46e4SHarish Mahendrakar 158*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 159*103e46e4SHarish Mahendrakar 160*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 161*103e46e4SHarish Mahendrakar \param info The parsed element. 162*103e46e4SHarish Mahendrakar */ 163*103e46e4SHarish Mahendrakar virtual Status OnInfo(const ElementMetadata& metadata, const Info& info); 164*103e46e4SHarish Mahendrakar 165*103e46e4SHarish Mahendrakar /** 166*103e46e4SHarish Mahendrakar Called when the parser starts an `Id::kCluster` element. 167*103e46e4SHarish Mahendrakar 168*103e46e4SHarish Mahendrakar Because Cluster elements should start with a Timecode (and optionally 169*103e46e4SHarish Mahendrakar PrevSize) child, this method is not invoked until a child BlockGroup or 170*103e46e4SHarish Mahendrakar SimpleBlock element is encountered (or the Cluster ends if no such child 171*103e46e4SHarish Mahendrakar exists). 172*103e46e4SHarish Mahendrakar 173*103e46e4SHarish Mahendrakar Defaults to `Action::kRead` and returning `Status::kOkCompleted`. 174*103e46e4SHarish Mahendrakar 175*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 176*103e46e4SHarish Mahendrakar \param cluster The element, as it has currently been parsed. 177*103e46e4SHarish Mahendrakar \param[out] action The action that should be taken when handling this 178*103e46e4SHarish Mahendrakar element. Will not be null. 179*103e46e4SHarish Mahendrakar */ 180*103e46e4SHarish Mahendrakar virtual Status OnClusterBegin(const ElementMetadata& metadata, 181*103e46e4SHarish Mahendrakar const Cluster& cluster, Action* action); 182*103e46e4SHarish Mahendrakar 183*103e46e4SHarish Mahendrakar /** 184*103e46e4SHarish Mahendrakar Called when the parser starts an `Id::kSimpleBlock` element. 185*103e46e4SHarish Mahendrakar 186*103e46e4SHarish Mahendrakar Defaults to `Action::kRead` and returning `Status::kOkCompleted`. 187*103e46e4SHarish Mahendrakar 188*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 189*103e46e4SHarish Mahendrakar \param simple_block The parsed SimpleBlock header. 190*103e46e4SHarish Mahendrakar \param[out] action The action that should be taken when handling this 191*103e46e4SHarish Mahendrakar element. Will not be null. 192*103e46e4SHarish Mahendrakar */ 193*103e46e4SHarish Mahendrakar virtual Status OnSimpleBlockBegin(const ElementMetadata& metadata, 194*103e46e4SHarish Mahendrakar const SimpleBlock& simple_block, 195*103e46e4SHarish Mahendrakar Action* action); 196*103e46e4SHarish Mahendrakar 197*103e46e4SHarish Mahendrakar /** 198*103e46e4SHarish Mahendrakar Called when the parser finishes an `Id::kSimpleBlock` element. 199*103e46e4SHarish Mahendrakar 200*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 201*103e46e4SHarish Mahendrakar 202*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 203*103e46e4SHarish Mahendrakar \param simple_block The parsed SimpleBlock header. 204*103e46e4SHarish Mahendrakar */ 205*103e46e4SHarish Mahendrakar virtual Status OnSimpleBlockEnd(const ElementMetadata& metadata, 206*103e46e4SHarish Mahendrakar const SimpleBlock& simple_block); 207*103e46e4SHarish Mahendrakar 208*103e46e4SHarish Mahendrakar /** 209*103e46e4SHarish Mahendrakar Called when the parser starts an `Id::kBlockGroup` element. 210*103e46e4SHarish Mahendrakar 211*103e46e4SHarish Mahendrakar Defaults to `Action::kRead` and returning `Status::kOkCompleted`. 212*103e46e4SHarish Mahendrakar 213*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 214*103e46e4SHarish Mahendrakar \param[out] action The action that should be taken when handling this 215*103e46e4SHarish Mahendrakar element. Will not be null. 216*103e46e4SHarish Mahendrakar */ 217*103e46e4SHarish Mahendrakar virtual Status OnBlockGroupBegin(const ElementMetadata& metadata, 218*103e46e4SHarish Mahendrakar Action* action); 219*103e46e4SHarish Mahendrakar 220*103e46e4SHarish Mahendrakar /** 221*103e46e4SHarish Mahendrakar Called when the parser starts an `Id::kBlock` element. 222*103e46e4SHarish Mahendrakar 223*103e46e4SHarish Mahendrakar Defaults to `Action::kRead` and returning `Status::kOkCompleted`. 224*103e46e4SHarish Mahendrakar 225*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 226*103e46e4SHarish Mahendrakar \param block The parsed Block header. 227*103e46e4SHarish Mahendrakar \param[out] action The action that should be taken when handling this 228*103e46e4SHarish Mahendrakar element. Will not be null. 229*103e46e4SHarish Mahendrakar */ 230*103e46e4SHarish Mahendrakar virtual Status OnBlockBegin(const ElementMetadata& metadata, 231*103e46e4SHarish Mahendrakar const Block& block, Action* action); 232*103e46e4SHarish Mahendrakar 233*103e46e4SHarish Mahendrakar /** 234*103e46e4SHarish Mahendrakar Called when the parser finishes an `Id::Block` element. 235*103e46e4SHarish Mahendrakar 236*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 237*103e46e4SHarish Mahendrakar 238*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 239*103e46e4SHarish Mahendrakar \param block The parsed Block header. 240*103e46e4SHarish Mahendrakar */ 241*103e46e4SHarish Mahendrakar virtual Status OnBlockEnd(const ElementMetadata& metadata, 242*103e46e4SHarish Mahendrakar const Block& block); 243*103e46e4SHarish Mahendrakar 244*103e46e4SHarish Mahendrakar /** 245*103e46e4SHarish Mahendrakar Called when the parser finishes an `Id::kBlockGroup` element. 246*103e46e4SHarish Mahendrakar 247*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 248*103e46e4SHarish Mahendrakar 249*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 250*103e46e4SHarish Mahendrakar \param block_group The parsed element. 251*103e46e4SHarish Mahendrakar */ 252*103e46e4SHarish Mahendrakar virtual Status OnBlockGroupEnd(const ElementMetadata& metadata, 253*103e46e4SHarish Mahendrakar const BlockGroup& block_group); 254*103e46e4SHarish Mahendrakar 255*103e46e4SHarish Mahendrakar /** 256*103e46e4SHarish Mahendrakar Called when the parser encounters a frame within a `Id::kBlock` or 257*103e46e4SHarish Mahendrakar `Id::kSimpleBlock` element. 258*103e46e4SHarish Mahendrakar 259*103e46e4SHarish Mahendrakar Defaults to calling (and returning the result of) `Reader::Skip`. 260*103e46e4SHarish Mahendrakar 261*103e46e4SHarish Mahendrakar \param metadata Metadata about the frame. 262*103e46e4SHarish Mahendrakar \param reader The reader that should be used to consume data. Will not be 263*103e46e4SHarish Mahendrakar null. 264*103e46e4SHarish Mahendrakar \param[in,out] bytes_remaining The number of remaining bytes that need to be 265*103e46e4SHarish Mahendrakar consumed for the frame. Will not be null. 266*103e46e4SHarish Mahendrakar \return `Status::kOkCompleted` when the frame has been fully consumed and 267*103e46e4SHarish Mahendrakar `bytes_remaining` is now zero. 268*103e46e4SHarish Mahendrakar */ 269*103e46e4SHarish Mahendrakar virtual Status OnFrame(const FrameMetadata& metadata, Reader* reader, 270*103e46e4SHarish Mahendrakar std::uint64_t* bytes_remaining); 271*103e46e4SHarish Mahendrakar 272*103e46e4SHarish Mahendrakar /** 273*103e46e4SHarish Mahendrakar Called when the parser finishes an `Id::kCluster` element. 274*103e46e4SHarish Mahendrakar 275*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 276*103e46e4SHarish Mahendrakar 277*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 278*103e46e4SHarish Mahendrakar \param cluster The parsed element. 279*103e46e4SHarish Mahendrakar */ 280*103e46e4SHarish Mahendrakar virtual Status OnClusterEnd(const ElementMetadata& metadata, 281*103e46e4SHarish Mahendrakar const Cluster& cluster); 282*103e46e4SHarish Mahendrakar 283*103e46e4SHarish Mahendrakar /** 284*103e46e4SHarish Mahendrakar Called when the parser starts an `Id::kTrackEntry` element. 285*103e46e4SHarish Mahendrakar 286*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 287*103e46e4SHarish Mahendrakar 288*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 289*103e46e4SHarish Mahendrakar \param track_entry The parsed element. 290*103e46e4SHarish Mahendrakar */ 291*103e46e4SHarish Mahendrakar virtual Status OnTrackEntry(const ElementMetadata& metadata, 292*103e46e4SHarish Mahendrakar const TrackEntry& track_entry); 293*103e46e4SHarish Mahendrakar 294*103e46e4SHarish Mahendrakar /** 295*103e46e4SHarish Mahendrakar Called when the parser encounters an `Id::kCuePoint` element and it has been 296*103e46e4SHarish Mahendrakar fully parsed. 297*103e46e4SHarish Mahendrakar 298*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 299*103e46e4SHarish Mahendrakar 300*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 301*103e46e4SHarish Mahendrakar \param cue_point The parsed element. 302*103e46e4SHarish Mahendrakar */ 303*103e46e4SHarish Mahendrakar virtual Status OnCuePoint(const ElementMetadata& metadata, 304*103e46e4SHarish Mahendrakar const CuePoint& cue_point); 305*103e46e4SHarish Mahendrakar 306*103e46e4SHarish Mahendrakar /** 307*103e46e4SHarish Mahendrakar Called when the parser encounters an `Id::kEditionEntry` element and it has 308*103e46e4SHarish Mahendrakar been fully parsed. 309*103e46e4SHarish Mahendrakar 310*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 311*103e46e4SHarish Mahendrakar 312*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 313*103e46e4SHarish Mahendrakar \param edition_entry The parsed element. 314*103e46e4SHarish Mahendrakar */ 315*103e46e4SHarish Mahendrakar virtual Status OnEditionEntry(const ElementMetadata& metadata, 316*103e46e4SHarish Mahendrakar const EditionEntry& edition_entry); 317*103e46e4SHarish Mahendrakar 318*103e46e4SHarish Mahendrakar /** 319*103e46e4SHarish Mahendrakar Called when the parser encounters an `Id::kTag` element and it has been fully 320*103e46e4SHarish Mahendrakar parsed. 321*103e46e4SHarish Mahendrakar 322*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 323*103e46e4SHarish Mahendrakar 324*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 325*103e46e4SHarish Mahendrakar \param tag The parsed element. 326*103e46e4SHarish Mahendrakar */ 327*103e46e4SHarish Mahendrakar virtual Status OnTag(const ElementMetadata& metadata, const Tag& tag); 328*103e46e4SHarish Mahendrakar 329*103e46e4SHarish Mahendrakar /** 330*103e46e4SHarish Mahendrakar Called when the parser finishes an `Id::kSegment` element. 331*103e46e4SHarish Mahendrakar 332*103e46e4SHarish Mahendrakar Defaults to returning `Status::kOkCompleted`. 333*103e46e4SHarish Mahendrakar 334*103e46e4SHarish Mahendrakar \param metadata Metadata about the element. 335*103e46e4SHarish Mahendrakar */ 336*103e46e4SHarish Mahendrakar virtual Status OnSegmentEnd(const ElementMetadata& metadata); 337*103e46e4SHarish Mahendrakar 338*103e46e4SHarish Mahendrakar protected: 339*103e46e4SHarish Mahendrakar /** 340*103e46e4SHarish Mahendrakar Calls (and returns the result of) `Reader::Skip()`, skipping (up to) the 341*103e46e4SHarish Mahendrakar requested number of bytes. 342*103e46e4SHarish Mahendrakar 343*103e46e4SHarish Mahendrakar Unlike `Reader::Skip()`, this method may be called with `*bytes_remaining == 344*103e46e4SHarish Mahendrakar 0`, which will result in `Status::kOkCompleted`. `Reader::Skip()` will be 345*103e46e4SHarish Mahendrakar called multiple times if it returns `Status::kOkPartial` until it returns a 346*103e46e4SHarish Mahendrakar different status (indicating the requested number of bytes has been fully 347*103e46e4SHarish Mahendrakar skipped or some error occurred). 348*103e46e4SHarish Mahendrakar 349*103e46e4SHarish Mahendrakar \param reader The reader that should be used to skip data. Must not be null. 350*103e46e4SHarish Mahendrakar \param[in,out] bytes_remaining The number of remaining bytes that need to be 351*103e46e4SHarish Mahendrakar skipped. Must not be null. May be zero. 352*103e46e4SHarish Mahendrakar \return The result of `Reader::Skip()`. 353*103e46e4SHarish Mahendrakar */ 354*103e46e4SHarish Mahendrakar static Status Skip(Reader* reader, std::uint64_t* bytes_remaining); 355*103e46e4SHarish Mahendrakar }; 356*103e46e4SHarish Mahendrakar 357*103e46e4SHarish Mahendrakar /** 358*103e46e4SHarish Mahendrakar @} 359*103e46e4SHarish Mahendrakar */ 360*103e46e4SHarish Mahendrakar 361*103e46e4SHarish Mahendrakar } // namespace webm 362*103e46e4SHarish Mahendrakar 363*103e46e4SHarish Mahendrakar #endif // INCLUDE_WEBM_CALLBACK_H_ 364