7 #ifndef MEDIA_FORMATS_WEBM_SEGMENTER_H_
8 #define MEDIA_FORMATS_WEBM_SEGMENTER_H_
11 #include "packager/media/formats/webm/mkv_writer.h"
12 #include "packager/media/formats/webm/seek_head.h"
13 #include "packager/status.h"
14 #include "packager/third_party/libwebm/src/mkvmuxer.hpp"
21 class AudioStreamInfo;
24 class ProgressListener;
26 class VideoStreamInfo;
52 Status
AddSample(std::shared_ptr<MediaSample> sample);
56 uint64_t duration_timestamp,
57 bool is_subsegment) = 0;
78 Status
SetCluster(uint64_t start_webm_timecode,
84 void set_progress_target(uint64_t target) { progress_target_ = target; }
87 mkvmuxer::Cluster* cluster() {
return cluster_.get(); }
88 mkvmuxer::Cues* cues() {
return &cues_; }
91 SeekHead* seek_head() {
return &seek_head_; }
93 int track_id()
const {
return track_id_; }
94 uint64_t segment_payload_pos()
const {
return segment_payload_pos_; }
96 virtual Status DoInitialize() = 0;
97 virtual Status DoFinalize() = 0;
101 mkvmuxer::AudioTrack* track);
103 mkvmuxer::VideoTrack* track);
106 Status WriteFrame(
bool write_duration);
112 virtual Status NewSegment(uint64_t start_timestamp,
bool is_subsegment) = 0;
115 std::shared_ptr<MediaSample> prev_sample_;
118 uint64_t reference_frame_timestamp_ = 0;
122 std::unique_ptr<mkvmuxer::Cluster> cluster_;
123 mkvmuxer::Cues cues_;
125 mkvmuxer::SegmentInfo segment_info_;
126 mkvmuxer::Tracks tracks_;
131 uint64_t progress_target_ = 0;
132 uint64_t accumulated_progress_ = 0;
133 uint64_t first_timestamp_ = 0;
134 int64_t sample_duration_ = 0;
137 uint64_t segment_payload_pos_ = 0;
141 bool new_segment_ =
true;
143 bool new_subsegment_ =
false;
153 #endif // MEDIA_FORMATS_WEBM_SEGMENTER_H_