- add sources.
[platform/framework/web/crosswalk.git] / src / media / webm / webm_info_parser.cc
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/webm/webm_info_parser.h"
6
7 #include "base/logging.h"
8 #include "media/webm/webm_constants.h"
9
10 namespace media {
11
12 // Default timecode scale if the TimecodeScale element is
13 // not specified in the INFO element.
14 static const int kWebMDefaultTimecodeScale = 1000000;
15
16 WebMInfoParser::WebMInfoParser()
17     : timecode_scale_(-1),
18       duration_(-1) {
19 }
20
21 WebMInfoParser::~WebMInfoParser() {}
22
23 int WebMInfoParser::Parse(const uint8* buf, int size) {
24   timecode_scale_ = -1;
25   duration_ = -1;
26
27   WebMListParser parser(kWebMIdInfo, this);
28   int result = parser.Parse(buf, size);
29
30   if (result <= 0)
31     return result;
32
33   // For now we do all or nothing parsing.
34   return parser.IsParsingComplete() ? result : 0;
35 }
36
37 WebMParserClient* WebMInfoParser::OnListStart(int id) { return this; }
38
39 bool WebMInfoParser::OnListEnd(int id) {
40   if (id == kWebMIdInfo && timecode_scale_ == -1) {
41     // Set timecode scale to default value if it isn't present in
42     // the Info element.
43     timecode_scale_ = kWebMDefaultTimecodeScale;
44   }
45   return true;
46 }
47
48 bool WebMInfoParser::OnUInt(int id, int64 val) {
49   if (id != kWebMIdTimecodeScale)
50     return true;
51
52   if (timecode_scale_ != -1) {
53     DVLOG(1) << "Multiple values for id " << std::hex << id << " specified";
54     return false;
55   }
56
57   timecode_scale_ = val;
58   return true;
59 }
60
61 bool WebMInfoParser::OnFloat(int id, double val) {
62   if (id != kWebMIdDuration) {
63     DVLOG(1) << "Unexpected float for id" << std::hex << id;
64     return false;
65   }
66
67   if (duration_ != -1) {
68     DVLOG(1) << "Multiple values for duration.";
69     return false;
70   }
71
72   duration_ = val;
73   return true;
74 }
75
76 bool WebMInfoParser::OnBinary(int id, const uint8* data, int size) {
77   return true;
78 }
79
80 bool WebMInfoParser::OnString(int id, const std::string& str) {
81   return true;
82 }
83
84 }  // namespace media