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/formats/webm/webm_audio_client.h>
20#include <packager/media/formats/webm/webm_content_encodings_client.h>
21#include <packager/media/formats/webm/webm_parser.h>
22#include <packager/media/formats/webm/webm_video_client.h>
23
24namespace shaka {
25namespace media {
26
29 public:
30 explicit WebMTracksParser(bool ignore_text_tracks);
31 ~WebMTracksParser() override;
32
37 int Parse(const uint8_t* buf, int size);
38
39 int64_t audio_track_num() const { return audio_track_num_; }
40 int64_t video_track_num() const { return video_track_num_; }
41
46 int64_t GetAudioDefaultDuration(const double timecode_scale_in_us) const;
47 int64_t GetVideoDefaultDuration(const double timecode_scale_in_us) const;
48
49 const std::set<int64_t>& ignored_tracks() const { return ignored_tracks_; }
50
51 const std::string& audio_encryption_key_id() const {
52 return audio_encryption_key_id_;
53 }
54
55 std::shared_ptr<AudioStreamInfo> audio_stream_info() {
56 return audio_stream_info_;
57 }
58
59 const std::string& video_encryption_key_id() const {
60 return video_encryption_key_id_;
61 }
62
63 std::shared_ptr<VideoStreamInfo> video_stream_info() {
64 return video_stream_info_;
65 }
66
67 typedef std::map<int, TextTrackConfig> TextTracks;
68
69 const TextTracks& text_tracks() const {
70 return text_tracks_;
71 }
72
73 const VPCodecConfigurationRecord& vp_config() const { return vp_config_; }
74
75 private:
76 // WebMParserClient implementation.
77 WebMParserClient* OnListStart(int id) override;
78 bool OnListEnd(int id) override;
79 bool OnUInt(int id, int64_t val) override;
80 bool OnFloat(int id, double val) override;
81 bool OnBinary(int id, const uint8_t* data, int size) override;
82 bool OnString(int id, const std::string& str) override;
83
84 int64_t track_type_;
85 int64_t track_num_;
86 std::string track_name_;
87 std::string track_language_;
88 std::string codec_id_;
89 std::vector<uint8_t> codec_private_;
90 int64_t seek_preroll_;
91 int64_t codec_delay_;
92 int64_t default_duration_;
93 std::unique_ptr<WebMContentEncodingsClient> track_content_encodings_client_;
94
95 int64_t audio_track_num_;
96 int64_t audio_default_duration_;
97 int64_t video_track_num_;
98 int64_t video_default_duration_;
99 bool ignore_text_tracks_;
100 TextTracks text_tracks_;
101 std::set<int64_t> ignored_tracks_;
102 std::string audio_encryption_key_id_;
103 std::string video_encryption_key_id_;
104
105 WebMAudioClient audio_client_;
106 std::shared_ptr<AudioStreamInfo> audio_stream_info_;
107
108 WebMVideoClient video_client_;
110 std::shared_ptr<VideoStreamInfo> video_stream_info_;
111
112 DISALLOW_COPY_AND_ASSIGN(WebMTracksParser);
113};
114
115} // namespace media
116} // namespace shaka
117
118#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.