| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/formats/webm/webm_parser.h" | 5 #include "media/formats/webm/webm_parser.h" |
| 6 | 6 |
| 7 // This file contains code to parse WebM file elements. It was created | 7 // This file contains code to parse WebM file elements. It was created |
| 8 // from information in the Matroska spec. | 8 // from information in the Matroska spec. |
| 9 // http://www.matroska.org/technical/specs/index.html | 9 // http://www.matroska.org/technical/specs/index.html |
| 10 // This file contains code for encrypted WebM. Current WebM | 10 // This file contains code for encrypted WebM. Current WebM |
| (...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 if (size == 0) | 900 if (size == 0) |
| 901 return OnListEnd(); | 901 return OnListEnd(); |
| 902 | 902 |
| 903 return true; | 903 return true; |
| 904 } | 904 } |
| 905 | 905 |
| 906 bool WebMListParser::OnListEnd() { | 906 bool WebMListParser::OnListEnd() { |
| 907 int lists_ended = 0; | 907 int lists_ended = 0; |
| 908 for (; !list_state_stack_.empty(); ++lists_ended) { | 908 for (; !list_state_stack_.empty(); ++lists_ended) { |
| 909 const ListState& list_state = list_state_stack_.back(); | 909 const ListState& list_state = list_state_stack_.back(); |
| 910 int64 bytes_parsed = list_state.bytes_parsed_; |
| 911 int id = list_state.id_; |
| 910 | 912 |
| 911 if (list_state.bytes_parsed_ != list_state.size_) | 913 if (bytes_parsed != list_state.size_) |
| 912 break; | 914 break; |
| 913 | 915 |
| 914 list_state_stack_.pop_back(); | 916 list_state_stack_.pop_back(); |
| 915 | 917 |
| 916 int64 bytes_parsed = list_state.bytes_parsed_; | |
| 917 WebMParserClient* client = NULL; | 918 WebMParserClient* client = NULL; |
| 918 if (!list_state_stack_.empty()) { | 919 if (!list_state_stack_.empty()) { |
| 919 // Update the bytes_parsed_ for the parent element. | 920 // Update the bytes_parsed_ for the parent element. |
| 920 list_state_stack_.back().bytes_parsed_ += bytes_parsed; | 921 list_state_stack_.back().bytes_parsed_ += bytes_parsed; |
| 921 client = list_state_stack_.back().client_; | 922 client = list_state_stack_.back().client_; |
| 922 } else { | 923 } else { |
| 923 client = root_client_; | 924 client = root_client_; |
| 924 } | 925 } |
| 925 | 926 |
| 926 if (!client->OnListEnd(list_state.id_)) | 927 if (!client->OnListEnd(id)) |
| 927 return false; | 928 return false; |
| 928 } | 929 } |
| 929 | 930 |
| 930 DCHECK_GE(lists_ended, 1); | 931 DCHECK_GE(lists_ended, 1); |
| 931 | 932 |
| 932 if (list_state_stack_.empty()) | 933 if (list_state_stack_.empty()) |
| 933 ChangeState(DONE_PARSING_LIST); | 934 ChangeState(DONE_PARSING_LIST); |
| 934 | 935 |
| 935 return true; | 936 return true; |
| 936 } | 937 } |
| 937 | 938 |
| 938 bool WebMListParser::IsSiblingOrAncestor(int id_a, int id_b) const { | 939 bool WebMListParser::IsSiblingOrAncestor(int id_a, int id_b) const { |
| 939 DCHECK((id_a == kWebMIdSegment) || (id_a == kWebMIdCluster)); | 940 DCHECK((id_a == kWebMIdSegment) || (id_a == kWebMIdCluster)); |
| 940 | 941 |
| 941 if (id_a == kWebMIdCluster) { | 942 if (id_a == kWebMIdCluster) { |
| 942 // kWebMIdCluster siblings. | 943 // kWebMIdCluster siblings. |
| 943 for (size_t i = 0; i < arraysize(kSegmentIds); i++) { | 944 for (size_t i = 0; i < arraysize(kSegmentIds); i++) { |
| 944 if (kSegmentIds[i].id_ == id_b) | 945 if (kSegmentIds[i].id_ == id_b) |
| 945 return true; | 946 return true; |
| 946 } | 947 } |
| 947 } | 948 } |
| 948 | 949 |
| 949 // kWebMIdSegment siblings. | 950 // kWebMIdSegment siblings. |
| 950 return ((id_b == kWebMIdSegment) || (id_b == kWebMIdEBMLHeader)); | 951 return ((id_b == kWebMIdSegment) || (id_b == kWebMIdEBMLHeader)); |
| 951 } | 952 } |
| 952 | 953 |
| 953 } // namespace media | 954 } // namespace media |
| OLD | NEW |