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 "webm/callback.h"
9*103e46e4SHarish Mahendrakar
10*103e46e4SHarish Mahendrakar #include <cassert>
11*103e46e4SHarish Mahendrakar
12*103e46e4SHarish Mahendrakar namespace webm {
13*103e46e4SHarish Mahendrakar
OnElementBegin(const ElementMetadata &,Action * action)14*103e46e4SHarish Mahendrakar Status Callback::OnElementBegin(const ElementMetadata& /* metadata */,
15*103e46e4SHarish Mahendrakar Action* action) {
16*103e46e4SHarish Mahendrakar assert(action != nullptr);
17*103e46e4SHarish Mahendrakar *action = Action::kRead;
18*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
19*103e46e4SHarish Mahendrakar }
20*103e46e4SHarish Mahendrakar
OnUnknownElement(const ElementMetadata &,Reader * reader,std::uint64_t * bytes_remaining)21*103e46e4SHarish Mahendrakar Status Callback::OnUnknownElement(const ElementMetadata& /* metadata */,
22*103e46e4SHarish Mahendrakar Reader* reader,
23*103e46e4SHarish Mahendrakar std::uint64_t* bytes_remaining) {
24*103e46e4SHarish Mahendrakar assert(reader != nullptr);
25*103e46e4SHarish Mahendrakar assert(bytes_remaining != nullptr);
26*103e46e4SHarish Mahendrakar return Skip(reader, bytes_remaining);
27*103e46e4SHarish Mahendrakar }
28*103e46e4SHarish Mahendrakar
OnEbml(const ElementMetadata &,const Ebml &)29*103e46e4SHarish Mahendrakar Status Callback::OnEbml(const ElementMetadata& /* metadata */,
30*103e46e4SHarish Mahendrakar const Ebml& /* ebml */) {
31*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
32*103e46e4SHarish Mahendrakar }
33*103e46e4SHarish Mahendrakar
OnVoid(const ElementMetadata &,Reader * reader,std::uint64_t * bytes_remaining)34*103e46e4SHarish Mahendrakar Status Callback::OnVoid(const ElementMetadata& /* metadata */, Reader* reader,
35*103e46e4SHarish Mahendrakar std::uint64_t* bytes_remaining) {
36*103e46e4SHarish Mahendrakar assert(reader != nullptr);
37*103e46e4SHarish Mahendrakar assert(bytes_remaining != nullptr);
38*103e46e4SHarish Mahendrakar return Skip(reader, bytes_remaining);
39*103e46e4SHarish Mahendrakar }
40*103e46e4SHarish Mahendrakar
OnSegmentBegin(const ElementMetadata &,Action * action)41*103e46e4SHarish Mahendrakar Status Callback::OnSegmentBegin(const ElementMetadata& /* metadata */,
42*103e46e4SHarish Mahendrakar Action* action) {
43*103e46e4SHarish Mahendrakar assert(action != nullptr);
44*103e46e4SHarish Mahendrakar *action = Action::kRead;
45*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
46*103e46e4SHarish Mahendrakar }
47*103e46e4SHarish Mahendrakar
OnSeek(const ElementMetadata &,const Seek &)48*103e46e4SHarish Mahendrakar Status Callback::OnSeek(const ElementMetadata& /* metadata */,
49*103e46e4SHarish Mahendrakar const Seek& /* seek */) {
50*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
51*103e46e4SHarish Mahendrakar }
52*103e46e4SHarish Mahendrakar
OnInfo(const ElementMetadata &,const Info &)53*103e46e4SHarish Mahendrakar Status Callback::OnInfo(const ElementMetadata& /* metadata */,
54*103e46e4SHarish Mahendrakar const Info& /* info */) {
55*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
56*103e46e4SHarish Mahendrakar }
57*103e46e4SHarish Mahendrakar
OnClusterBegin(const ElementMetadata &,const Cluster &,Action * action)58*103e46e4SHarish Mahendrakar Status Callback::OnClusterBegin(const ElementMetadata& /* metadata */,
59*103e46e4SHarish Mahendrakar const Cluster& /* cluster */, Action* action) {
60*103e46e4SHarish Mahendrakar assert(action != nullptr);
61*103e46e4SHarish Mahendrakar *action = Action::kRead;
62*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
63*103e46e4SHarish Mahendrakar }
64*103e46e4SHarish Mahendrakar
OnSimpleBlockBegin(const ElementMetadata &,const SimpleBlock &,Action * action)65*103e46e4SHarish Mahendrakar Status Callback::OnSimpleBlockBegin(const ElementMetadata& /* metadata */,
66*103e46e4SHarish Mahendrakar const SimpleBlock& /* simple_block */,
67*103e46e4SHarish Mahendrakar Action* action) {
68*103e46e4SHarish Mahendrakar assert(action != nullptr);
69*103e46e4SHarish Mahendrakar *action = Action::kRead;
70*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
71*103e46e4SHarish Mahendrakar }
72*103e46e4SHarish Mahendrakar
OnSimpleBlockEnd(const ElementMetadata &,const SimpleBlock &)73*103e46e4SHarish Mahendrakar Status Callback::OnSimpleBlockEnd(const ElementMetadata& /* metadata */,
74*103e46e4SHarish Mahendrakar const SimpleBlock& /* simple_block */) {
75*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
76*103e46e4SHarish Mahendrakar }
77*103e46e4SHarish Mahendrakar
OnBlockGroupBegin(const ElementMetadata &,Action * action)78*103e46e4SHarish Mahendrakar Status Callback::OnBlockGroupBegin(const ElementMetadata& /* metadata */,
79*103e46e4SHarish Mahendrakar Action* action) {
80*103e46e4SHarish Mahendrakar assert(action != nullptr);
81*103e46e4SHarish Mahendrakar *action = Action::kRead;
82*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
83*103e46e4SHarish Mahendrakar }
84*103e46e4SHarish Mahendrakar
OnBlockBegin(const ElementMetadata &,const Block &,Action * action)85*103e46e4SHarish Mahendrakar Status Callback::OnBlockBegin(const ElementMetadata& /* metadata */,
86*103e46e4SHarish Mahendrakar const Block& /* block */, Action* action) {
87*103e46e4SHarish Mahendrakar assert(action != nullptr);
88*103e46e4SHarish Mahendrakar *action = Action::kRead;
89*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
90*103e46e4SHarish Mahendrakar }
91*103e46e4SHarish Mahendrakar
OnBlockEnd(const ElementMetadata &,const Block &)92*103e46e4SHarish Mahendrakar Status Callback::OnBlockEnd(const ElementMetadata& /* metadata */,
93*103e46e4SHarish Mahendrakar const Block& /* block */) {
94*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
95*103e46e4SHarish Mahendrakar }
96*103e46e4SHarish Mahendrakar
OnBlockGroupEnd(const ElementMetadata &,const BlockGroup &)97*103e46e4SHarish Mahendrakar Status Callback::OnBlockGroupEnd(const ElementMetadata& /* metadata */,
98*103e46e4SHarish Mahendrakar const BlockGroup& /* block_group */) {
99*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
100*103e46e4SHarish Mahendrakar }
101*103e46e4SHarish Mahendrakar
OnFrame(const FrameMetadata &,Reader * reader,std::uint64_t * bytes_remaining)102*103e46e4SHarish Mahendrakar Status Callback::OnFrame(const FrameMetadata& /* metadata */, Reader* reader,
103*103e46e4SHarish Mahendrakar std::uint64_t* bytes_remaining) {
104*103e46e4SHarish Mahendrakar assert(reader != nullptr);
105*103e46e4SHarish Mahendrakar assert(bytes_remaining != nullptr);
106*103e46e4SHarish Mahendrakar return Skip(reader, bytes_remaining);
107*103e46e4SHarish Mahendrakar }
108*103e46e4SHarish Mahendrakar
OnClusterEnd(const ElementMetadata &,const Cluster &)109*103e46e4SHarish Mahendrakar Status Callback::OnClusterEnd(const ElementMetadata& /* metadata */,
110*103e46e4SHarish Mahendrakar const Cluster& /* cluster */) {
111*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
112*103e46e4SHarish Mahendrakar }
113*103e46e4SHarish Mahendrakar
OnTrackEntry(const ElementMetadata &,const TrackEntry &)114*103e46e4SHarish Mahendrakar Status Callback::OnTrackEntry(const ElementMetadata& /* metadata */,
115*103e46e4SHarish Mahendrakar const TrackEntry& /* track_entry */) {
116*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
117*103e46e4SHarish Mahendrakar }
118*103e46e4SHarish Mahendrakar
OnCuePoint(const ElementMetadata &,const CuePoint &)119*103e46e4SHarish Mahendrakar Status Callback::OnCuePoint(const ElementMetadata& /* metadata */,
120*103e46e4SHarish Mahendrakar const CuePoint& /* cue_point */) {
121*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
122*103e46e4SHarish Mahendrakar }
123*103e46e4SHarish Mahendrakar
OnEditionEntry(const ElementMetadata &,const EditionEntry &)124*103e46e4SHarish Mahendrakar Status Callback::OnEditionEntry(const ElementMetadata& /* metadata */,
125*103e46e4SHarish Mahendrakar const EditionEntry& /* edition_entry */) {
126*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
127*103e46e4SHarish Mahendrakar }
128*103e46e4SHarish Mahendrakar
OnTag(const ElementMetadata &,const Tag &)129*103e46e4SHarish Mahendrakar Status Callback::OnTag(const ElementMetadata& /* metadata */,
130*103e46e4SHarish Mahendrakar const Tag& /* tag */) {
131*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
132*103e46e4SHarish Mahendrakar }
133*103e46e4SHarish Mahendrakar
OnSegmentEnd(const ElementMetadata &)134*103e46e4SHarish Mahendrakar Status Callback::OnSegmentEnd(const ElementMetadata& /* metadata */) {
135*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
136*103e46e4SHarish Mahendrakar }
137*103e46e4SHarish Mahendrakar
Skip(Reader * reader,std::uint64_t * bytes_remaining)138*103e46e4SHarish Mahendrakar Status Callback::Skip(Reader* reader, std::uint64_t* bytes_remaining) {
139*103e46e4SHarish Mahendrakar assert(reader != nullptr);
140*103e46e4SHarish Mahendrakar assert(bytes_remaining != nullptr);
141*103e46e4SHarish Mahendrakar
142*103e46e4SHarish Mahendrakar if (*bytes_remaining == 0)
143*103e46e4SHarish Mahendrakar return Status(Status::kOkCompleted);
144*103e46e4SHarish Mahendrakar
145*103e46e4SHarish Mahendrakar Status status;
146*103e46e4SHarish Mahendrakar do {
147*103e46e4SHarish Mahendrakar std::uint64_t num_actually_skipped;
148*103e46e4SHarish Mahendrakar status = reader->Skip(*bytes_remaining, &num_actually_skipped);
149*103e46e4SHarish Mahendrakar *bytes_remaining -= num_actually_skipped;
150*103e46e4SHarish Mahendrakar } while (status.code == Status::kOkPartial);
151*103e46e4SHarish Mahendrakar
152*103e46e4SHarish Mahendrakar return status;
153*103e46e4SHarish Mahendrakar }
154*103e46e4SHarish Mahendrakar
155*103e46e4SHarish Mahendrakar } // namespace webm
156