Fix language option not honored on text streams
Change-Id: I9034b779e9b193c39201a5f2d142ec390927e5f7
This commit is contained in:
parent
0401d62a3f
commit
aa4bb49b2f
|
@ -39,6 +39,23 @@ MATCHER_P3(IsStreamInfo, stream_index, time_scale, encrypted, "") {
|
||||||
arg->stream_info->is_encrypted() == encrypted;
|
arg->stream_info->is_encrypted() == encrypted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MATCHER_P4(IsStreamInfo, stream_index, time_scale, encrypted, language, "") {
|
||||||
|
if (arg->stream_data_type != StreamDataType::kStreamInfo) {
|
||||||
|
*result_listener << "which is "
|
||||||
|
<< StreamDataTypeToString(arg->stream_data_type);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*result_listener << "which is (" << arg->stream_index << ","
|
||||||
|
<< arg->stream_info->time_scale() << ","
|
||||||
|
<< BoolToString(arg->stream_info->is_encrypted()) << ","
|
||||||
|
<< arg->stream_info->language() << ")";
|
||||||
|
return arg->stream_index == stream_index &&
|
||||||
|
arg->stream_info->time_scale() == time_scale &&
|
||||||
|
arg->stream_info->is_encrypted() == encrypted &&
|
||||||
|
arg->stream_info->language() == language;
|
||||||
|
}
|
||||||
|
|
||||||
MATCHER_P5(IsSegmentInfo,
|
MATCHER_P5(IsSegmentInfo,
|
||||||
stream_index,
|
stream_index,
|
||||||
start_timestamp,
|
start_timestamp,
|
||||||
|
|
|
@ -46,8 +46,9 @@ bool MaybeCueId(const std::string& line) {
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
WebVttParser::WebVttParser(std::unique_ptr<FileReader> source)
|
WebVttParser::WebVttParser(std::unique_ptr<FileReader> source,
|
||||||
: reader_(std::move(source)) {}
|
const std::string& language)
|
||||||
|
: reader_(std::move(source)), language_(language) {}
|
||||||
|
|
||||||
Status WebVttParser::InitializeInternal() {
|
Status WebVttParser::InitializeInternal() {
|
||||||
return Status::OK;
|
return Status::OK;
|
||||||
|
@ -186,17 +187,13 @@ Status WebVttParser::DispatchTextStreamInfo() {
|
||||||
// work nicely with the current demuxer.
|
// work nicely with the current demuxer.
|
||||||
const int kDuration = 0;
|
const int kDuration = 0;
|
||||||
|
|
||||||
// There is no one metadata to determine what the language is. Parts
|
|
||||||
// of the text may be annotated as some specific language.
|
|
||||||
const char kLanguage[] = "";
|
|
||||||
|
|
||||||
const char kWebVttCodecString[] = "wvtt";
|
const char kWebVttCodecString[] = "wvtt";
|
||||||
|
|
||||||
StreamInfo* info = new TextStreamInfo(0, kTimescale, kDuration, kCodecWebVtt,
|
StreamInfo* info = new TextStreamInfo(0, kTimescale, kDuration, kCodecWebVtt,
|
||||||
kWebVttCodecString, "",
|
kWebVttCodecString, "",
|
||||||
0, // width
|
0, // width
|
||||||
0, // height
|
0, // height
|
||||||
kLanguage);
|
language_);
|
||||||
|
|
||||||
return DispatchStreamInfo(0, std::shared_ptr<StreamInfo>(info));
|
return DispatchStreamInfo(0, std::shared_ptr<StreamInfo>(info));
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace media {
|
||||||
// Used to parse a WebVTT source into Cues that will be sent downstream.
|
// Used to parse a WebVTT source into Cues that will be sent downstream.
|
||||||
class WebVttParser : public OriginHandler {
|
class WebVttParser : public OriginHandler {
|
||||||
public:
|
public:
|
||||||
explicit WebVttParser(std::unique_ptr<FileReader> source);
|
WebVttParser(std::unique_ptr<FileReader> source, const std::string& language);
|
||||||
|
|
||||||
Status Run() override;
|
Status Run() override;
|
||||||
void Cancel() override;
|
void Cancel() override;
|
||||||
|
@ -42,6 +42,7 @@ class WebVttParser : public OriginHandler {
|
||||||
Status DispatchTextStreamInfo();
|
Status DispatchTextStreamInfo();
|
||||||
|
|
||||||
BlockReader reader_;
|
BlockReader reader_;
|
||||||
|
std::string language_;
|
||||||
bool keep_reading_ = true;
|
bool keep_reading_ = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
namespace shaka {
|
namespace shaka {
|
||||||
namespace media {
|
namespace media {
|
||||||
namespace {
|
namespace {
|
||||||
|
const char kLanguage[] = "en";
|
||||||
const size_t kInputCount = 0;
|
const size_t kInputCount = 0;
|
||||||
const size_t kOutputCount = 1;
|
const size_t kOutputCount = 1;
|
||||||
const size_t kOutputIndex = 0;
|
const size_t kOutputIndex = 0;
|
||||||
|
@ -40,7 +41,7 @@ class WebVttParserTest : public MediaHandlerTestBase {
|
||||||
std::unique_ptr<FileReader> reader;
|
std::unique_ptr<FileReader> reader;
|
||||||
ASSERT_OK(FileReader::Open(kFilename, &reader));
|
ASSERT_OK(FileReader::Open(kFilename, &reader));
|
||||||
|
|
||||||
parser_ = std::make_shared<WebVttParser>(std::move(reader));
|
parser_ = std::make_shared<WebVttParser>(std::move(reader), kLanguage);
|
||||||
|
|
||||||
ASSERT_OK(MediaHandlerTestBase::SetUpAndInitializeGraph(
|
ASSERT_OK(MediaHandlerTestBase::SetUpAndInitializeGraph(
|
||||||
parser_, kInputCount, kOutputCount));
|
parser_, kInputCount, kOutputCount));
|
||||||
|
@ -70,7 +71,8 @@ TEST_F(WebVttParserTest, ParseOnlyHeader) {
|
||||||
{
|
{
|
||||||
testing::InSequence s;
|
testing::InSequence s;
|
||||||
EXPECT_CALL(*Output(kOutputIndex),
|
EXPECT_CALL(*Output(kOutputIndex),
|
||||||
OnProcess(IsStreamInfo(kStreamIndex, kTimeScale, !kEncrypted)));
|
OnProcess(IsStreamInfo(kStreamIndex, kTimeScale, !kEncrypted,
|
||||||
|
kLanguage)));
|
||||||
EXPECT_CALL(*Output(kOutputIndex), OnFlush(kStreamIndex));
|
EXPECT_CALL(*Output(kOutputIndex), OnFlush(kStreamIndex));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,9 @@ TEST(WebVttTextPipelineTest, SegmentedOutput) {
|
||||||
ASSERT_TRUE(File::WriteStringToFile(kInputFile, kInput));
|
ASSERT_TRUE(File::WriteStringToFile(kInputFile, kInput));
|
||||||
std::unique_ptr<FileReader> reader;
|
std::unique_ptr<FileReader> reader;
|
||||||
ASSERT_OK(FileReader::Open(kInputFile, &reader));
|
ASSERT_OK(FileReader::Open(kInputFile, &reader));
|
||||||
std::shared_ptr<OriginHandler> parser(new WebVttParser(std::move(reader)));
|
const char kLanguage[] = "en";
|
||||||
|
std::shared_ptr<OriginHandler> parser(
|
||||||
|
new WebVttParser(std::move(reader), kLanguage));
|
||||||
|
|
||||||
std::shared_ptr<MediaHandler> segmenter(
|
std::shared_ptr<MediaHandler> segmenter(
|
||||||
new WebVttSegmenter(kSegmentDuration));
|
new WebVttSegmenter(kSegmentDuration));
|
||||||
|
|
|
@ -431,7 +431,8 @@ Status CreateHlsTextJob(const StreamDescriptor& stream,
|
||||||
return open_status;
|
return open_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<OriginHandler> parser(new WebVttParser(std::move(reader)));
|
std::shared_ptr<OriginHandler> parser(
|
||||||
|
new WebVttParser(std::move(reader), stream.language));
|
||||||
std::shared_ptr<MediaHandler> segmenter(
|
std::shared_ptr<MediaHandler> segmenter(
|
||||||
new WebVttSegmenter(segment_length_in_ms));
|
new WebVttSegmenter(segment_length_in_ms));
|
||||||
|
|
||||||
|
@ -460,7 +461,8 @@ Status CreateWebVttToMp4TextJob(const StreamDescriptor& stream,
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<OriginHandler> parser(new WebVttParser(std::move(reader)));
|
std::shared_ptr<OriginHandler> parser(
|
||||||
|
new WebVttParser(std::move(reader), stream.language));
|
||||||
std::shared_ptr<MediaHandler> text_to_mp4(new WebVttToMp4Handler);
|
std::shared_ptr<MediaHandler> text_to_mp4(new WebVttToMp4Handler);
|
||||||
std::shared_ptr<MediaHandler> chunker(
|
std::shared_ptr<MediaHandler> chunker(
|
||||||
new ChunkingHandler(packaging_params.chunking_params));
|
new ChunkingHandler(packaging_params.chunking_params));
|
||||||
|
|
Loading…
Reference in New Issue