76 size_t stream_index =
static_cast<size_t>(-1);
77 StreamDataType stream_data_type = StreamDataType::kUnknown;
79 std::shared_ptr<const StreamInfo> stream_info;
80 std::shared_ptr<const MediaSample> media_sample;
81 std::shared_ptr<const TextSample> text_sample;
82 std::shared_ptr<const SegmentInfo> segment_info;
83 std::shared_ptr<const Scte35Event> scte35_event;
84 std::shared_ptr<const CueEvent> cue_event;
86 static std::unique_ptr<StreamData> FromStreamInfo(
88 std::shared_ptr<const StreamInfo> stream_info) {
89 std::unique_ptr<StreamData> stream_data(
new StreamData);
90 stream_data->stream_index = stream_index;
91 stream_data->stream_data_type = StreamDataType::kStreamInfo;
92 stream_data->stream_info = std::move(stream_info);
96 static std::unique_ptr<StreamData> FromMediaSample(
98 std::shared_ptr<const MediaSample> media_sample) {
99 std::unique_ptr<StreamData> stream_data(
new StreamData);
100 stream_data->stream_index = stream_index;
101 stream_data->stream_data_type = StreamDataType::kMediaSample;
102 stream_data->media_sample = std::move(media_sample);
106 static std::unique_ptr<StreamData> FromTextSample(
108 std::shared_ptr<const TextSample> text_sample) {
109 std::unique_ptr<StreamData> stream_data(
new StreamData);
110 stream_data->stream_index = stream_index;
111 stream_data->stream_data_type = StreamDataType::kTextSample;
112 stream_data->text_sample = std::move(text_sample);
116 static std::unique_ptr<StreamData> FromSegmentInfo(
118 std::shared_ptr<const SegmentInfo> segment_info) {
119 std::unique_ptr<StreamData> stream_data(
new StreamData);
120 stream_data->stream_index = stream_index;
121 stream_data->stream_data_type = StreamDataType::kSegmentInfo;
122 stream_data->segment_info = std::move(segment_info);
126 static std::unique_ptr<StreamData> FromScte35Event(
128 std::shared_ptr<const Scte35Event> scte35_event) {
129 std::unique_ptr<StreamData> stream_data(
new StreamData);
130 stream_data->stream_index = stream_index;
131 stream_data->stream_data_type = StreamDataType::kScte35Event;
132 stream_data->scte35_event = std::move(scte35_event);
136 static std::unique_ptr<StreamData> FromCueEvent(
138 std::shared_ptr<const CueEvent> cue_event) {
139 std::unique_ptr<StreamData> stream_data(
new StreamData);
140 stream_data->stream_index = stream_index;
141 stream_data->stream_data_type = StreamDataType::kCueEvent;
142 stream_data->cue_event = std::move(cue_event);
169 std::shared_ptr<MediaHandler> handler);
173 return SetHandler(next_output_stream_index_, handler);
183 static Status Chain(
const std::vector<std::shared_ptr<MediaHandler>>& list);
194 virtual Status
Process(std::unique_ptr<StreamData> stream_data) = 0;
204 Status
Dispatch(std::unique_ptr<StreamData> stream_data)
const;
209 std::shared_ptr<const StreamInfo> stream_info)
const {
211 StreamData::FromStreamInfo(stream_index, std::move(stream_info)));
217 std::shared_ptr<const MediaSample> media_sample)
const {
219 StreamData::FromMediaSample(stream_index, std::move(media_sample)));
226 std::shared_ptr<const TextSample> text_sample)
const {
228 StreamData::FromTextSample(stream_index, std::move(text_sample)));
234 std::shared_ptr<const SegmentInfo> segment_info)
const {
236 StreamData::FromSegmentInfo(stream_index, std::move(segment_info)));
242 std::shared_ptr<const Scte35Event> scte35_event)
const {
244 StreamData::FromScte35Event(stream_index, std::move(scte35_event)));
249 std::shared_ptr<const CueEvent> cue_event)
const {
251 StreamData::FromCueEvent(stream_index, std::move(cue_event)));
260 bool initialized() {
return initialized_; }
261 size_t num_input_streams()
const {
return num_input_streams_; }
262 size_t next_output_stream_index()
const {
return next_output_stream_index_; }
263 const std::map<size_t, std::pair<std::shared_ptr<MediaHandler>,
size_t>>&
265 return output_handlers_;
269 MediaHandler(
const MediaHandler&) =
delete;
270 MediaHandler& operator=(
const MediaHandler&) =
delete;
272 bool initialized_ =
false;
274 size_t num_input_streams_ = 0;
276 size_t next_output_stream_index_ = 0;
279 std::map<size_t, std::pair<std::shared_ptr<MediaHandler>,
size_t>>