7 #ifndef MEDIA_FORMATS_WEBM_SEGMENTER_H_
8 #define MEDIA_FORMATS_WEBM_SEGMENTER_H_
11 #include "packager/base/memory/ref_counted.h"
12 #include "packager/media/base/status.h"
13 #include "packager/media/formats/webm/encryptor.h"
14 #include "packager/media/formats/webm/mkv_writer.h"
15 #include "packager/media/formats/webm/seek_head.h"
16 #include "packager/third_party/libwebm/src/mkvmuxer.hpp"
23 class AudioStreamInfo;
28 class ProgressListener;
30 class VideoStreamInfo;
58 uint32_t max_sd_pixels,
59 double clear_lead_in_seconds);
96 void set_progress_target(uint64_t target) { progress_target_ = target; }
99 mkvmuxer::Cluster* cluster() {
return cluster_.get(); }
100 mkvmuxer::Cues* cues() {
return &cues_; }
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_; }
107 uint64_t cluster_length_in_time_scale()
const {
108 return cluster_length_in_time_scale_;
111 virtual Status DoInitialize(std::unique_ptr<MkvWriter> writer) = 0;
112 virtual Status DoFinalize() = 0;
117 Status InitializeEncryptor(
KeySource* key_source, uint32_t max_sd_pixels);
120 Status WriteFrame(
bool write_duration);
125 virtual Status NewSubsegment(uint64_t start_timescale) = 0;
129 virtual Status NewSegment(uint64_t start_timescale) = 0;
132 scoped_refptr<MediaSample> prev_sample_;
135 uint64_t reference_frame_timestamp_;
138 std::unique_ptr<Encryptor> encryptor_;
140 bool enable_encryption_;
142 std::unique_ptr<mkvmuxer::Cluster> cluster_;
143 mkvmuxer::Cues cues_;
145 mkvmuxer::SegmentInfo segment_info_;
146 mkvmuxer::Tracks tracks_;
151 uint64_t progress_target_;
152 uint64_t accumulated_progress_;
153 uint64_t first_timestamp_;
154 int64_t sample_duration_;
157 uint64_t segment_payload_pos_;
160 uint64_t cluster_length_in_time_scale_;
161 uint64_t segment_length_in_time_scale_;
172 #endif // MEDIA_FORMATS_WEBM_SEGMENTER_H_