63 int64_t duration_timestamp,
65 int64_t segment_number) = 0;
78 virtual std::vector<Range> GetSegmentRanges() = 0;
97 void set_progress_target(uint64_t target) { progress_target_ = target; }
100 mkvmuxer::Cluster* cluster() {
return cluster_.get(); }
101 mkvmuxer::Cues* cues() {
return &cues_; }
102 MuxerListener* muxer_listener() {
return muxer_listener_; }
103 SeekHead* seek_head() {
return &seek_head_; }
105 int track_id()
const {
return track_id_; }
106 uint64_t segment_payload_pos()
const {
return segment_payload_pos_; }
108 int64_t duration()
const {
return duration_; }
110 virtual Status DoInitialize() = 0;
111 virtual Status DoFinalize() = 0;
114 Status InitializeAudioTrack(
const AudioStreamInfo& info,
115 mkvmuxer::AudioTrack* track);
116 Status InitializeVideoTrack(
const VideoStreamInfo& info,
117 mkvmuxer::VideoTrack* track);
120 Status WriteFrame(
bool write_duration);
126 virtual Status NewSegment(int64_t start_timestamp,
bool is_subsegment) = 0;
129 std::shared_ptr<const MediaSample> prev_sample_;
132 int64_t reference_frame_timestamp_ = 0;
134 const MuxerOptions& options_;
136 std::unique_ptr<mkvmuxer::Cluster> cluster_;
137 mkvmuxer::Cues cues_;
139 mkvmuxer::SegmentInfo segment_info_;
140 mkvmuxer::Tracks tracks_;
142 MuxerListener* muxer_listener_ =
nullptr;
143 ProgressListener* progress_listener_ =
nullptr;
144 uint64_t progress_target_ = 0;
145 uint64_t accumulated_progress_ = 0;
147 int64_t first_timestamp_ = 0;
148 int64_t sample_durations_[2] = {0, 0};
149 size_t num_samples_ = 0;
153 uint64_t segment_payload_pos_ = 0;
157 bool new_segment_ =
true;
159 bool new_subsegment_ =
false;
163 bool is_encrypted_ =
false;
164 int64_t time_scale_ = 0;
165 int64_t duration_ = 0;
167 DISALLOW_COPY_AND_ASSIGN(Segmenter);