20 uint32_t total_ms = 0) {
21 std::vector<uint32_t> durations;
22 durations.reserve(samples.size());
23 if (samples.empty()) {
26 if (samples.front().start_ms != 0) {
29 CH_LOG(
"warn",
"first chapter start_ms is " << samples.front().start_ms
30 <<
"ms; Apple players expect 0ms. "
31 <<
"Titles/URLs/thumbnails may not show.");
33 for (
size_t i = 0; i < samples.size(); ++i) {
34 if (i + 1 < samples.size()) {
35 uint32_t cur = samples[i].start_ms;
36 uint32_t next = samples[i + 1].start_ms;
37 durations.push_back(next > cur ? (next - cur) : 1);
39 if (total_ms > 0 && samples[i].start_ms < total_ms) {
40 durations.push_back(std::max<uint32_t>(1, total_ms - samples[i].start_ms));
42 durations.push_back(1);