From ffca21f2743a7b367fa212799c6e2fea6190dd5d Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 3 Mar 2015 16:53:59 +0100 Subject: initial commit for kodi master --- xbmc/addons/Visualisation.h | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 xbmc/addons/Visualisation.h (limited to 'xbmc/addons/Visualisation.h') diff --git a/xbmc/addons/Visualisation.h b/xbmc/addons/Visualisation.h new file mode 100644 index 0000000..0a2a1cb --- /dev/null +++ b/xbmc/addons/Visualisation.h @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2005-2013 Team XBMC + * http://xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, see + * . + * + */ +#pragma once + +#include "AddonDll.h" +#include "cores/IAudioCallback.h" +#include "include/xbmc_vis_types.h" +#include "guilib/IRenderingCallback.h" + +#include +#include +#include + +#define AUDIO_BUFFER_SIZE 512 // MUST BE A POWER OF 2!!! +#define MAX_AUDIO_BUFFERS 16 + +class CCriticalSection; + +typedef DllAddon DllVisualisation; + +class CAudioBuffer +{ +public: + CAudioBuffer(int iSize); + virtual ~CAudioBuffer(); + const float* Get() const; + void Set(const float* psBuffer, int iSize); +private: + CAudioBuffer(); + float* m_pBuffer; + int m_iLen; +}; + +namespace ADDON +{ + class CVisualisation : public CAddonDll + , public IAudioCallback + , public IRenderingCallback + { + public: + CVisualisation(const ADDON::AddonProps &props) : CAddonDll(props) {} + CVisualisation(const cp_extension_t *ext) : CAddonDll(ext) {} + virtual void OnInitialize(int iChannels, int iSamplesPerSec, int iBitsPerSample); + virtual void OnAudioData(const float* pAudioData, int iAudioDataLength); + bool Create(int x, int y, int w, int h, void *device); + void Start(int iChannels, int iSamplesPerSec, int iBitsPerSample, const std::string &strSongName); + void AudioData(const float *pAudioData, int iAudioDataLength, float *pFreqData, int iFreqDataLength); + void Render(); + void Stop(); + void GetInfo(VIS_INFO *info); + bool OnAction(VIS_ACTION action, void *param = NULL); + bool UpdateTrack(); + bool HasSubModules() { return !m_submodules.empty(); } + bool IsLocked(); + unsigned GetPreset(); + std::string GetPresetName(); + bool GetPresetList(std::vector& vecpresets); + bool GetSubModuleList(std::vector& vecmodules); + static std::string GetFriendlyName(const std::string& vis, const std::string& module); + void Destroy(); + + private: + void CreateBuffers(); + void ClearBuffers(); + + bool GetPresets(); + bool GetSubModules(); + + // attributes of the viewport we render to + int m_xPos; + int m_yPos; + int m_width; + int m_height; + + // cached preset list + std::vector m_presets; + // cached submodule list + std::vector m_submodules; + int m_currentModule; + + // audio properties + int m_iChannels; + int m_iSamplesPerSec; + int m_iBitsPerSample; + std::list m_vecBuffers; + int m_iNumBuffers; // Number of Audio buffers + bool m_bWantsFreq; + float m_fFreq[2*AUDIO_BUFFER_SIZE]; // Frequency data + bool m_bCalculate_Freq; // True if the vis wants freq data + + // track information + std::string m_AlbumThumb; + }; +} -- cgit v1.2.3