xbmc
GUIVisualisationControl.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "GUIControl.h"
12 #include "cores/AudioEngine/Interfaces/IAudioCallback.h"
13 
14 #include <list>
15 #include <string>
16 #include <vector>
17 
18 namespace KODI
19 {
20 namespace ADDONS
21 {
22 class CVisualization;
23 } // namespace ADDONS
24 } // namespace KODI
25 
27 {
28 public:
29  explicit CAudioBuffer(int iSize);
30  virtual ~CAudioBuffer();
31  const float* Get() const;
32  int Size() const;
33  void Set(const float* psBuffer, int iSize);
34 
35 private:
36  CAudioBuffer(const CAudioBuffer&) = delete;
37  CAudioBuffer& operator=(const CAudioBuffer&) = delete;
38  CAudioBuffer();
39  float* m_pBuffer;
40  int m_iLen;
41 };
42 
44 {
45 public:
47  int parentID, int controlID, float posX, float posY, float width, float height);
49  CGUIVisualisationControl* Clone() const override
50  {
51  return new CGUIVisualisationControl(*this);
52  };
53 
54  // Child functions related to IAudioCallback
55  void OnInitialize(int channels, int samplesPerSec, int bitsPerSample) override;
56  void OnAudioData(const float* audioData, unsigned int audioDataLength) override;
57 
58  // Child functions related to CGUIControl
59  void FreeResources(bool immediately = false) override;
60  void Process(unsigned int currentTime, CDirtyRegionList& dirtyregions) override;
61  void Render() override;
62  void UpdateVisibility(const CGUIListItem* item = nullptr) override;
63  bool OnAction(const CAction& action) override;
64  bool OnMessage(CGUIMessage& message) override;
65  bool CanFocus() const override { return false; }
66  bool CanFocusFromPoint(const CPoint& point) const override;
67 
68  std::string Name();
69  void UpdateTrack();
70  bool HasPresets();
71  void SetPreset(int idx);
72  bool IsLocked();
73  int GetActivePreset();
74  std::string GetActivePresetName();
75  bool GetPresetList(std::vector<std::string>& vecpresets);
76 
77 private:
78  bool InitVisualization();
79  void DeInitVisualization();
80  inline void CreateBuffers();
81  inline void ClearBuffers();
82 
83  bool m_callStart{false};
84  bool m_alreadyStarted{false};
85  bool m_attemptedLoad{false};
86  bool m_updateTrack{false};
87 
88  std::list<std::unique_ptr<CAudioBuffer>> m_vecBuffers;
89  unsigned int m_numBuffers;
90  std::vector<std::string> m_presets;
92  /* values set from "OnInitialize" IAudioCallback */
93  int m_channels;
94  int m_samplesPerSec;
95  int m_bitsPerSample;
96 
97  std::string m_albumThumb;
98  std::string m_name;
99  std::string m_presetsPath;
100  std::string m_profilePath;
102  std::unique_ptr<KODI::ADDONS::CVisualization> m_instance;
103 };
Definition: GUIListItem.h:30
Base class for controls.
Definition: GUIControl.h:75
Definition: IAudioCallback.h:15
class encapsulating information regarding a particular user action to be sent to windows and controls...
Definition: Action.h:22
Controller configuration window.
Definition: AudioDecoder.h:18
Definition: GUIVisualisationControl.h:26
Definition: GUIMessage.h:365
Definition: GUIVisualisationControl.h:43