Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: default text zero bias #1330

Merged
merged 2 commits into from
Feb 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions include/packager/packager.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ struct PackagingParams {
/// audio) timestamps to compensate for possible negative timestamps in the
/// input.
int32_t transport_stream_timestamp_offset_ms = 0;
// the threshold used to determine if we should assume that the text stream
// actually starts at time zero
int32_t default_text_zero_bias_ms = 0;

/// Chunking (segmentation) related parameters.
ChunkingParams chunking_params;

Expand Down
11 changes: 11 additions & 0 deletions packager/app/muxer_flags.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,14 @@ ABSL_FLAG(int32_t,
"input. For example, timestamps from ISO-BMFF after adjusted by "
"EditList could be negative. In transport streams, timestamps are "
"not allowed to be less than zero.");
ABSL_FLAG(
int32_t,
default_text_zero_bias_ms,
0,
"A positive value, in milliseconds. It is the threshold used to "
"determine if we should assume that the text stream actually starts "
"at time zero. If the first sample comes before default_text_zero_bias_ms, "
"then the start will be padded as the stream is assumed to start at zero. "
"If the first sample comes after default_text_zero_bias_ms then the start "
"of the stream will not be padded as we cannot assume the start time of "
"the stream.");
1 change: 1 addition & 0 deletions packager/app/muxer_flags.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ ABSL_DECLARE_FLAG(bool, generate_sidx_in_media_segments);
ABSL_DECLARE_FLAG(std::string, temp_dir);
ABSL_DECLARE_FLAG(bool, mp4_include_pssh_in_stream);
ABSL_DECLARE_FLAG(int32_t, transport_stream_timestamp_offset_ms);
ABSL_DECLARE_FLAG(int32_t, default_text_zero_bias_ms);

#endif // APP_MUXER_FLAGS_H_
2 changes: 2 additions & 0 deletions packager/app/packager_main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,8 @@ std::optional<PackagingParams> GetPackagingParams() {

packaging_params.transport_stream_timestamp_offset_ms =
absl::GetFlag(FLAGS_transport_stream_timestamp_offset_ms);
packaging_params.default_text_zero_bias_ms =
absl::GetFlag(FLAGS_default_text_zero_bias_ms);

packaging_params.output_media_info = absl::GetFlag(FLAGS_output_media_info);

Expand Down
4 changes: 3 additions & 1 deletion packager/media/formats/webvtt/text_padder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ Status TextPadder::OnTextSample(std::unique_ptr<StreamData> data) {
// start at time zero.
if (max_end_time_ms_ < 0) {
max_end_time_ms_ =
sample.start_time() > zero_start_bias_ms_ ? sample.start_time() : 0;
zero_start_bias_ms_ && sample.start_time() > zero_start_bias_ms_
? sample.start_time()
: 0;
}

// Check if there will be a gap between samples if we just dispatch this
Expand Down
6 changes: 2 additions & 4 deletions packager/packager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,6 @@ namespace {

const char kMediaInfoSuffix[] = ".media_info";

const int64_t kDefaultTextZeroBiasMs = 10 * 60 * 1000; // 10 minutes

MuxerListenerFactory::StreamData ToMuxerListenerData(
const StreamDescriptor& stream) {
MuxerListenerFactory::StreamData data;
Expand Down Expand Up @@ -662,8 +660,8 @@ Status CreateAudioVideoJobs(

std::vector<std::shared_ptr<MediaHandler>> handlers;
if (is_text) {
handlers.emplace_back(
std::make_shared<TextPadder>(kDefaultTextZeroBiasMs));
handlers.emplace_back(std::make_shared<TextPadder>(
packaging_params.default_text_zero_bias_ms));
}
if (sync_points) {
handlers.emplace_back(cue_aligner);
Expand Down