Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(489)

Unified Diff: services/media/framework/conversion_pipeline_builder.cc

Issue 1678433002: Motown: Remove LPCM optimizations, fix prepare, add flush, add ActiveMultistreamSink model/stage (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Sync Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/media/framework/conversion_pipeline_builder.h ('k') | services/media/framework/engine.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/media/framework/conversion_pipeline_builder.cc
diff --git a/services/media/framework/conversion_pipeline_builder.cc b/services/media/framework/conversion_pipeline_builder.cc
index c1af544dca40776599ec224f897068e9720c1b64..6c9479b4d8632f3b56d7c63559f70ec2dcffa7e5 100644
--- a/services/media/framework/conversion_pipeline_builder.cc
+++ b/services/media/framework/conversion_pipeline_builder.cc
@@ -73,12 +73,13 @@ int Score(
}
// Finds the media type set that best matches in_type.
-const StreamTypeSetPtr* FindBestLpcm(
+const std::unique_ptr<StreamTypeSet>* FindBestLpcm(
const LpcmStreamType& in_type,
- const StreamTypeSetsPtr& out_type_sets) {
- const StreamTypeSetPtr* best = nullptr;
+ const std::unique_ptr<std::vector<std::unique_ptr<StreamTypeSet>>>&
+ out_type_sets) {
+ const std::unique_ptr<StreamTypeSet>* best = nullptr;
int best_score = 0;
- for (const StreamTypeSetPtr& out_type_set : *out_type_sets) {
+ for (const std::unique_ptr<StreamTypeSet>& out_type_set : *out_type_sets) {
switch (out_type_set->scheme()) {
case StreamType::Scheme::kAnyElementary:
case StreamType::Scheme::kAnyAudio:
@@ -106,16 +107,17 @@ const StreamTypeSetPtr* FindBestLpcm(
// type. Otherwise, *out_type is set to nullptr.
AddResult AddTransformsForCompressedAudio(
const CompressedAudioStreamType& in_type,
- const StreamTypePtr& in_type_ptr,
- const StreamTypeSetsPtr& out_type_sets,
- Engine* engine,
- Engine::Output* output,
- StreamTypePtr* out_type) {
+ const std::unique_ptr<StreamType>& in_type_ptr,
+ const std::unique_ptr<std::vector<std::unique_ptr<StreamTypeSet>>>&
+ out_type_sets,
+ Graph* graph,
+ OutputRef* output,
+ std::unique_ptr<StreamType>* out_type) {
DCHECK(out_type);
- DCHECK(engine);
+ DCHECK(graph);
// See if we have a matching COMPRESSED_AUDIO type.
- for (const StreamTypeSetPtr& out_type_set : *out_type_sets) {
+ for (const std::unique_ptr<StreamTypeSet>& out_type_set : *out_type_sets) {
switch (out_type_set->scheme()) {
case StreamType::Scheme::kAnyElementary:
case StreamType::Scheme::kAnyAudio:
@@ -138,7 +140,8 @@ AddResult AddTransformsForCompressedAudio(
}
// Find the best LPCM output type.
- const StreamTypeSetPtr* best = FindBestLpcm(in_type, out_type_sets);
+ const std::unique_ptr<StreamTypeSet>* best =
+ FindBestLpcm(in_type, out_type_sets);
if (best == nullptr) {
// No candidates found.
*out_type = nullptr;
@@ -148,7 +151,7 @@ AddResult AddTransformsForCompressedAudio(
DCHECK_EQ((*best)->scheme(), StreamType::Scheme::kLpcm);
// Need to decode. Create a decoder and go from there.
- DecoderPtr decoder;
+ std::shared_ptr<Decoder> decoder;
Result result = Decoder::Create(in_type_ptr, &decoder);
if (result != Result::kOk) {
// No decoder found.
@@ -156,7 +159,7 @@ AddResult AddTransformsForCompressedAudio(
return AddResult::kFailed;
}
- *output = engine->ConnectOutputToPart(*output, engine->Add(decoder)).output();
+ *output = graph->ConnectOutputToPart(*output, graph->Add(decoder)).output();
*out_type = decoder->output_stream_type();
return AddResult::kProgressed;
@@ -169,10 +172,10 @@ AddResult AddTransformsForCompressedAudio(
AddResult AddTransformsForLpcm(
const LpcmStreamType& in_type,
const LpcmStreamTypeSet& out_type_set,
- Engine* engine,
- Engine::Output* output,
- StreamTypePtr* out_type) {
- DCHECK(engine);
+ Graph* graph,
+ OutputRef* output,
+ std::unique_ptr<StreamType>* out_type) {
+ DCHECK(graph);
DCHECK(out_type);
// TODO(dalesat): Room for more intelligence here wrt transform ordering and
@@ -180,9 +183,9 @@ AddResult AddTransformsForLpcm(
if (in_type.sample_format() != out_type_set.sample_format() &&
out_type_set.sample_format() != LpcmStreamType::SampleFormat::kAny) {
// The reformatter will fix interleave conversion.
- *output = engine->ConnectOutputToPart(
+ *output = graph->ConnectOutputToPart(
*output,
- engine->Add(LpcmReformatter::Create(in_type, out_type_set))).output();
+ graph->Add(LpcmReformatter::Create(in_type, out_type_set))).output();
}
if (!out_type_set.channels().contains(in_type.channels())) {
@@ -216,14 +219,16 @@ AddResult AddTransformsForLpcm(
// type. Otherwise, *out_type is set to nullptr.
AddResult AddTransformsForLpcm(
const LpcmStreamType& in_type,
- const StreamTypeSetsPtr& out_type_sets,
- Engine* engine,
- Engine::Output* output,
- StreamTypePtr* out_type) {
- DCHECK(engine);
+ const std::unique_ptr<std::vector<std::unique_ptr<StreamTypeSet>>>&
+ out_type_sets,
+ Graph* graph,
+ OutputRef* output,
+ std::unique_ptr<StreamType>* out_type) {
+ DCHECK(graph);
DCHECK(out_type);
- const StreamTypeSetPtr* best = FindBestLpcm(in_type, out_type_sets);
+ const std::unique_ptr<StreamTypeSet>* best =
+ FindBestLpcm(in_type, out_type_sets);
if (best == nullptr) {
// TODO(dalesat): Support a compressed output type by encoding.
NOTREACHED() << "conversion using encoder not supported";
@@ -242,7 +247,7 @@ AddResult AddTransformsForLpcm(
return AddTransformsForLpcm(
in_type,
*(*best)->lpcm(),
- engine,
+ graph,
output,
out_type);
default:
@@ -257,13 +262,14 @@ AddResult AddTransformsForLpcm(
// (out_type_sets). If the call succeeds, *out_type is set to the new output
// type. Otherwise, *out_type is set to nullptr.
AddResult AddTransforms(
- const StreamTypePtr& in_type,
- const StreamTypeSetsPtr& out_type_sets,
- Engine* engine,
- Engine::Output* output,
- StreamTypePtr* out_type) {
+ const std::unique_ptr<StreamType>& in_type,
+ const std::unique_ptr<std::vector<std::unique_ptr<StreamTypeSet>>>&
+ out_type_sets,
+ Graph* graph,
+ OutputRef* output,
+ std::unique_ptr<StreamType>* out_type) {
DCHECK(in_type);
- DCHECK(engine);
+ DCHECK(graph);
DCHECK(out_type);
switch (in_type->scheme()) {
@@ -271,7 +277,7 @@ AddResult AddTransforms(
return AddTransformsForLpcm(
*in_type->lpcm(),
out_type_sets,
- engine,
+ graph,
output,
out_type);
case StreamType::Scheme::kCompressedAudio:
@@ -279,7 +285,7 @@ AddResult AddTransforms(
*in_type->compressed_audio(),
in_type,
out_type_sets,
- engine,
+ graph,
output,
out_type);
default:
@@ -293,33 +299,34 @@ AddResult AddTransforms(
} // namespace
bool BuildConversionPipeline(
- const StreamTypePtr& in_type,
- const StreamTypeSetsPtr& out_type_sets,
- Engine* engine,
- Engine::Output* output,
- StreamTypePtr* out_type) {
+ const std::unique_ptr<StreamType>& in_type,
+ const std::unique_ptr<std::vector<std::unique_ptr<StreamTypeSet>>>&
+ out_type_sets,
+ Graph* graph,
+ OutputRef* output,
+ std::unique_ptr<StreamType>* out_type) {
DCHECK(in_type);
DCHECK(out_type_sets);
- DCHECK(engine);
+ DCHECK(graph);
DCHECK(output);
DCHECK(out_type);
- Engine::Output out = *output;
+ OutputRef out = *output;
- const StreamTypePtr* type_to_convert = &in_type;
- StreamTypePtr next_in_type;
+ const std::unique_ptr<StreamType>* type_to_convert = &in_type;
+ std::unique_ptr<StreamType> next_in_type;
while (true) {
- StreamTypePtr converted_type;
+ std::unique_ptr<StreamType> converted_type;
switch (AddTransforms(
*type_to_convert,
out_type_sets,
- engine,
+ graph,
&out,
&converted_type)) {
case AddResult::kFailed:
// Failed to find a suitable conversion. Return the pipeline to its
// original state.
- engine->RemovePartsConnectedToOutput(*output);
+ graph->RemovePartsConnectedToOutput(*output);
*out_type = nullptr;
return false;
case AddResult::kProgressed:
« no previous file with comments | « services/media/framework/conversion_pipeline_builder.h ('k') | services/media/framework/engine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698