Added TextSample
Added a text sample type that can be passed between media handlers. This will allow text samples to safely be moved between media handlers before converting to their final format. Bug: 36138902 Change-Id: Ic4946f774a7d37c43066b9ea46596d5c5f3c05a8
This commit is contained in:
parent
d28b19788d
commit
2d2825290c
|
@ -84,6 +84,8 @@
|
||||||
'status.h',
|
'status.h',
|
||||||
'stream_info.cc',
|
'stream_info.cc',
|
||||||
'stream_info.h',
|
'stream_info.h',
|
||||||
|
'text_sample.cc',
|
||||||
|
'text_sample.h',
|
||||||
'text_stream_info.cc',
|
'text_stream_info.cc',
|
||||||
'text_stream_info.h',
|
'text_stream_info.h',
|
||||||
'text_track.h',
|
'text_track.h',
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "packager/media/base/media_sample.h"
|
#include "packager/media/base/media_sample.h"
|
||||||
#include "packager/media/base/status.h"
|
#include "packager/media/base/status.h"
|
||||||
#include "packager/media/base/stream_info.h"
|
#include "packager/media/base/stream_info.h"
|
||||||
|
#include "packager/media/base/text_sample.h"
|
||||||
|
|
||||||
namespace shaka {
|
namespace shaka {
|
||||||
namespace media {
|
namespace media {
|
||||||
|
@ -23,6 +24,7 @@ enum class StreamDataType {
|
||||||
kPeriodInfo,
|
kPeriodInfo,
|
||||||
kStreamInfo,
|
kStreamInfo,
|
||||||
kMediaSample,
|
kMediaSample,
|
||||||
|
kTextSample,
|
||||||
kMediaEvent,
|
kMediaEvent,
|
||||||
kSegmentInfo,
|
kSegmentInfo,
|
||||||
};
|
};
|
||||||
|
@ -49,6 +51,7 @@ struct StreamData {
|
||||||
std::shared_ptr<PeriodInfo> period_info;
|
std::shared_ptr<PeriodInfo> period_info;
|
||||||
std::shared_ptr<StreamInfo> stream_info;
|
std::shared_ptr<StreamInfo> stream_info;
|
||||||
std::shared_ptr<MediaSample> media_sample;
|
std::shared_ptr<MediaSample> media_sample;
|
||||||
|
std::shared_ptr<TextSample> text_sample;
|
||||||
std::shared_ptr<MediaEvent> media_event;
|
std::shared_ptr<MediaEvent> media_event;
|
||||||
std::shared_ptr<SegmentInfo> segment_info;
|
std::shared_ptr<SegmentInfo> segment_info;
|
||||||
};
|
};
|
||||||
|
@ -140,6 +143,17 @@ class MediaHandler {
|
||||||
return Dispatch(std::move(stream_data));
|
return Dispatch(std::move(stream_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Dispatch the text sample to downsream handlers.
|
||||||
|
// DispatchTextSample should only be override for testing.
|
||||||
|
Status DispatchTextSample(size_t stream_index,
|
||||||
|
std::shared_ptr<TextSample> text_sample) {
|
||||||
|
std::unique_ptr<StreamData> stream_data(new StreamData);
|
||||||
|
stream_data->stream_index = stream_index;
|
||||||
|
stream_data->stream_data_type = StreamDataType::kTextSample;
|
||||||
|
stream_data->text_sample = std::move(text_sample);
|
||||||
|
return Dispatch(std::move(stream_data));
|
||||||
|
}
|
||||||
|
|
||||||
/// Dispatch the media event to downstream handlers.
|
/// Dispatch the media event to downstream handlers.
|
||||||
Status DispatchMediaEvent(size_t stream_index,
|
Status DispatchMediaEvent(size_t stream_index,
|
||||||
std::shared_ptr<MediaEvent> media_event) {
|
std::shared_ptr<MediaEvent> media_event) {
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
// Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file or at
|
||||||
|
// https://developers.google.com/open-source/licenses/bsd
|
||||||
|
|
||||||
|
#include "packager/media/base/text_sample.h"
|
||||||
|
|
||||||
|
#include "packager/base/logging.h"
|
||||||
|
|
||||||
|
namespace shaka {
|
||||||
|
namespace media {
|
||||||
|
|
||||||
|
uint64_t TextSample::EndTime() const {
|
||||||
|
return start_time_ + duration_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextSample::SetTime(uint64_t start_time, uint64_t end_time) {
|
||||||
|
DCHECK_LT(start_time, end_time);
|
||||||
|
start_time_ = start_time;
|
||||||
|
duration_ = end_time - start_time;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextSample::AppendPayload(const std::string& payload) {
|
||||||
|
if (payload_.length()) {
|
||||||
|
payload_ += "\n";
|
||||||
|
}
|
||||||
|
payload_ += payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace media
|
||||||
|
} // namespace shaka
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file or at
|
||||||
|
// https://developers.google.com/open-source/licenses/bsd
|
||||||
|
|
||||||
|
#ifndef PACKAGER_MEDIA_BASE_TEXT_SAMPLE_H_
|
||||||
|
#define PACKAGER_MEDIA_BASE_TEXT_SAMPLE_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace shaka {
|
||||||
|
namespace media {
|
||||||
|
|
||||||
|
class TextSample {
|
||||||
|
public:
|
||||||
|
TextSample() = default;
|
||||||
|
|
||||||
|
const std::string& id() const { return id_; }
|
||||||
|
uint64_t start_time() const { return start_time_; }
|
||||||
|
uint64_t duration() const { return duration_; }
|
||||||
|
const std::string& settings() const { return settings_; }
|
||||||
|
const std::string& payload() const { return payload_; }
|
||||||
|
uint64_t EndTime() const;
|
||||||
|
|
||||||
|
void set_id(const std::string& id) { id_ = id; }
|
||||||
|
void set_settings(const std::string& settings) { settings_ = settings; }
|
||||||
|
void SetTime(uint64_t start_time, uint64_t end_time);
|
||||||
|
void AppendPayload(const std::string& payload);
|
||||||
|
|
||||||
|
private:
|
||||||
|
TextSample(const TextSample&) = delete;
|
||||||
|
TextSample& operator=(const TextSample&) = delete;
|
||||||
|
|
||||||
|
std::string id_;
|
||||||
|
uint64_t start_time_ = 0;
|
||||||
|
uint64_t duration_ = 0;
|
||||||
|
std::string settings_;
|
||||||
|
std::string payload_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace media
|
||||||
|
} // namespace shaka
|
||||||
|
|
||||||
|
#endif // MEDIA_BASE_TEXT_SAMPLE_H_
|
Loading…
Reference in New Issue