xref: /aosp_15_r20/external/libwebm/webm_parser/src/unknown_parser.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/unknown_parser.h"
9*103e46e4SHarish Mahendrakar 
10*103e46e4SHarish Mahendrakar #include <cassert>
11*103e46e4SHarish Mahendrakar #include <cstdint>
12*103e46e4SHarish Mahendrakar 
13*103e46e4SHarish Mahendrakar #include "webm/element.h"
14*103e46e4SHarish Mahendrakar #include "webm/reader.h"
15*103e46e4SHarish Mahendrakar #include "webm/status.h"
16*103e46e4SHarish Mahendrakar 
17*103e46e4SHarish Mahendrakar namespace webm {
18*103e46e4SHarish Mahendrakar 
Init(const ElementMetadata & metadata,std::uint64_t max_size)19*103e46e4SHarish Mahendrakar Status UnknownParser::Init(const ElementMetadata& metadata,
20*103e46e4SHarish Mahendrakar                            std::uint64_t max_size) {
21*103e46e4SHarish Mahendrakar   assert(metadata.size == kUnknownElementSize || metadata.size <= max_size);
22*103e46e4SHarish Mahendrakar 
23*103e46e4SHarish Mahendrakar   if (metadata.size == kUnknownElementSize) {
24*103e46e4SHarish Mahendrakar     return Status(Status::kIndefiniteUnknownElement);
25*103e46e4SHarish Mahendrakar   }
26*103e46e4SHarish Mahendrakar 
27*103e46e4SHarish Mahendrakar   metadata_ = metadata;
28*103e46e4SHarish Mahendrakar   bytes_remaining_ = metadata.size;
29*103e46e4SHarish Mahendrakar 
30*103e46e4SHarish Mahendrakar   return Status(Status::kOkCompleted);
31*103e46e4SHarish Mahendrakar }
32*103e46e4SHarish Mahendrakar 
Feed(Callback * callback,Reader * reader,std::uint64_t * num_bytes_read)33*103e46e4SHarish Mahendrakar Status UnknownParser::Feed(Callback* callback, Reader* reader,
34*103e46e4SHarish Mahendrakar                            std::uint64_t* num_bytes_read) {
35*103e46e4SHarish Mahendrakar   assert(callback != nullptr);
36*103e46e4SHarish Mahendrakar   assert(reader != nullptr);
37*103e46e4SHarish Mahendrakar   assert(num_bytes_read != nullptr);
38*103e46e4SHarish Mahendrakar 
39*103e46e4SHarish Mahendrakar   const std::uint64_t original_bytes_remaining = bytes_remaining_;
40*103e46e4SHarish Mahendrakar   const Status status =
41*103e46e4SHarish Mahendrakar       callback->OnUnknownElement(metadata_, reader, &bytes_remaining_);
42*103e46e4SHarish Mahendrakar   assert(bytes_remaining_ <= original_bytes_remaining);
43*103e46e4SHarish Mahendrakar 
44*103e46e4SHarish Mahendrakar   *num_bytes_read = original_bytes_remaining - bytes_remaining_;
45*103e46e4SHarish Mahendrakar 
46*103e46e4SHarish Mahendrakar   return status;
47*103e46e4SHarish Mahendrakar }
48*103e46e4SHarish Mahendrakar 
49*103e46e4SHarish Mahendrakar }  // namespace webm
50