blob: 7117e7bb2d32b8e6eedeb7bf907135c761342c3f [file] [log] [blame]
// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file contains the implementation of `SodaRecognizerImpl` when SODA is
// not intended to be supported.
// Suppress unused-private-field since this fake class impl is deliberately
// non-functional and needn't reference all variables.
#pragma GCC diagnostic ignored "-Wunused-private-field"
#include "ml/soda_recognizer_impl.h"
namespace ml {
namespace {
using ::chromeos::machine_learning::mojom::EndpointReason;
using ::chromeos::machine_learning::mojom::FinalResult;
using ::chromeos::machine_learning::mojom::FinalResultPtr;
using ::chromeos::machine_learning::mojom::SodaClient;
using ::chromeos::machine_learning::mojom::SodaConfigPtr;
using ::chromeos::machine_learning::mojom::SodaRecognizer;
using ::chromeos::machine_learning::mojom::SpeechRecognizerEvent;
using ::chromeos::machine_learning::mojom::SpeechRecognizerEventPtr;
constexpr char kOnDeviceSpeechNotSupportedMessage[] =
"On-device speech is not supported.";
void SodaCallback(const char* soda_response_str,
int size,
void* soda_recognizer_impl) {
reinterpret_cast<SodaRecognizerImpl*>(soda_recognizer_impl)
->OnSodaEvent(std::string());
}
} // namespace
bool SodaRecognizerImpl::Create(
SodaConfigPtr spec,
mojo::PendingRemote<SodaClient> soda_client,
mojo::PendingReceiver<SodaRecognizer> soda_recognizer) {
auto recognizer_impl = new SodaRecognizerImpl(
std::move(spec), std::move(soda_client), std::move(soda_recognizer));
// Set the disconnection handler to strongly bind `recognizer_impl` to delete
// `recognizer_impl` when the connection is gone.
recognizer_impl->receiver_.set_disconnect_handler(base::Bind(
[](const SodaRecognizerImpl* const recognizer_impl) {
delete recognizer_impl;
},
base::Unretained(recognizer_impl)));
return recognizer_impl->successfully_loaded_;
}
void SodaRecognizerImpl::AddAudio(const std::vector<uint8_t>& audio) {
// Immediately sends the error message to client.
SodaCallback(nullptr, 0, this);
}
void SodaRecognizerImpl::Stop() {
// Immediately sends the error message to client.
SodaCallback(nullptr, 0, this);
}
void SodaRecognizerImpl::Start() {
// Immediately sends the error message to client.
SodaCallback(nullptr, 0, this);
}
void SodaRecognizerImpl::MarkDone() {
// Immediately sends the error message to client.
SodaCallback(nullptr, 0, this);
}
void SodaRecognizerImpl::OnSodaEvent(const std::string& ignored_response) {
SpeechRecognizerEventPtr event = SpeechRecognizerEvent::New();
FinalResultPtr final_result = FinalResult::New();
final_result->final_hypotheses.push_back(kOnDeviceSpeechNotSupportedMessage);
final_result->endpoint_reason = EndpointReason::ENDPOINT_UNKNOWN;
event->set_final_result(std::move(final_result));
client_remote_->OnSpeechRecognizerEvent(std::move(event));
}
SodaRecognizerImpl::SodaRecognizerImpl(
SodaConfigPtr spec,
mojo::PendingRemote<SodaClient> soda_client,
mojo::PendingReceiver<SodaRecognizer> soda_recognizer)
: successfully_loaded_(true),
recognizer_(nullptr),
receiver_(this, std::move(soda_recognizer)),
client_remote_(std::move(soda_client)) {}
SodaRecognizerImpl::~SodaRecognizerImpl() = default;
} // namespace ml