7 #ifndef MEDIA_FORMATS_WEBM_SEGMENTER_H_
8 #define MEDIA_FORMATS_WEBM_SEGMENTER_H_
11 #include "packager/media/base/status.h"
12 #include "packager/media/formats/webm/encryptor.h"
13 #include "packager/media/formats/webm/mkv_writer.h"
14 #include "packager/media/formats/webm/seek_head.h"
15 #include "packager/third_party/libwebm/src/mkvmuxer.hpp"
22 class AudioStreamInfo;
27 class ProgressListener;
29 class VideoStreamInfo;
65 uint32_t max_sd_pixels,
66 uint32_t max_hd_pixels,
67 uint32_t max_uhd1_pixels,
68 double clear_lead_in_seconds);
81 uint64_t duration_timescale,
82 bool is_subsegment) = 0;
110 void set_progress_target(uint64_t target) { progress_target_ = target; }
112 const MuxerOptions& options()
const {
return options_; }
113 mkvmuxer::Cluster* cluster() {
return cluster_.get(); }
114 mkvmuxer::Cues* cues() {
return &cues_; }
117 SeekHead* seek_head() {
return &seek_head_; }
119 int track_id()
const {
return track_id_; }
120 uint64_t segment_payload_pos()
const {
return segment_payload_pos_; }
122 virtual Status DoInitialize(std::unique_ptr<MkvWriter> writer) = 0;
123 virtual Status DoFinalize() = 0;
128 Status InitializeEncryptor(
KeySource* key_source, uint32_t max_sd_pixels,
129 uint32_t max_hd_pixels, uint32_t max_uhd1_pixels);
132 Status WriteFrame(
bool write_duration);
138 virtual Status NewSegment(uint64_t start_timescale,
bool is_subsegment) = 0;
141 std::shared_ptr<MediaSample> prev_sample_;
144 uint64_t reference_frame_timestamp_ = 0;
147 std::unique_ptr<Encryptor> encryptor_;
148 double clear_lead_ = 0;
150 bool enable_encryption_ =
false;
152 std::unique_ptr<mkvmuxer::Cluster> cluster_;
153 mkvmuxer::Cues cues_;
155 mkvmuxer::SegmentInfo segment_info_;
156 mkvmuxer::Tracks tracks_;
161 uint64_t progress_target_ = 0;
162 uint64_t accumulated_progress_ = 0;
163 uint64_t first_timestamp_ = 0;
164 int64_t sample_duration_ = 0;
167 uint64_t segment_payload_pos_ = 0;
171 bool new_segment_ =
true;
173 bool new_subsegment_ =
false;
183 #endif // MEDIA_FORMATS_WEBM_SEGMENTER_H_