71 size_t stream_index =
static_cast<size_t>(-1);
72 StreamDataType stream_data_type = StreamDataType::kUnknown;
74 std::shared_ptr<const StreamInfo> stream_info;
75 std::shared_ptr<const MediaSample> media_sample;
76 std::shared_ptr<const TextSample> text_sample;
77 std::shared_ptr<const SegmentInfo> segment_info;
78 std::shared_ptr<const Scte35Event> scte35_event;
79 std::shared_ptr<const CueEvent> cue_event;
81 static std::unique_ptr<StreamData> FromStreamInfo(
83 std::shared_ptr<const StreamInfo> stream_info) {
84 std::unique_ptr<StreamData> stream_data(
new StreamData);
85 stream_data->stream_index = stream_index;
86 stream_data->stream_data_type = StreamDataType::kStreamInfo;
87 stream_data->stream_info = std::move(stream_info);
91 static std::unique_ptr<StreamData> FromMediaSample(
93 std::shared_ptr<const MediaSample> media_sample) {
94 std::unique_ptr<StreamData> stream_data(
new StreamData);
95 stream_data->stream_index = stream_index;
96 stream_data->stream_data_type = StreamDataType::kMediaSample;
97 stream_data->media_sample = std::move(media_sample);
101 static std::unique_ptr<StreamData> FromTextSample(
103 std::shared_ptr<const TextSample> text_sample) {
104 std::unique_ptr<StreamData> stream_data(
new StreamData);
105 stream_data->stream_index = stream_index;
106 stream_data->stream_data_type = StreamDataType::kTextSample;
107 stream_data->text_sample = std::move(text_sample);
111 static std::unique_ptr<StreamData> FromSegmentInfo(
113 std::shared_ptr<const SegmentInfo> segment_info) {
114 std::unique_ptr<StreamData> stream_data(
new StreamData);
115 stream_data->stream_index = stream_index;
116 stream_data->stream_data_type = StreamDataType::kSegmentInfo;
117 stream_data->segment_info = std::move(segment_info);
121 static std::unique_ptr<StreamData> FromScte35Event(
123 std::shared_ptr<const Scte35Event> scte35_event) {
124 std::unique_ptr<StreamData> stream_data(
new StreamData);
125 stream_data->stream_index = stream_index;
126 stream_data->stream_data_type = StreamDataType::kScte35Event;
127 stream_data->scte35_event = std::move(scte35_event);
131 static std::unique_ptr<StreamData> FromCueEvent(
133 std::shared_ptr<const CueEvent> cue_event) {
134 std::unique_ptr<StreamData> stream_data(
new StreamData);
135 stream_data->stream_index = stream_index;
136 stream_data->stream_data_type = StreamDataType::kCueEvent;
137 stream_data->cue_event = std::move(cue_event);
164 std::shared_ptr<MediaHandler> handler);
168 return SetHandler(next_output_stream_index_, handler);
178 static Status Chain(
const std::vector<std::shared_ptr<MediaHandler>>& list);
189 virtual Status
Process(std::unique_ptr<StreamData> stream_data) = 0;
199 Status
Dispatch(std::unique_ptr<StreamData> stream_data)
const;
204 std::shared_ptr<const StreamInfo> stream_info)
const {
206 StreamData::FromStreamInfo(stream_index, std::move(stream_info)));
212 std::shared_ptr<const MediaSample> media_sample)
const {
214 StreamData::FromMediaSample(stream_index, std::move(media_sample)));
221 std::shared_ptr<const TextSample> text_sample)
const {
223 StreamData::FromTextSample(stream_index, std::move(text_sample)));
229 std::shared_ptr<const SegmentInfo> segment_info)
const {
231 StreamData::FromSegmentInfo(stream_index, std::move(segment_info)));
237 std::shared_ptr<const Scte35Event> scte35_event)
const {
239 StreamData::FromScte35Event(stream_index, std::move(scte35_event)));
244 std::shared_ptr<const CueEvent> cue_event)
const {
246 StreamData::FromCueEvent(stream_index, std::move(cue_event)));
255 bool initialized() {
return initialized_; }
256 size_t num_input_streams()
const {
return num_input_streams_; }
257 size_t next_output_stream_index()
const {
return next_output_stream_index_; }
258 const std::map<size_t, std::pair<std::shared_ptr<MediaHandler>,
size_t>>&
260 return output_handlers_;
264 MediaHandler(
const MediaHandler&) =
delete;
265 MediaHandler& operator=(
const MediaHandler&) =
delete;
267 bool initialized_ =
false;
269 size_t num_input_streams_ = 0;
271 size_t next_output_stream_index_ = 0;
274 std::map<size_t, std::pair<std::shared_ptr<MediaHandler>,
size_t>>