bool CGUIDialogAudioDSPSettings::HaveActiveMenuHooks(AE_DSP_MENUHOOK_CAT category) { /*!> Check menus are active on current stream */ AE_DSP_ADDONMAP addonMap; if (CActiveAEDSP::GetInstance().HaveMenuHooks(category) && CActiveAEDSP::GetInstance().GetEnabledAudioDSPAddons(addonMap) > 0) { for (AE_DSP_ADDONMAP_ITR itr = addonMap.begin(); itr != addonMap.end(); itr++) { AE_DSP_MENUHOOKS hooks; if (CActiveAEDSP::GetInstance().GetMenuHooks(itr->second->GetID(), category, hooks)) { for (unsigned int i = 0; i < hooks.size(); i++) { if (category != AE_DSP_MENUHOOK_MISCELLANEOUS && !m_ActiveStreamProcess->IsMenuHookModeActive(hooks[i].category, itr->second->GetID(), hooks[i].iRelevantModeId)) continue; return true; } } } } return false; }
int CGUIDialogAudioDSPManager::helper_GetDialogId(CActiveAEDSPModePtr &ModePointer, AE_DSP_MENUHOOK_CAT &MenuHook, AE_DSP_ADDON &Addon, std::string AddonName) { int dialogId = 0; if (ModePointer->HasSettingsDialog()) { AE_DSP_MENUHOOKS hooks; // Find first general settings dialog about mode if (CServiceBroker::GetADSP().GetMenuHooks(ModePointer->AddonID(), AE_DSP_MENUHOOK_SETTING, hooks)) { for (unsigned int i = 0; i < hooks.size() && dialogId == 0; i++) { if (hooks[i].iRelevantModeId == ModePointer->AddonModeNumber()) { dialogId = hooks[i].iHookId; } } } // If nothing was present, check for playback settings if (dialogId == 0 && CServiceBroker::GetADSP().GetMenuHooks(ModePointer->AddonID(), MenuHook, hooks)) { for (unsigned int i = 0; i < hooks.size() && (dialogId == 0 || dialogId != -1); i++) { if (hooks[i].iRelevantModeId == ModePointer->AddonModeNumber()) { if (!hooks[i].bNeedPlayback) { dialogId = hooks[i].iHookId; } else { dialogId = -1; } } } } if (dialogId == 0) CLog::Log(LOGERROR, "DSP Dialog Manager - %s - Present marked settings dialog of mode %s on addon %s not found", __FUNCTION__, g_localizeStrings.GetAddonString(Addon->ID(), ModePointer->ModeName()).c_str(), AddonName.c_str()); } return dialogId; }
void CGUIDialogAudioDSPSettings::GetAudioDSPMenus(CSettingGroup *group, AE_DSP_MENUHOOK_CAT category) { AE_DSP_ADDONMAP addonMap; if (CActiveAEDSP::GetInstance().GetEnabledAudioDSPAddons(addonMap) > 0) { for (AE_DSP_ADDONMAP_ITR itr = addonMap.begin(); itr != addonMap.end(); itr++) { AE_DSP_MENUHOOKS hooks; if (CActiveAEDSP::GetInstance().GetMenuHooks(itr->second->GetID(), category, hooks)) { for (unsigned int i = 0; i < hooks.size(); i++) { if (category != hooks[i].category || (category != AE_DSP_MENUHOOK_MISCELLANEOUS && !m_ActiveStreamProcess->IsMenuHookModeActive(hooks[i].category, itr->second->GetID(), hooks[i].iRelevantModeId))) continue; MenuHookMember menu; menu.addonId = itr->second->GetID(); menu.hook.category = hooks[i].category; menu.hook.iHookId = hooks[i].iHookId; menu.hook.iLocalizedStringId = hooks[i].iLocalizedStringId; menu.hook.iRelevantModeId = hooks[i].iRelevantModeId; m_Menus.push_back(menu); } } } } for (unsigned int i = 0; i < m_Menus.size(); i++) { AE_DSP_ADDON addon; if (CActiveAEDSP::GetInstance().GetAudioDSPAddon(m_Menus[i].addonId, addon) && category == m_Menus[i].hook.category) { std::string modeName = g_localizeStrings.GetAddonString(addon->ID(), m_Menus[i].hook.iLocalizedStringId); if (modeName.empty()) modeName = g_localizeStrings.Get(15041); std::string setting = StringUtils::Format("%s%i", SETTING_AUDIO_PROC_SETTINGS_MENUS, i); AddButton(group, setting, 15041, 0); } } }
void CAddonCallbacksADSP::ADSPAddMenuHook(void *addonData, AE_DSP_MENUHOOK *hook) { CActiveAEDSPAddon *client = GetAudioDSPAddon(addonData); if (!hook || !client) { CLog::Log(LOGERROR, "Audio DSP - %s - invalid handler data", __FUNCTION__); return; } AE_DSP_MENUHOOKS *hooks = client->GetMenuHooks(); if (hooks) { AE_DSP_MENUHOOK hookInt; hookInt.iHookId = hook->iHookId; hookInt.iLocalizedStringId = hook->iLocalizedStringId; hookInt.category = hook->category; hookInt.iRelevantModeId = hook->iRelevantModeId; hookInt.bNeedPlayback = hook->bNeedPlayback; /* add this new hook */ hooks->push_back(hookInt); } }
void CAddonCallbacksADSP::ADSPRemoveMenuHook(void *addonData, AE_DSP_MENUHOOK *hook) { CActiveAEDSPAddon *client = GetAudioDSPAddon(addonData); if (!hook || !client) { CLog::Log(LOGERROR, "Audio DSP - %s - invalid handler data", __FUNCTION__); return; } AE_DSP_MENUHOOKS *hooks = client->GetMenuHooks(); if (hooks) { for (unsigned int i = 0; i < hooks->size(); i++) { if (hooks->at(i).iHookId == hook->iHookId) { /* remove this hook */ hooks->erase(hooks->begin()+i); break; } } } }
bool CActiveAEDSP::GetMenuHooks(int iDSPAddonID, AE_DSP_MENUHOOK_CAT cat, AE_DSP_MENUHOOKS &hooks) { bool bReturn(false); if (iDSPAddonID < 0) return bReturn; AE_DSP_ADDON addon; if (GetReadyAudioDSPAddon(iDSPAddonID, addon) && addon->HaveMenuHooks(cat)) { AE_DSP_MENUHOOKS *addonhooks = addon->GetMenuHooks(); for (unsigned int i = 0; i < addonhooks->size(); ++i) { if (cat == AE_DSP_MENUHOOK_ALL || addonhooks->at(i).category == cat) { hooks.push_back(addonhooks->at(i)); bReturn = true; } } } return bReturn; }
void CActiveAEDSPAddon::cb_remove_menu_hook(void *kodiInstance, AE_DSP_MENUHOOK *hook) { CActiveAEDSPAddon *client = static_cast<CActiveAEDSPAddon*>(kodiInstance); if (!hook || !client) { CLog::Log(LOGERROR, "Audio DSP - %s - invalid handler data", __FUNCTION__); return; } AE_DSP_MENUHOOKS *hooks = client->GetMenuHooks(); if (hooks) { for (unsigned int i = 0; i < hooks->size(); i++) { if (hooks->at(i).iHookId == hook->iHookId) { /* remove this hook */ hooks->erase(hooks->begin()+i); break; } } } }
void CActiveAEDSPAddon::cb_add_menu_hook(void *kodiInstance, AE_DSP_MENUHOOK *hook) { CActiveAEDSPAddon *client = static_cast<CActiveAEDSPAddon*>(kodiInstance); if (!hook || !client) { CLog::Log(LOGERROR, "Audio DSP - %s - invalid handler data", __FUNCTION__); return; } AE_DSP_MENUHOOKS *hooks = client->GetMenuHooks(); if (hooks) { AE_DSP_MENUHOOK hookInt; hookInt.iHookId = hook->iHookId; hookInt.iLocalizedStringId = hook->iLocalizedStringId; hookInt.category = hook->category; hookInt.iRelevantModeId = hook->iRelevantModeId; hookInt.bNeedPlayback = hook->bNeedPlayback; /* add this new hook */ hooks->push_back(hookInt); } }
void CGUIDialogAudioDSPSettings::InitializeSettings() { CGUIDialogSettingsManualBase::InitializeSettings(); CSettingCategory *category = AddCategory(SETTING_AUDIO_CAT_MAIN, -1); if (category == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodspmainsettings'"); return; } // get all necessary setting groups CSettingGroup *groupAudioModeSel = AddGroup(category); if (groupAudioModeSel == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupAudioModeSel'"); return; } CSettingGroup *groupAudioVolumeSel = AddGroup(category); if (groupAudioVolumeSel == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupAudioVolumeSel'"); return; } CSettingGroup *groupAudioSubmenuSel = AddGroup(category); if (groupAudioSubmenuSel == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupAudioSubmenuSel'"); return; } CSettingGroup *groupSaveAsDefault = AddGroup(category); if (groupSaveAsDefault == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupSaveAsDefault'"); return; } bool usePopup = g_SkinInfo->HasSkinFile("DialogSlider.xml"); CVideoSettings &videoSettings = CMediaSettings::GetInstance().GetCurrentVideoSettings(); m_audioCaps.clear(); if (g_application.m_pPlayer->HasPlayer()) g_application.m_pPlayer->GetAudioCapabilities(m_audioCaps); m_ActiveStreamId = CActiveAEDSP::GetInstance().GetActiveStreamId(); m_ActiveStreamProcess = CActiveAEDSP::GetInstance().GetDSPProcess(m_ActiveStreamId); if (m_ActiveStreamId == (unsigned int)-1 || !m_ActiveStreamProcess) { m_iCategory = FindCategoryIndex(SETTING_AUDIO_CAT_MAIN); Close(true); return; } int modeUniqueId; m_ActiveStreamProcess->GetMasterModeTypeInformation(m_streamTypeUsed, m_baseTypeUsed, modeUniqueId); int modesAvailable = 0; for (int i = 0; i < AE_DSP_ASTREAM_AUTO; i++) { m_MasterModes[i].clear(); m_ActiveStreamProcess->GetAvailableMasterModes((AE_DSP_STREAMTYPE)i, m_MasterModes[i]); if (!m_MasterModes[i].empty()) modesAvailable++; } if (modesAvailable > 0) { /* about size() > 1, it is always the fallback (ignore of master processing) present. */ StaticIntegerSettingOptions modeEntries; if (m_MasterModes[AE_DSP_ASTREAM_BASIC].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_BASIC), AE_DSP_ASTREAM_BASIC)); if (m_MasterModes[AE_DSP_ASTREAM_MUSIC].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_MUSIC), AE_DSP_ASTREAM_MUSIC)); if (m_MasterModes[AE_DSP_ASTREAM_MOVIE].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_MOVIE), AE_DSP_ASTREAM_MOVIE)); if (m_MasterModes[AE_DSP_ASTREAM_GAME].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_GAME), AE_DSP_ASTREAM_GAME)); if (m_MasterModes[AE_DSP_ASTREAM_APP].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_APP), AE_DSP_ASTREAM_APP)); if (m_MasterModes[AE_DSP_ASTREAM_MESSAGE].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_MESSAGE), AE_DSP_ASTREAM_MESSAGE)); if (m_MasterModes[AE_DSP_ASTREAM_PHONE].size() > 1) modeEntries.push_back(std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_PHONE), AE_DSP_ASTREAM_PHONE)); if (modesAvailable > 1 && m_MasterModes[m_streamTypeUsed].size() > 1) modeEntries.insert(modeEntries.begin(), std::pair<int, int>(CActiveAEDSP::GetInstance().GetStreamTypeName(AE_DSP_ASTREAM_AUTO), AE_DSP_ASTREAM_AUTO)); AddSpinner(groupAudioModeSel, SETTING_AUDIO_MAIN_STREAMTYPE, 15021, 0, (AE_DSP_STREAMTYPE)CMediaSettings::GetInstance().GetCurrentAudioSettings().m_MasterStreamTypeSel, modeEntries); } bool AddonMasterModeSetupPresent = false; m_ModeList.clear(); for (unsigned int i = 0; i < m_MasterModes[m_streamTypeUsed].size(); i++) { if (m_MasterModes[m_streamTypeUsed][i]) { AE_DSP_ADDON addon; int modeId = m_MasterModes[m_streamTypeUsed][i]->ModeID(); if (modeId == AE_DSP_MASTER_MODE_ID_PASSOVER || modeId >= AE_DSP_MASTER_MODE_ID_INTERNAL_TYPES) { m_ModeList.push_back(make_pair(g_localizeStrings.Get(m_MasterModes[m_streamTypeUsed][i]->ModeName()), modeId)); } else if (CActiveAEDSP::GetInstance().GetAudioDSPAddon(m_MasterModes[m_streamTypeUsed][i]->AddonID(), addon)) { m_ModeList.push_back(make_pair(g_localizeStrings.GetAddonString(addon->ID(), m_MasterModes[m_streamTypeUsed][i]->ModeName()), modeId)); if (!AddonMasterModeSetupPresent) AddonMasterModeSetupPresent = m_MasterModes[m_streamTypeUsed][i]->HasSettingsDialog(); } } } m_modeTypeUsed = CMediaSettings::GetInstance().GetCurrentAudioSettings().m_MasterModes[m_streamTypeUsed][m_baseTypeUsed]; CSettingInt *spinner = AddSpinner(groupAudioModeSel, SETTING_AUDIO_MAIN_MODETYPE, 15022, 0, m_modeTypeUsed, AudioModeOptionFiller); spinner->SetOptionsFiller(AudioModeOptionFiller, this); ///----------------------- // audio settings // audio volume setting m_volume = g_application.GetVolume(false); if (!g_windowManager.IsWindowActive(WINDOW_DIALOG_AUDIO_OSD_SETTINGS)) { CSettingNumber *settingAudioVolume = AddSlider(groupAudioVolumeSel, SETTING_AUDIO_MAIN_VOLUME, 13376, 0, m_volume, 14054, VOLUME_MINIMUM, VOLUME_MAXIMUM / 100.0f, VOLUME_MAXIMUM); static_cast<CSettingControlSlider*>(settingAudioVolume->GetControl())->SetFormatter(SettingFormatterPercentAsDecibel); } // audio volume amplification setting if (SupportsAudioFeature(IPC_AUD_AMP)) AddSlider(groupAudioVolumeSel, SETTING_AUDIO_MAIN_VOLUME_AMPLIFICATION, 660, 0, videoSettings.m_VolumeAmplification, 14054, VOLUME_DRC_MINIMUM * 0.01f, (VOLUME_DRC_MAXIMUM - VOLUME_DRC_MINIMUM) / 6000.0f, VOLUME_DRC_MAXIMUM * 0.01f); ///----------------------- AddButton(groupAudioSubmenuSel, SETTING_AUDIO_MAIN_BUTTON_MASTER, 15025, 0, false, AddonMasterModeSetupPresent, -1); AddButton(groupAudioSubmenuSel, SETTING_AUDIO_MAIN_BUTTON_OUTPUT, 15026, 0, false, HaveActiveMenuHooks(AE_DSP_MENUHOOK_POST_PROCESS) || SupportsAudioFeature(IPC_AUD_OFFSET), -1); AddButton(groupAudioSubmenuSel, SETTING_AUDIO_MAIN_BUTTON_RESAMPLE, 15033, 0, false, HaveActiveMenuHooks(AE_DSP_MENUHOOK_RESAMPLE), -1); AddButton(groupAudioSubmenuSel, SETTING_AUDIO_MAIN_BUTTON_PRE_PROC, 15039, 0, false, HaveActiveMenuHooks(AE_DSP_MENUHOOK_PRE_PROCESS), -1); AddButton(groupAudioSubmenuSel, SETTING_AUDIO_MAIN_BUTTON_MISC, 15034, 0, false, HaveActiveMenuHooks(AE_DSP_MENUHOOK_MISCELLANEOUS), -1); AddButton(groupAudioSubmenuSel, SETTING_AUDIO_MAIN_BUTTON_INFO, 15027, 0, false, true, -1); ///----------------------- AddButton(groupSaveAsDefault, SETTING_AUDIO_MAIN_MAKE_DEFAULT, 12376, 0); m_Menus.clear(); /** * Audio Master mode settings Dialog init */ { CSettingCategory *categoryMaster = AddCategory(SETTING_AUDIO_CAT_MASTER, -1); if (categoryMaster == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodspmastersettings'"); return; } CSettingGroup *groupMasterMode = AddGroup(categoryMaster); if (groupMasterMode == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupMasterMode'"); return; } for (unsigned int i = 0; i < m_MasterModes[m_streamTypeUsed].size(); i++) { if (m_MasterModes[m_streamTypeUsed][i]->HasSettingsDialog()) { AE_DSP_ADDON addon; if (CActiveAEDSP::GetInstance().GetAudioDSPAddon(m_MasterModes[m_streamTypeUsed][i]->AddonID(), addon)) { AE_DSP_MENUHOOKS hooks; if (CActiveAEDSP::GetInstance().GetMenuHooks(m_MasterModes[m_streamTypeUsed][i]->AddonID(), AE_DSP_MENUHOOK_MASTER_PROCESS, hooks)) { for (unsigned int j = 0; j < hooks.size(); j++) { if (hooks[j].iRelevantModeId != m_MasterModes[m_streamTypeUsed][i]->AddonModeNumber()) continue; MenuHookMember menu; menu.addonId = m_MasterModes[m_streamTypeUsed][i]->AddonID(); menu.hook.category = hooks[j].category; menu.hook.iHookId = hooks[j].iHookId; menu.hook.iLocalizedStringId = hooks[j].iLocalizedStringId; menu.hook.iRelevantModeId = hooks[j].iRelevantModeId; m_Menus.push_back(menu); std::string setting = StringUtils::Format("%s%i", SETTING_AUDIO_MASTER_SETTINGS_MENUS, (int)m_Menus.size()-1); AddButton(groupMasterMode, setting, 15041, 0); break; } } } } } } /** * Audio post processing settings Dialog init */ { CSettingCategory *category = AddCategory(SETTING_AUDIO_CAT_POST_PROCESS, -1); if (category == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodsppostsettings'"); return; } CSettingGroup *groupInternal = AddGroup(category); if (groupInternal == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupInternal'"); return; } CSettingGroup *groupAddon = AddGroup(category); if (groupAddon == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'groupAddon'"); return; } // audio delay setting if (SupportsAudioFeature(IPC_AUD_OFFSET)) { CSettingNumber *settingAudioDelay = AddSlider(groupInternal, SETTING_AUDIO_POST_PROC_AUDIO_DELAY, 297, 0, videoSettings.m_AudioDelay, 0, -g_advancedSettings.m_videoAudioDelayRange, 0.025f, g_advancedSettings.m_videoAudioDelayRange, 297, usePopup); static_cast<CSettingControlSlider*>(settingAudioDelay->GetControl())->SetFormatter(SettingFormatterDelay); } GetAudioDSPMenus(groupAddon, AE_DSP_MENUHOOK_POST_PROCESS); } /** * Audio add-on resampling setting dialog's */ { CSettingCategory *category = AddCategory(SETTING_AUDIO_CAT_RESAMPLING, -1); if (category == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodspresamplesettings'"); return; } CSettingGroup *group = AddGroup(category); if (group == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'group'"); return; } GetAudioDSPMenus(group, AE_DSP_MENUHOOK_RESAMPLE); } /** * Audio add-on's pre processing setting dialog's */ { CSettingCategory *category = AddCategory(SETTING_AUDIO_CAT_PRE_PROCESS, -1); if (category == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodsppresettings'"); return; } CSettingGroup *group = AddGroup(category); if (group == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'group'"); return; } GetAudioDSPMenus(group, AE_DSP_MENUHOOK_PRE_PROCESS); } /** * Audio add-on's miscellaneous setting dialog's */ { CSettingCategory *category = AddCategory(SETTING_AUDIO_CAT_MISC, -1); if (category == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodspmiscsettings'"); return; } CSettingGroup *group = AddGroup(category); if (group == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group 'group'"); return; } GetAudioDSPMenus(group, AE_DSP_MENUHOOK_MISCELLANEOUS); } /** * Audio Information Dialog init */ { CSettingGroup *group; CSettingCategory *category = AddCategory(SETTING_AUDIO_CAT_PROC_INFO, -1); if (category == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings category 'audiodspprocinfo'"); return; } m_ActiveModes.clear(); m_ActiveStreamProcess->GetActiveModes(AE_DSP_MODE_TYPE_UNDEFINED, m_ActiveModes); m_ActiveModesData.resize(m_ActiveModes.size()); group = AddGroup(category, 15089); if (group == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group for '%s'", g_localizeStrings.Get(15089).c_str()); return; } m_InputChannels = StringUtils::Format("%i", m_ActiveStreamProcess->GetInputChannels()); AddInfoLabelButton(group, SETTING_STREAM_INFO_INPUT_CHANNELS, 21444, 0, m_InputChannels); m_InputChannelNames = m_ActiveStreamProcess->GetInputChannelNames(); AddInfoLabelButton(group, SETTING_STREAM_INFO_INPUT_CHANNEL_NAMES, 15091, 0, m_InputChannelNames); m_InputSamplerate = StringUtils::Format("%i Hz", (int)m_ActiveStreamProcess->GetInputSamplerate()); AddInfoLabelButton(group, SETTING_STREAM_INFO_INPUT_SAMPLERATE, 613, 0, m_InputSamplerate); group = AddGroup(category, 15090); if (group == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group for '%s'", g_localizeStrings.Get(15090).c_str()); return; } m_OutputChannels = StringUtils::Format("%i", m_ActiveStreamProcess->GetOutputChannels()); AddInfoLabelButton(group, SETTING_STREAM_INFO_OUTPUT_CHANNELS, 21444, 0, m_OutputChannels); m_OutputChannelNames = m_ActiveStreamProcess->GetOutputChannelNames(); AddInfoLabelButton(group, SETTING_STREAM_INFO_OUTPUT_CHANNEL_NAMES, 15091, 0, m_OutputChannelNames); m_OutputSamplerate = StringUtils::Format("%i Hz", (int)m_ActiveStreamProcess->GetOutputSamplerate()); AddInfoLabelButton(group, SETTING_STREAM_INFO_OUTPUT_SAMPLERATE, 613, 0, m_OutputSamplerate); group = AddGroup(category, 15081); if (group == NULL) { CLog::Log(LOGERROR, "CGUIDialogAudioDSPSettings: unable to setup settings group for '%s'", g_localizeStrings.Get(15081).c_str()); return; } m_CPUUsage = StringUtils::Format("%.02f %%", m_ActiveStreamProcess->GetCPUUsage()); AddInfoLabelButton(group, SETTING_STREAM_INFO_CPU_USAGE, 15092, 0, m_CPUUsage); bool foundPreProcess = false, foundPostProcess = false; for (unsigned int i = 0; i < m_ActiveModes.size(); i++) { AE_DSP_ADDON addon; if (CActiveAEDSP::GetInstance().GetAudioDSPAddon(m_ActiveModes[i]->AddonID(), addon)) { std::string label; switch (m_ActiveModes[i]->ModeType()) { case AE_DSP_MODE_TYPE_INPUT_RESAMPLE: group = AddGroup(category, 15087, -1, true, true); label = StringUtils::Format(g_localizeStrings.Get(15082).c_str(), m_ActiveStreamProcess->GetProcessSamplerate()); break; case AE_DSP_MODE_TYPE_OUTPUT_RESAMPLE: group = AddGroup(category, 15088, -1, true, true); label = StringUtils::Format(g_localizeStrings.Get(15083).c_str(), m_ActiveStreamProcess->GetOutputSamplerate()); break; case AE_DSP_MODE_TYPE_MASTER_PROCESS: group = AddGroup(category, 15084, -1, true, true); label = g_localizeStrings.GetAddonString(addon->ID(), m_ActiveModes[i]->ModeName()); break; case AE_DSP_MODE_TYPE_PRE_PROCESS: if (!foundPreProcess) { foundPreProcess = true; group = AddGroup(category, 15085, -1, true, true); } label = g_localizeStrings.GetAddonString(addon->ID(), m_ActiveModes[i]->ModeName()); break; case AE_DSP_MODE_TYPE_POST_PROCESS: if (!foundPostProcess) { foundPostProcess = true; group = AddGroup(category, 15086, -1, true, true); } label = g_localizeStrings.GetAddonString(addon->ID(), m_ActiveModes[i]->ModeName()); break; default: { label += g_localizeStrings.GetAddonString(addon->ID(), m_ActiveModes[i]->ModeName()); label += " - "; label += addon->GetFriendlyName(); } }; m_ActiveModesData[i].CPUUsage = StringUtils::Format("%.02f %%", m_ActiveModes[i]->CPUUsage()); MenuHookMember menu; menu.addonId = -1; AE_DSP_MENUHOOKS hooks; m_ActiveModesData[i].MenuListPtr = -1; if (CActiveAEDSP::GetInstance().GetMenuHooks(m_ActiveModes[i]->AddonID(), AE_DSP_MENUHOOK_INFORMATION, hooks)) { for (unsigned int j = 0; j < hooks.size(); j++) { if (hooks[j].iRelevantModeId != m_ActiveModes[i]->AddonModeNumber()) continue; menu.addonId = m_ActiveModes[i]->AddonID(); menu.hook.category = hooks[j].category; menu.hook.iHookId = hooks[j].iHookId; menu.hook.iLocalizedStringId = hooks[j].iLocalizedStringId; menu.hook.iRelevantModeId = hooks[j].iRelevantModeId; m_Menus.push_back(menu); m_ActiveModesData[i].MenuListPtr = m_Menus.size()-1; label += " ..."; break; } } m_ActiveModesData[i].MenuName = label; std::string settingId = StringUtils::Format("%s%i", SETTING_STREAM_INFO_MODE_CPU_USAGE, i); AddInfoLabelButton(group, settingId, 15041, 0, m_ActiveModesData[i].CPUUsage); } } } }