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