[Amis-vcs] SF.net SVN: amis: [2411] branches/amis3/AmisGuiMFC2
Brought to you by:
julienq,
marisademeglio
From: <dan...@us...> - 2008-03-17 03:07:27
|
Revision: 2411 http://amis.svn.sourceforge.net/amis/?rev=2411&view=rev Author: daniel_weck Date: 2008-03-16 20:07:28 -0700 (Sun, 16 Mar 2008) Log Message: ----------- - fixed a very strange memory leak Modified Paths: -------------- branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequence.h branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequencePlayer.h branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequence.cpp branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequencePlayer.cpp branches/amis3/AmisGuiMFC2/src/gui/self-voicing/datamodel/AccessibleUIDataReader.cpp branches/amis3/AmisGuiMFC2/src/gui/self-voicing/dialogs/MenuVoicing.cpp branches/amis3/AmisGuiMFC2/src/gui/self-voicing/directshow/dx_audio_player.cpp Modified: branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequence.h =================================================================== --- branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequence.h 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequence.h 2008-03-17 03:07:28 UTC (rev 2411) @@ -30,9 +30,7 @@ AudioSequenceComponent* RemoveTail(); void AddTail(AudioSequenceComponent* comp); void append(CString strTTS); - void append(amis::AudioNode* audioClip); - void prepend(CString strTTS); - void prepend(amis::AudioNode* audioClip); + void append(amis::AudioNode* audioClip, CString strTTS); AudioSequence* clone(); private: CAtlList<AudioSequenceComponent*> m_AudioSequence; Modified: branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequencePlayer.h =================================================================== --- branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequencePlayer.h 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/include/gui/self-voicing/AudioSequencePlayer.h 2008-03-17 03:07:28 UTC (rev 2411) @@ -29,7 +29,7 @@ public: string stringReplaceAll(string sourceStr, string searchStr, string replaceStr); -void playAudioPrompt(amis::AudioNode* pAudio); +bool playAudioPrompt(amis::AudioNode* pAudio); static bool InstanceExists(); Modified: branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequence.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequence.cpp 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequence.cpp 2008-03-17 03:07:28 UTC (rev 2411) @@ -38,34 +38,16 @@ comp->m_String = strTTS; m_AudioSequence.AddHead(comp); } -void AudioSequence::append(amis::AudioNode* audioClip) { +void AudioSequence::append(amis::AudioNode* audioClip, CString strTTS) { if (audioClip->getSrc().length() == 0) { int here = 1; - } AudioSequenceComponent* comp = new AudioSequenceComponent; comp->m_isAudioClip = TRUE; comp->m_AudioClip = audioClip; - comp->m_String = L""; + comp->m_String = strTTS; m_AudioSequence.AddHead(comp); } - void AudioSequence::prepend(CString strTTS) { - if (strTTS.IsEmpty()) { - TRACE(L"???????????????????????????"); - } - AudioSequenceComponent* comp = new AudioSequenceComponent; - comp->m_isAudioClip = false; - comp->m_AudioClip = 0; - comp->m_String = strTTS; - m_AudioSequence.AddTail(comp); - } - void AudioSequence::prepend(amis::AudioNode* audioClip) { - AudioSequenceComponent* comp = new AudioSequenceComponent; - comp->m_isAudioClip = TRUE; - comp->m_AudioClip = audioClip; - comp->m_String = L""; - m_AudioSequence.AddTail(comp); - } AudioSequence* AudioSequence::clone() { AudioSequence* seq = new AudioSequence; for (size_t i = 0; i < m_AudioSequence.GetCount(); i++) { Modified: branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequencePlayer.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequencePlayer.cpp 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/src/gui/self-voicing/AudioSequencePlayer.cpp 2008-03-17 03:07:28 UTC (rev 2411) @@ -610,7 +610,12 @@ } TRACE(L"\n============ PLAY AUDIO CLIP\n"); - playAudioPrompt(comp->m_AudioClip); + bool b = playAudioPrompt(comp->m_AudioClip); + + if (!b && !comp->m_String.IsEmpty()) { + bIgnoreTTSEnd = false; + TTSPlayer::Instance()->Play(comp->m_String); + } //if (fromEndEvent) {CoUninitialize();} @@ -770,11 +775,11 @@ return source_str; } -void AudioSequencePlayer::playAudioPrompt(amis::AudioNode* pAudio) +bool AudioSequencePlayer::playAudioPrompt(amis::AudioNode* pAudio) { string str = pAudio->getSrc(); if (str.length()==0) { - return; + return false; } string strFull = pAudio->getSrcExpanded(); @@ -789,7 +794,7 @@ strFull = pAudio->getSrcExpanded(); } - ambulantX::gui::dx::audio_playerX::Instance()->play(strFull.c_str()); + return ambulantX::gui::dx::audio_playerX::Instance()->play(strFull.c_str()); /* @@ -1216,13 +1221,15 @@ TextAudioPair* pair = label->getContents(); if (pair != NULL) { amis::AudioNode* audio = pair->getAudio(); + + TextNodeSV* textN = pair->getText(); + if (!Preferences::Instance()->getUseTTSNotAudio() && audio != NULL && audio->getSrc().length() != 0) { - seq->append(audio->clone()); + seq->append(audio->clone(), (textN != NULL ? textN->getTextString().c_str() : L"")); } else { - TextNodeSV* textN = pair->getText(); if (textN != NULL) { seq->append(textN->getTextString().c_str()); @@ -1247,13 +1254,15 @@ if (pair != NULL) { amis::AudioNode* audio = pair->getAudio(); + + TextNodeSV * textN = pair->getText(); + if (!Preferences::Instance()->getUseTTSNotAudio() && audio != NULL && audio->getSrc().length() != 0) { - seq->append(audio->clone()); + seq->append(audio->clone(), (textN != NULL ? textN->getTextString().c_str() : L"")); } else { - TextNodeSV * textN = pair->getText(); if (textN != NULL) { seq->append(textN->getTextString().c_str()); @@ -1271,13 +1280,15 @@ if (pair != NULL) { amis::AudioNode* audio = pair->getAudio(); + + TextNodeSV * textN = pair->getText(); + if (!Preferences::Instance()->getUseTTSNotAudio() && audio != NULL && audio->getSrc().length() != 0) { - seq->append(audio->clone()); + seq->append(audio->clone(), (textN != NULL ? textN->getTextString().c_str() : L"")); } else { - TextNodeSV * textN = pair->getText(); if (textN != NULL) { seq->append(textN->getTextString().c_str()); @@ -1298,13 +1309,14 @@ TextAudioPair* pair = pi->getContents(); if (pair != NULL) { amis::AudioNode* audio = pair->getAudio(); + TextNodeSV * textN = pair->getText(); + if (!Preferences::Instance()->getUseTTSNotAudio() && audio != NULL && audio->getSrc().length() != 0) { - seq->append(audio->clone()); + seq->append(audio->clone(), (textN != NULL ? textN->getTextString().c_str() : L"")); } else { - TextNodeSV * textN = pair->getText(); if (textN != NULL) { seq->append(textN->getTextString().c_str()); Modified: branches/amis3/AmisGuiMFC2/src/gui/self-voicing/datamodel/AccessibleUIDataReader.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/self-voicing/datamodel/AccessibleUIDataReader.cpp 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/src/gui/self-voicing/datamodel/AccessibleUIDataReader.cpp 2008-03-17 03:07:28 UTC (rev 2411) @@ -339,16 +339,43 @@ //text element else if (strcmp(node_name, "text") == 0) { + if (this->mbFlag_ProcessingPromptItemRefs == true) + { + int last_prompt_item = mpData->getNumPromptItems(); + if (last_prompt_item > 0) + { + PromptItem* p_item = NULL; + p_item = mpData->getPromptItem(last_prompt_item-1); + + if (p_item != NULL) + { + TextNodeSV* p_text = new TextNodeSV(); + + string mnemonic; + mnemonic.assign(SimpleAttrs::get("mnemonic", &attributes)); + if (!mnemonic.empty()) + { + + p_text->setMnemonic(mnemonic); + } + + mpRecentTextNode = p_text; + + mbFlag_GetChars = true; + p_item->getContents()->setText(p_text); + } + } + } else if (mpRecentLabel != NULL && mpRecentPrompt == NULL) { TextNodeSV* p_text = new TextNodeSV(); - - string mnemonic; - mnemonic.assign(SimpleAttrs::get("mnemonic", &attributes)); - if (!mnemonic.empty()) - { + + string mnemonic; + mnemonic.assign(SimpleAttrs::get("mnemonic", &attributes)); + if (!mnemonic.empty()) + { p_text->setMnemonic(mnemonic); - + } mpRecentTextNode = p_text; @@ -381,14 +408,14 @@ if (p_item->getPromptItemType() == PROMPT_ITEM) { TextNodeSV* p_text = new TextNodeSV(); - - string mnemonic; - mnemonic.assign(SimpleAttrs::get("mnemonic", &attributes)); - if (!mnemonic.empty()) - { + string mnemonic; + mnemonic.assign(SimpleAttrs::get("mnemonic", &attributes)); + if (!mnemonic.empty()) + { + p_text->setMnemonic(mnemonic); - + } mpRecentTextNode = p_text; @@ -398,7 +425,13 @@ } } } - else if (this->mbFlag_ProcessingPromptItemRefs == true) + + } + + //audio element + else if (strcmp(node_name, "audio") == 0) + { + if (this->mbFlag_ProcessingPromptItemRefs == true) { int last_prompt_item = mpData->getNumPromptItems(); if (last_prompt_item > 0) @@ -408,38 +441,29 @@ if (p_item != NULL) { - TextNodeSV* p_text = new TextNodeSV(); - - string mnemonic; - mnemonic.assign(SimpleAttrs::get("mnemonic", &attributes)); - if (!mnemonic.empty()) - { + amis::AudioNode* p_audio = new amis::AudioNode(); - p_text->setMnemonic(mnemonic); + string src; + src.assign(SimpleAttrs::get("src", &attributes)); + if (!src.empty()) + { + p_audio->setSrc(src); } - - mpRecentTextNode = p_text; - - mbFlag_GetChars = true; - p_item->getContents()->setText(p_text); + + p_item->getContents()->setAudio(p_audio); } } - } - } - - //audio element - else if (strcmp(node_name, "audio") == 0) - { + } else if (mpRecentLabel != NULL && mpRecentPrompt == NULL) { amis::AudioNode* p_audio = new amis::AudioNode(); - - string src; - src.assign(SimpleAttrs::get("src", &attributes)); - if (!src.empty()) - { + string src; + src.assign(SimpleAttrs::get("src", &attributes)); + if (!src.empty()) + { + p_audio->setSrc(src); } @@ -469,13 +493,13 @@ if (p_item->getPromptItemType() == PROMPT_ITEM) { amis::AudioNode* p_audio = new amis::AudioNode(); - - string src; - src.assign(SimpleAttrs::get("src", &attributes)); - if (!src.empty()) - { + + string src; + src.assign(SimpleAttrs::get("src", &attributes)); + if (!src.empty()) + { p_audio->setSrc(src); - + } @@ -483,29 +507,6 @@ } } } - else if (this->mbFlag_ProcessingPromptItemRefs == true) - { - int last_prompt_item = mpData->getNumPromptItems(); - if (last_prompt_item > 0) - { - PromptItem* p_item = NULL; - p_item = mpData->getPromptItem(last_prompt_item-1); - - if (p_item != NULL) - { - amis::AudioNode* p_audio = new amis::AudioNode(); - - string src; - src.assign(SimpleAttrs::get("src", &attributes)); - if (!src.empty()) - { - p_audio->setSrc(src); - } - - p_item->getContents()->setAudio(p_audio); - } - } - } } //icon element @@ -695,16 +696,17 @@ } this->mpRecentPrompt = p_prompt; - + + if (this->mbFlag_ProcessingGeneralPrompts == true) + { + mpData->addPrompt(mpRecentPrompt); + } + else //if we are processing a label, then the prompt belongs to it if (mpRecentLabel != NULL) { mpRecentLabel->setPrompt(mpRecentPrompt); } - else if (this->mbFlag_ProcessingGeneralPrompts == true) - { - mpData->addPrompt(mpRecentPrompt); - } //else it belongs to a dialog else Modified: branches/amis3/AmisGuiMFC2/src/gui/self-voicing/dialogs/MenuVoicing.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/self-voicing/dialogs/MenuVoicing.cpp 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/src/gui/self-voicing/dialogs/MenuVoicing.cpp 2008-03-17 03:07:28 UTC (rev 2411) @@ -403,7 +403,9 @@ p_audio = p_note->getAudio(0); if (p_audio != NULL) { - seq->append(p_audio->clone()); + amis::TextNode* p_text = NULL; + p_text = p_note->getText(); + seq->append(p_audio->clone(), (p_text != NULL ? p_text->getTextString().c_str() : L"")); AudioSequencePlayer::Instance()->Play(seq); return; } Modified: branches/amis3/AmisGuiMFC2/src/gui/self-voicing/directshow/dx_audio_player.cpp =================================================================== --- branches/amis3/AmisGuiMFC2/src/gui/self-voicing/directshow/dx_audio_player.cpp 2008-03-16 23:09:37 UTC (rev 2410) +++ branches/amis3/AmisGuiMFC2/src/gui/self-voicing/directshow/dx_audio_player.cpp 2008-03-17 03:07:28 UTC (rev 2411) @@ -75,7 +75,7 @@ hResult = E_FAIL; #ifdef SINGLE_THREAD_HACK if (pPlayer->m_media_event == NULL) { - Sleep(100); + //Sleep(100); continue; } #endif @@ -311,7 +311,7 @@ pIMES = NULL; #endif -Sleep(100); +//Sleep(100); TRACE(L"\n####### -- STOP DX || AFTER END THREAD\n"); @@ -736,7 +736,7 @@ else errorX("%s: DirectX error 0x%x", url.c_str(), hr); */ - + release_player(); LeaveCriticalSection(&m_csSequence); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |