46 int64_t default_duration,
50 int track_num()
const {
return track_num_; }
56 bool EmitBuffer(
const std::shared_ptr<MediaSample>& buffer);
62 bool ApplyDurationEstimateIfNeeded();
73 bool EmitBufferHelp(
const std::shared_ptr<MediaSample>& buffer);
77 int64_t GetDurationEstimate();
85 std::shared_ptr<MediaSample> last_added_buffer_missing_duration_;
88 int64_t default_duration_;
93 int64_t estimated_next_frame_duration_;
98 typedef std::map<int, Track> TextTrackMap;
125 WebMClusterParser(int64_t timecode_scale,
126 std::shared_ptr<AudioStreamInfo> audio_stream_info,
127 std::shared_ptr<VideoStreamInfo> video_stream_info,
128 const VPCodecConfigurationRecord& vp_config,
129 int64_t audio_default_duration,
130 int64_t video_default_duration,
131 const WebMTracksParser::TextTracks& text_tracks,
132 const std::set<int64_t>& ignored_tracks,
133 const std::string& audio_encryption_key_id,
134 const std::string& video_encryption_key_id,
137 KeySource* decryption_key_source);
138 ~WebMClusterParser()
override;
146 [[nodiscard]]
bool Flush();
152 int Parse(
const uint8_t* buf,
int size);
154 int64_t cluster_start_time()
const {
return cluster_start_time_; }
162 bool OnListEnd(
int id)
override;
163 bool OnUInt(
int id, int64_t val)
override;
164 bool OnBinary(
int id,
const uint8_t* data,
int size)
override;
166 bool ParseBlock(
bool is_simple_block,
169 const uint8_t* additional,
172 int64_t discard_padding,
173 bool reference_block_set);
174 bool OnBlock(
bool is_simple_block,
180 const uint8_t* additional,
182 int64_t discard_padding,
186 void ResetTextTracks();
190 Track* FindTextTrack(
int track_num);
193 double timecode_multiplier_;
195 std::shared_ptr<AudioStreamInfo> audio_stream_info_;
196 std::shared_ptr<VideoStreamInfo> video_stream_info_;
198 std::set<int64_t> ignored_tracks_;
200 std::unique_ptr<DecryptorSource> decryptor_source_;
201 std::string audio_encryption_key_id_;
202 std::string video_encryption_key_id_;
212 int64_t last_block_timecode_ = -1;
213 std::unique_ptr<uint8_t[]> block_data_;
214 int block_data_size_ = -1;
215 int64_t block_duration_ = -1;
216 int64_t block_add_id_ = -1;
218 std::unique_ptr<uint8_t[]> block_additional_data_;
221 int block_additional_data_size_ = 0;
223 int64_t discard_padding_ = -1;
224 bool discard_padding_set_ =
false;
226 bool reference_block_set_ =
false;
228 int64_t cluster_timecode_ = -1;
229 int64_t cluster_start_time_;
230 bool cluster_ended_ =
false;
234 TextTrackMap text_track_map_;