Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Side by Side Diff: media/webm/webm_webvtt_parser.cc

Issue 13419002: Media Source dispatches inband text tracks (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: incorporated aaron's comments Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 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_webvtt_parser.h"
6
7 namespace media {
8
9 void WebMWebVTTParser::Parse(const uint8* payload, int payload_size,
10 std::string* id,
11 std::string* settings,
12 std::string* content) {
13 WebMWebVTTParser parser(payload, payload_size);
14 parser.Parse(id, settings, content);
15 }
16
17 WebMWebVTTParser::WebMWebVTTParser(const uint8* payload, int payload_size)
18 : ptr_(payload),
19 ptr_end_(payload + payload_size) {
20 }
21
22 void WebMWebVTTParser::Parse(std::string* id,
23 std::string* settings,
24 std::string* content) {
25 ParseLine(id);
26 ParseLine(settings);
27 content->assign(ptr_, ptr_end_);
28 }
29
30 bool WebMWebVTTParser::GetByte(uint8* byte) {
31 if (ptr_ >= ptr_end_)
32 return false; // indicates end-of-stream
33
34 *byte = *ptr_++;
35 return true;
36 }
37
38 void WebMWebVTTParser::UngetByte() {
39 --ptr_;
40 }
41
42 void WebMWebVTTParser::ParseLine(std::string* line) {
43 line->clear();
44
45 // Consume characters from the stream, until we reach end-of-line.
46
47 // The WebVTT spec states that lines may be terminated in any of the following
48 // three ways:
49 // LF
50 // CR
51 // CR LF
52
53 // The spec is here:
54 // http://wiki.webmproject.org/webm-metadata/temporal-metadata/webvtt-in-webm
55
56 enum {
57 kLF = '\x0A',
58 kCR = '\x0D'
59 };
60
61 for (;;) {
62 uint8 byte;
63
64 if (!GetByte(&byte) || byte == kLF)
65 return;
66
67 if (byte == kCR) {
68 if (GetByte(&byte) && byte != kLF)
69 UngetByte();
70
71 return;
72 }
73
74 line->push_back(byte);
75 }
76 }
77
78 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698