Shaka Packager SDK
Loading...
Searching...
No Matches
webm_tracks_parser.h
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
3// found in the LICENSE file.
4
5#ifndef PACKAGER_MEDIA_FORMATS_WEBM_WEBM_TRACKS_PARSER_H_
6#define PACKAGER_MEDIA_FORMATS_WEBM_WEBM_TRACKS_PARSER_H_
7
8#include <cstdint>
9#include <map>
10#include <memory>
11#include <set>
12#include <string>
13#include <vector>
14
15#include <packager/macros/classes.h>
16#include <packager/media/base/audio_stream_info.h>
17#include <packager/media/base/text_track_config.h>
18#include <packager/media/base/video_stream_info.h>
19#include <packager/media/codecs/vp_codec_configuration_record.h>
20#include <packager/media/formats/webm/webm_audio_client.h>
21#include <packager/media/formats/webm/webm_content_encodings_client.h>
22#include <packager/media/formats/webm/webm_parser.h>
23#include <packager/media/formats/webm/webm_video_client.h>
24
25namespace shaka {
26namespace media {
27
30 public:
31 explicit WebMTracksParser(bool ignore_text_tracks);
32 ~WebMTracksParser() override;
33
38 int Parse(const uint8_t* buf, int size);
39
40 int64_t audio_track_num() const { return audio_track_num_; }
41 int64_t video_track_num() const { return video_track_num_; }
42
47 int64_t GetAudioDefaultDuration(const double timecode_scale_in_us) const;
48 int64_t GetVideoDefaultDuration(const double timecode_scale_in_us) const;
49
50 const std::set<int64_t>& ignored_tracks() const { return ignored_tracks_; }
51
52 const std::string& audio_encryption_key_id() const {
53 return audio_encryption_key_id_;
54 }
55
56 std::shared_ptr<AudioStreamInfo> audio_stream_info() {
57 return audio_stream_info_;
58 }
59
60 const std::string& video_encryption_key_id() const {
61 return video_encryption_key_id_;
62 }
63
64 std::shared_ptr<VideoStreamInfo> video_stream_info() {
65 return video_stream_info_;
66 }
67
68 typedef std::map<int, TextTrackConfig> TextTracks;
69
70 const TextTracks& text_tracks() const { return text_tracks_; }
71
72 const VPCodecConfigurationRecord& vp_config() const { return vp_config_; }
73
74 private:
75 // WebMParserClient implementation.
76 WebMParserClient* OnListStart(int id) override;
77 bool OnListEnd(int id) override;
78 bool OnUInt(int id, int64_t val) override;
79 bool OnFloat(int id, double val) override;
80 bool OnBinary(int id, const uint8_t* data, int size) override;
81 bool OnString(int id, const std::string& str) override;
82
83 int64_t track_type_;
84 int64_t track_num_;
85 std::string track_name_;
86 std::string track_language_;
87 std::string codec_id_;
88 std::vector<uint8_t> codec_private_;
89 int64_t seek_preroll_;
90 int64_t codec_delay_;
91 int64_t default_duration_;
92 std::unique_ptr<WebMContentEncodingsClient> track_content_encodings_client_;
93
94 int64_t audio_track_num_;
95 int64_t audio_default_duration_;
96 int64_t video_track_num_;
97 int64_t video_default_duration_;
98 bool ignore_text_tracks_;
99 TextTracks text_tracks_;
100 std::set<int64_t> ignored_tracks_;
101 std::string audio_encryption_key_id_;
102 std::string video_encryption_key_id_;
103
104 WebMAudioClient audio_client_;
105 std::shared_ptr<AudioStreamInfo> audio_stream_info_;
106
107 WebMVideoClient video_client_;
109 std::shared_ptr<VideoStreamInfo> video_stream_info_;
110
111 DISALLOW_COPY_AND_ASSIGN(WebMTracksParser);
112};
113
114} // namespace media
115} // namespace shaka
116
117#endif // PACKAGER_MEDIA_FORMATS_WEBM_WEBM_TRACKS_PARSER_H_
Class for parsing or writing VP codec configuration record.
Helper class used to parse an Audio element inside a TrackEntry element.
Parser for WebM Tracks element.
int64_t GetAudioDefaultDuration(const double timecode_scale_in_us) const
int Parse(const uint8_t *buf, int size)
Helper class used to parse a Video element inside a TrackEntry element.
All the methods that are virtual are virtual for mocking.