7#include <packager/media/formats/webvtt/webvtt_file_buffer.h>
13#include <absl/log/check.h>
14#include <absl/strings/str_format.h>
16#include <packager/file.h>
17#include <packager/media/base/text_sample.h>
18#include <packager/media/formats/webvtt/webvtt_utils.h>
23const char* kHeader =
"WEBVTT\n";
24const int kTsTimescale = 90000;
27WebVttFileBuffer::WebVttFileBuffer(int32_t transport_stream_timestamp_offset_ms,
28 const std::string& style_region_config)
29 : transport_stream_timestamp_offset_(transport_stream_timestamp_offset_ms *
31 style_region_config_(style_region_config) {
37void WebVttFileBuffer::Reset() {
41 buffer_.append(kHeader);
42 if (transport_stream_timestamp_offset_ > 0) {
44 absl::StrAppendFormat(&buffer_,
45 "X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:%d\n",
46 transport_stream_timestamp_offset_);
49 if (!style_region_config_.empty()) {
50 buffer_.append(style_region_config_);
51 buffer_.append(
"\n\n");
55void WebVttFileBuffer::Append(
const TextSample& sample) {
56 DCHECK_GT(buffer_.size(), 0u) <<
"The buffer should at least have a header";
61 if (sample.id().length()) {
62 buffer_.append(sample.id());
67 buffer_.append(MsToWebVttTimestamp(sample.start_time()));
68 buffer_.append(
" --> ");
69 buffer_.append(MsToWebVttTimestamp(sample.EndTime()));
70 const std::string settings = WebVttSettingsToString(sample.settings());
71 if (!settings.empty()) {
73 buffer_.append(settings);
77 buffer_.append(WebVttFragmentToString(sample.body()));
82bool WebVttFileBuffer::WriteTo(File* file, uint64_t* size) {
84 DCHECK_GT(buffer_.size(), 0u) <<
"The buffer should at least have a header";
87 *size = buffer_.size();
88 const int written = file->Write(buffer_.c_str(), buffer_.size());
93 return static_cast<size_t>(written) == buffer_.size();
All the methods that are virtual are virtual for mocking.