diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/guilib/GUIVisualisationControl.h | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/guilib/GUIVisualisationControl.h')
-rw-r--r-- | xbmc/guilib/GUIVisualisationControl.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/xbmc/guilib/GUIVisualisationControl.h b/xbmc/guilib/GUIVisualisationControl.h new file mode 100644 index 0000000..5d674aa --- /dev/null +++ b/xbmc/guilib/GUIVisualisationControl.h @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "GUIControl.h" +#include "cores/AudioEngine/Interfaces/IAudioCallback.h" + +#include <list> +#include <string> +#include <vector> + +namespace KODI +{ +namespace ADDONS +{ +class CVisualization; +} // namespace ADDONS +} // namespace KODI + +class CAudioBuffer +{ +public: + explicit CAudioBuffer(int iSize); + virtual ~CAudioBuffer(); + const float* Get() const; + int Size() const; + void Set(const float* psBuffer, int iSize); + +private: + CAudioBuffer(const CAudioBuffer&) = delete; + CAudioBuffer& operator=(const CAudioBuffer&) = delete; + CAudioBuffer(); + float* m_pBuffer; + int m_iLen; +}; + +class CGUIVisualisationControl : public CGUIControl, public IAudioCallback +{ +public: + CGUIVisualisationControl( + int parentID, int controlID, float posX, float posY, float width, float height); + CGUIVisualisationControl(const CGUIVisualisationControl& from); + CGUIVisualisationControl* Clone() const override + { + return new CGUIVisualisationControl(*this); + }; //! @todo check for naughties + + // Child functions related to IAudioCallback + void OnInitialize(int channels, int samplesPerSec, int bitsPerSample) override; + void OnAudioData(const float* audioData, unsigned int audioDataLength) override; + + // Child functions related to CGUIControl + void FreeResources(bool immediately = false) override; + void Process(unsigned int currentTime, CDirtyRegionList& dirtyregions) override; + void Render() override; + void UpdateVisibility(const CGUIListItem* item = nullptr) override; + bool OnAction(const CAction& action) override; + bool OnMessage(CGUIMessage& message) override; + bool CanFocus() const override { return false; } + bool CanFocusFromPoint(const CPoint& point) const override; + + std::string Name(); + void UpdateTrack(); + bool HasPresets(); + void SetPreset(int idx); + bool IsLocked(); + int GetActivePreset(); + std::string GetActivePresetName(); + bool GetPresetList(std::vector<std::string>& vecpresets); + +private: + bool InitVisualization(); + void DeInitVisualization(); + inline void CreateBuffers(); + inline void ClearBuffers(); + + bool m_callStart{false}; + bool m_alreadyStarted{false}; + bool m_attemptedLoad{false}; + bool m_updateTrack{false}; + + std::list<std::unique_ptr<CAudioBuffer>> m_vecBuffers; + unsigned int m_numBuffers; /*!< Number of Audio buffers */ + std::vector<std::string> m_presets; /*!< cached preset list */ + + /* values set from "OnInitialize" IAudioCallback */ + int m_channels; + int m_samplesPerSec; + int m_bitsPerSample; + + std::string m_albumThumb; /*!< track information */ + std::string m_name; /*!< To add-on sended name */ + std::string m_presetsPath; /*!< To add-on sended preset path */ + std::string m_profilePath; /*!< To add-on sended profile path */ + + std::unique_ptr<KODI::ADDONS::CVisualization> m_instance; +}; |