Bug 1185235 - Implement SpeechRecognition::maxAlternatives. r=smaug

This commit is contained in:
Kelly Davis 2015-07-26 23:02:00 -04:00
Родитель 9bc7e118ef
Коммит d6c0476fde
4 изменённых файлов: 37 добавлений и 17 удалений

Просмотреть файл

@ -54,13 +54,16 @@ public:
SpeechRecognitionResultList* resultList =
new SpeechRecognitionResultList(mRecognition);
SpeechRecognitionResult* result = new SpeechRecognitionResult(mRecognition);
SpeechRecognitionAlternative* alternative =
new SpeechRecognitionAlternative(mRecognition);
ErrorResult rv;
if (0 < mRecognition->GetMaxAlternatives(rv)) { // GetMaxAlternatives can't fail
SpeechRecognitionAlternative* alternative =
new SpeechRecognitionAlternative(mRecognition);
alternative->mTranscript = mResult;
alternative->mConfidence = 100;
alternative->mTranscript = mResult;
alternative->mConfidence = 100;
result->mItems.AppendElement(alternative);
result->mItems.AppendElement(alternative);
}
resultList->mItems.AppendElement(result);
event->mRecognitionResultList = resultList;
@ -330,13 +333,16 @@ PocketSphinxSpeechRecognitionService::BuildMockResultList()
SpeechRecognitionResultList* resultList =
new SpeechRecognitionResultList(mRecognition);
SpeechRecognitionResult* result = new SpeechRecognitionResult(mRecognition);
SpeechRecognitionAlternative* alternative =
new SpeechRecognitionAlternative(mRecognition);
ErrorResult rv;
if (0 < mRecognition->GetMaxAlternatives(rv)) { // GetMaxAlternatives can't fail
SpeechRecognitionAlternative* alternative =
new SpeechRecognitionAlternative(mRecognition);
alternative->mTranscript = NS_LITERAL_STRING("Mock final result");
alternative->mConfidence = 0.0f;
alternative->mTranscript = NS_LITERAL_STRING("Mock final result");
alternative->mConfidence = 0.0f;
result->mItems.AppendElement(alternative);
result->mItems.AppendElement(alternative);
}
resultList->mItems.AppendElement(result);
return resultList;

Просмотреть файл

@ -117,6 +117,7 @@ SpeechRecognition::SpeechRecognition(nsPIDOMWindow* aOwnerWindow)
, mSpeechDetectionTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
, mSpeechGrammarList(new SpeechGrammarList(GetParentObject()))
, mInterimResults(false)
, mMaxAlternatives(1)
{
SR_LOG("created SpeechRecognition");
@ -685,14 +686,13 @@ SpeechRecognition::SetInterimResults(bool aArg)
uint32_t
SpeechRecognition::GetMaxAlternatives(ErrorResult& aRv) const
{
aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
return 0;
return mMaxAlternatives;
}
void
SpeechRecognition::SetMaxAlternatives(uint32_t aArg, ErrorResult& aRv)
{
aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
mMaxAlternatives = aArg;
return;
}

Просмотреть файл

@ -266,6 +266,17 @@ private:
// is a conforming implementation.
bool mInterimResults;
// WebSpeechAPI (http://bit.ly/1JAiqeo) states:
//
// 1. Default value is 1
// 2. Subsequent value is the "maximum number of SpeechRecognitionAlternatives per result"
//
// Pocketsphinx can only return at maximum a single SpeechRecognitionAlternative
// per SpeechRecognitionResult. So defaulting mMaxAlternatives to 1, for all non
// zero values ignoring mMaxAlternatives while for a 0 value returning no
// SpeechRecognitionAlternative per result is a conforming implementation.
uint32_t mMaxAlternatives;
void ProcessTestEventRequest(nsISupports* aSubject, const nsAString& aEventName);
const char* GetName(FSMState aId);

Просмотреть файл

@ -102,12 +102,15 @@ FakeSpeechRecognitionService::BuildMockResultList()
{
SpeechRecognitionResultList* resultList = new SpeechRecognitionResultList(mRecognition);
SpeechRecognitionResult* result = new SpeechRecognitionResult(mRecognition);
SpeechRecognitionAlternative* alternative = new SpeechRecognitionAlternative(mRecognition);
ErrorResult rv;
if (0 < mRecognition->GetMaxAlternatives(rv)) { // GetMaxAlternatives can't fail
SpeechRecognitionAlternative* alternative = new SpeechRecognitionAlternative(mRecognition);
alternative->mTranscript = NS_LITERAL_STRING("Mock final result");
alternative->mConfidence = 0.0f;
alternative->mTranscript = NS_LITERAL_STRING("Mock final result");
alternative->mConfidence = 0.0f;
result->mItems.AppendElement(alternative);
result->mItems.AppendElement(alternative);
}
resultList->mItems.AppendElement(result);
return resultList;