Compare commits
No commits in common. "main" and "gh-pages" have entirely different histories.
32
.gitignore
vendored
32
.gitignore
vendored
@ -1,32 +0,0 @@
|
||||
###################################
|
||||
# backup files
|
||||
###################################
|
||||
*~
|
||||
*.swp
|
||||
*.old
|
||||
*.bck
|
||||
|
||||
###################################
|
||||
# compiled files
|
||||
###################################
|
||||
*.pyc
|
||||
|
||||
###################################
|
||||
# Packages #
|
||||
###################################
|
||||
# it's better to unpack these files and commit the raw source
|
||||
# git has its own built in compression methods
|
||||
*.7z
|
||||
*.dmg
|
||||
*.gz
|
||||
*.iso
|
||||
*.jar
|
||||
*.rar
|
||||
*.tar
|
||||
*.zip
|
||||
|
||||
|
||||
###################################
|
||||
# out folder
|
||||
###################################
|
||||
out/
|
373
LICENSE
373
LICENSE
@ -1,373 +0,0 @@
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
20
README.md
20
README.md
@ -1,20 +1,4 @@
|
||||
# audio-drain
|
||||
(MPL v2.0) audio: processing pipe for simple agorithms (resampling, change format, reorder channel, volume ...) 1 flow
|
||||
------------------------------
|
||||
|
||||
[![Build Status](https://travis-ci.org/musicdsp/audio-drain.svg?branch=master)](https://travis-ci.org/musicdsp/audio-drain)
|
||||
Nothing else ...
|
||||
|
||||
License (MPL v2.0)
|
||||
=====================
|
||||
Copyright audio Edouard DUPIN
|
||||
|
||||
Licensed under the Mozilla Public License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.mozilla.org/MPL/2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
@ -1,127 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#include <audio/drain/Algo.hpp>
|
||||
#include <etk/Function.hpp>
|
||||
#include "debug.hpp"
|
||||
|
||||
audio::drain::Algo::Algo() :
|
||||
m_temporary(false),
|
||||
m_outputData(),
|
||||
m_formatSize(0),
|
||||
m_needProcess(false) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::Algo::init() {
|
||||
// set notification callback :
|
||||
m_input.setCallback([=](){audio::drain::Algo::configurationChangeLocal();});
|
||||
m_output.setCallback([=](){audio::drain::Algo::configurationChangeLocal();});
|
||||
// first configure ==> update the internal parameters
|
||||
configurationChange();
|
||||
}
|
||||
|
||||
void audio::drain::Algo::configurationChange() {
|
||||
m_needProcess = false;
|
||||
if (m_input.getFormat() != m_output.getFormat()) {
|
||||
m_needProcess = true;
|
||||
}
|
||||
if (m_input.getMap() != m_output.getMap()) {
|
||||
m_needProcess = true;
|
||||
}
|
||||
if (m_input.getFrequency() != m_output.getFrequency()) {
|
||||
m_needProcess = true;
|
||||
}
|
||||
switch (m_output.getFormat()) {
|
||||
case audio::format_int8:
|
||||
m_formatSize = sizeof(int8_t);
|
||||
break;
|
||||
case audio::format_int16:
|
||||
m_formatSize = sizeof(int16_t);
|
||||
break;
|
||||
case audio::format_int24:
|
||||
case audio::format_int16_on_int32:
|
||||
case audio::format_int32:
|
||||
m_formatSize = sizeof(int32_t);
|
||||
break;
|
||||
case audio::format_float:
|
||||
m_formatSize = sizeof(float);
|
||||
break;
|
||||
case audio::format_double:
|
||||
m_formatSize = sizeof(double);
|
||||
break;
|
||||
case audio::format_unknow:
|
||||
DRAIN_VERBOSE("format not configured...");
|
||||
m_formatSize = 8;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
etk::String audio::drain::Algo::getDotDesc() {
|
||||
etk::String out;
|
||||
if (m_input.getFormat() != m_output.getFormat()) {
|
||||
out += "\\nformat: " + etk::toString(m_input.getFormat()) + "->" + etk::toString(m_output.getFormat());
|
||||
}
|
||||
if (m_input.getMap() != m_output.getMap()) {
|
||||
out += "\\nmap: " + etk::toString(m_input.getMap()) + "->" + etk::toString(m_output.getMap());
|
||||
}
|
||||
if (m_input.getFrequency() != m_output.getFrequency()) {
|
||||
out += "\\nsamplerate: " + etk::toString(m_input.getFrequency()) + "->" + etk::toString(m_output.getFrequency());
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
size_t audio::drain::Algo::needInputData(size_t _output) {
|
||||
size_t input = _output;
|
||||
/* NOT good at all ...
|
||||
if (m_input.getFormat() != m_output.getFormat()) {
|
||||
int32_t inputSize = 3;
|
||||
switch (m_input.getFormat()) {
|
||||
case format_int16:
|
||||
inputSize = sizeof(int16_t);
|
||||
break;
|
||||
case format_int16_on_int32:
|
||||
case format_int32:
|
||||
inputSize = sizeof(int32_t);
|
||||
break;
|
||||
case format_float:
|
||||
inputSize = sizeof(float);
|
||||
break;
|
||||
}
|
||||
if (inputSize != m_formatSize) {
|
||||
input *= inputSize;
|
||||
input /= m_formatSize;
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
if (m_input.getMap().size() != m_output.getMap().size()) {
|
||||
input *= m_input.getMap().size();
|
||||
input /= m_output.getMap().size();
|
||||
}
|
||||
*/
|
||||
|
||||
if (m_input.getFrequency() != m_output.getFrequency()) {
|
||||
input *= m_input.getFrequency();
|
||||
input /= m_output.getFrequency();
|
||||
// to prevent missing data in the resampler
|
||||
input += 2;
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
void audio::drain::Algo::setStatusFunction(algoStatusFunction _newFunction) {
|
||||
m_statusFunction = _newFunction;
|
||||
}
|
||||
|
||||
void audio::drain::Algo::generateStatus(const etk::String& _status) {
|
||||
if (m_statusFunction != null) {
|
||||
if (m_name.size() == 0) {
|
||||
m_statusFunction(m_type, _status);
|
||||
} else {
|
||||
m_statusFunction(m_name, _status);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,221 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/String.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
#include <audio/format.hpp>
|
||||
#include <audio/channel.hpp>
|
||||
#include <echrono/Steady.hpp>
|
||||
#include <etk/Function.hpp>
|
||||
#include <ememory/memory.hpp>
|
||||
#include "AutoLogInOut.hpp"
|
||||
#include "IOFormatInterface.hpp"
|
||||
#include <audio/Time.hpp>
|
||||
#include <audio/Duration.hpp>
|
||||
#include "debug.hpp"
|
||||
|
||||
/**
|
||||
* @brief Audio library namespace
|
||||
*/
|
||||
namespace audio {
|
||||
/**
|
||||
* @brief audio-algo library namespace
|
||||
*/
|
||||
namespace drain{
|
||||
typedef etk::Function<void (const etk::String& _origin, const etk::String& _status)> algoStatusFunction;
|
||||
class Algo : public ememory::EnableSharedFromThis<Algo> {
|
||||
private:
|
||||
etk::String m_name;
|
||||
public:
|
||||
const etk::String& getName() const {
|
||||
return m_name;
|
||||
}
|
||||
void setName(const etk::String& _name) {
|
||||
m_name = _name;
|
||||
}
|
||||
protected:
|
||||
etk::String m_type;
|
||||
public:
|
||||
const etk::String& getType() const {
|
||||
return m_type;
|
||||
}
|
||||
void setType(const etk::String& _type) {
|
||||
m_type = _type;
|
||||
}
|
||||
public:
|
||||
virtual etk::String getDotDesc();
|
||||
private:
|
||||
bool m_temporary;
|
||||
public:
|
||||
void setTemporary() {
|
||||
m_temporary = true;
|
||||
}
|
||||
bool getTemporary() const {
|
||||
return m_temporary;
|
||||
}
|
||||
private:
|
||||
algoStatusFunction m_statusFunction;
|
||||
public:
|
||||
void setStatusFunction(algoStatusFunction _newFunction);
|
||||
protected:
|
||||
void generateStatus(const etk::String& _status);
|
||||
protected:
|
||||
etk::Vector<int8_t> m_outputData;
|
||||
int8_t m_formatSize; //!< sample size
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
Algo();
|
||||
void init();
|
||||
public:
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~Algo() {};
|
||||
protected:
|
||||
bool m_needProcess; //!< if no change, then no need to process, just forward buffer...
|
||||
IOFormatInterface m_input; //!< Input audio property
|
||||
public:
|
||||
void setInputFormat(const IOFormatInterface& _format) {
|
||||
m_input.set(_format.getMap(), _format.getFormat(), _format.getFrequency());
|
||||
}
|
||||
const IOFormatInterface& getInputFormat() const {
|
||||
return m_input;
|
||||
}
|
||||
IOFormatInterface& getInputFormat() {
|
||||
return m_input;
|
||||
}
|
||||
protected:
|
||||
IOFormatInterface m_output; //!< Output audio property
|
||||
public:
|
||||
void setOutputFormat(const IOFormatInterface& _format) {
|
||||
m_output.set(_format.getMap(), _format.getFormat(), _format.getFrequency());
|
||||
}
|
||||
const IOFormatInterface& getOutputFormat() const {
|
||||
return m_output;
|
||||
}
|
||||
IOFormatInterface& getOutputFormat() {
|
||||
return m_output;
|
||||
}
|
||||
private:
|
||||
void configurationChangeLocal() {
|
||||
if ( m_output.getConfigured() == true
|
||||
&& m_output.getConfigured() == true) {
|
||||
configurationChange();
|
||||
}
|
||||
}
|
||||
public:
|
||||
/**
|
||||
* @brief Called when a parameter change
|
||||
*/
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
/**
|
||||
* @brief Process Algorithm
|
||||
* @param[in] _time Current buffer Time
|
||||
* @param[in] _input input pointer data (not free)
|
||||
* @param[in] _inputNbChunk Number of chunk in the buffer
|
||||
* @param[in] _output Output buffer (provide here) Do not free (can be the input buffer)
|
||||
* @param[in] _outputNbChunk Number of chunk in the output buffer
|
||||
* @return true The process is done corectly
|
||||
* @return false An error occured
|
||||
*/
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk) = 0;
|
||||
/**
|
||||
* @brief To approximatively have the correct input of data of every algo ge call it to have an aproxomation of input data needed.
|
||||
* @param[in] _output number of chunk estimate in output
|
||||
* @return number of sample needed to have nearly the good number of sample
|
||||
*/
|
||||
// TODO : Manage the change of the timestamp ...
|
||||
virtual size_t needInputData(size_t _output);
|
||||
protected: // note when nothing ==> support all type
|
||||
etk::Vector<audio::format> m_supportedFormat;
|
||||
public:
|
||||
virtual etk::Vector<audio::format> getFormatSupportedInput() {
|
||||
if (m_output.getConfigured() == true) {
|
||||
etk::Vector<audio::format> out;
|
||||
out.pushBack(m_output.getFormat());
|
||||
return out;
|
||||
}
|
||||
return m_supportedFormat;
|
||||
};
|
||||
virtual etk::Vector<audio::format> getFormatSupportedOutput() {
|
||||
if (m_input.getConfigured() == true) {
|
||||
etk::Vector<audio::format> out;
|
||||
out.pushBack(m_input.getFormat());
|
||||
return out;
|
||||
}
|
||||
return m_supportedFormat;
|
||||
};
|
||||
protected: // note when nothing ==> support all type
|
||||
etk::Vector<etk::Vector<audio::channel> > m_supportedMap;
|
||||
public:
|
||||
virtual etk::Vector<etk::Vector<audio::channel> > getMapSupportedInput() {
|
||||
if (m_output.getConfigured() == true) {
|
||||
etk::Vector<etk::Vector<audio::channel> > out;
|
||||
out.pushBack(m_output.getMap());
|
||||
return out;
|
||||
}
|
||||
return m_supportedMap;
|
||||
};
|
||||
virtual etk::Vector<etk::Vector<audio::channel> > getMapSupportedOutput() {
|
||||
if (m_input.getConfigured() == true) {
|
||||
etk::Vector<etk::Vector<audio::channel> > out;
|
||||
out.pushBack(m_input.getMap());
|
||||
return out;
|
||||
}
|
||||
return m_supportedMap;
|
||||
};
|
||||
protected: // note when nothing ==> support all type
|
||||
etk::Vector<float> m_supportedFrequency;
|
||||
public:
|
||||
virtual etk::Vector<float> getFrequencySupportedInput() {
|
||||
if (m_output.getConfigured() == true) {
|
||||
etk::Vector<float> out;
|
||||
out.pushBack(m_output.getFrequency());
|
||||
return out;
|
||||
}
|
||||
return m_supportedFrequency;
|
||||
};
|
||||
virtual etk::Vector<float> getFrequencySupportedOutput() {
|
||||
if (m_input.getConfigured() == true) {
|
||||
etk::Vector<float> out;
|
||||
out.pushBack(m_input.getFrequency());
|
||||
return out;
|
||||
}
|
||||
return m_supportedFrequency;
|
||||
};
|
||||
public:
|
||||
/**
|
||||
* @brief Set a parameter in the stream flow
|
||||
* @param[in] _parameter Parameter name.
|
||||
* @param[in] _value Value to set.
|
||||
* @return true set done
|
||||
* @return false An error occured
|
||||
*/
|
||||
virtual bool setParameter(const etk::String& _parameter, const etk::String& _value) { return false; }
|
||||
/**
|
||||
* @brief Get a parameter value
|
||||
* @param[in] _parameter Parameter name.
|
||||
* @return The requested value.
|
||||
*/
|
||||
virtual etk::String getParameter(const etk::String& _parameter) const { return "[ERROR]"; }
|
||||
/**
|
||||
* @brief Get a parameter value
|
||||
* @param[in] _parameter Parameter name.
|
||||
* @return The requested value.
|
||||
*/
|
||||
virtual etk::String getParameterProperty(const etk::String& _parameter) const { return "[ERROR]"; };
|
||||
};
|
||||
}
|
||||
}
|
||||
#include "debugRemove.hpp"
|
||||
|
@ -1,17 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include "AutoLogInOut.hpp"
|
||||
#include "debug.hpp"
|
||||
|
||||
audio::drain::AutoLogInOut::AutoLogInOut(const etk::String& _value) :
|
||||
m_value(_value) {
|
||||
DRAIN_VERBOSE(" '" << m_value << "' [START]");
|
||||
}
|
||||
|
||||
audio::drain::AutoLogInOut::~AutoLogInOut() {
|
||||
DRAIN_VERBOSE(" '" << m_value << "' [STOP]");
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/String.hpp>
|
||||
#include "debug.hpp"
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
class AutoLogInOut {
|
||||
private:
|
||||
etk::String m_value;
|
||||
public:
|
||||
AutoLogInOut(const etk::String& _value);
|
||||
~AutoLogInOut();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#include "debugRemove.hpp"
|
||||
|
@ -1,208 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/ChannelReorder.hpp>
|
||||
#include "debug.hpp"
|
||||
|
||||
|
||||
audio::drain::ChannelReorder::ChannelReorder() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void audio::drain::ChannelReorder::init() {
|
||||
audio::drain::Algo::init();
|
||||
m_type = "ChannelReorder";
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::ChannelReorder> audio::drain::ChannelReorder::create() {
|
||||
ememory::SharedPtr<audio::drain::ChannelReorder> tmp(ETK_NEW(audio::drain::ChannelReorder));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void audio::drain::ChannelReorder::configurationChange() {
|
||||
audio::drain::AutoLogInOut("ChannelReorder (config)");
|
||||
audio::drain::Algo::configurationChange();
|
||||
if (m_input.getFormat() != m_output.getFormat()) {
|
||||
DRAIN_ERROR("can not support Format Change ...");
|
||||
m_needProcess = false;
|
||||
}
|
||||
if (m_input.getFrequency() != m_output.getFrequency()) {
|
||||
DRAIN_ERROR("can not support frequency Change ...");
|
||||
m_needProcess = false;
|
||||
}
|
||||
if (m_input.getMap() == m_output.getMap()) {
|
||||
// nothing to process...
|
||||
m_needProcess = false;
|
||||
DRAIN_INFO(" no need to convert ... " << m_input.getMap() << " ==> " << m_output.getMap());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::ChannelReorder::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk) {
|
||||
audio::drain::AutoLogInOut tmpLog("ChannelReorder");
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
// check if we need to process:
|
||||
if (m_needProcess == false) {
|
||||
_output = _input;
|
||||
return true;
|
||||
}
|
||||
if (_input == null) {
|
||||
_output = &(m_outputData[0]);
|
||||
_outputNbChunk = 0;
|
||||
DRAIN_ERROR("null pointer input ... ");
|
||||
return false;
|
||||
}
|
||||
m_outputData.resize(_outputNbChunk*m_output.getMap().size()*m_formatSize);
|
||||
_output = &(m_outputData[0]);
|
||||
// real process: (only depend of data size):
|
||||
switch (m_output.getFormat()) {
|
||||
case audio::format_int8:
|
||||
{
|
||||
DRAIN_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize));
|
||||
int8_t* in = static_cast<int8_t*>(_input);
|
||||
int8_t* out = static_cast<int8_t*>(_output);
|
||||
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
|
||||
int32_t convertId = -1;
|
||||
if ( m_input.getMap().size() == 1
|
||||
&& m_input.getMap()[0] == audio::channel_frontCenter) {
|
||||
convertId = 0;
|
||||
} else {
|
||||
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
|
||||
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
|
||||
convertId = jjj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
DRAIN_VERBOSE(" " << convertId << " ==> " << kkk);
|
||||
if (convertId == -1) {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = 0;
|
||||
}
|
||||
} else {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
case audio::format_int16:
|
||||
if (m_output.getMap().size() == 1) {
|
||||
DRAIN_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize));
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
int32_t val = 0;
|
||||
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
|
||||
val += in[iii*m_input.getMap().size()+jjj];
|
||||
}
|
||||
out[iii] = val/m_input.getMap().size();
|
||||
}
|
||||
} else {
|
||||
DRAIN_VERBOSE("convert " << m_input.getMap() << " ==> " << m_output.getMap() << " format=" << int32_t(m_formatSize));
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
|
||||
int32_t convertId = -1;
|
||||
if ( m_input.getMap().size() == 1
|
||||
&& m_input.getMap()[0] == audio::channel_frontCenter) {
|
||||
convertId = 0;
|
||||
} else {
|
||||
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
|
||||
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
|
||||
convertId = jjj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
DRAIN_VERBOSE(" " << convertId << " ==> " << kkk);
|
||||
if (convertId == -1) {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = 0;
|
||||
}
|
||||
} else {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
case audio::format_int24:
|
||||
case audio::format_int32:
|
||||
case audio::format_float:
|
||||
{
|
||||
DRAIN_VERBOSE("convert (2) " << m_input.getMap() << " ==> " << m_output.getMap());
|
||||
uint32_t* in = static_cast<uint32_t*>(_input);
|
||||
uint32_t* out = static_cast<uint32_t*>(_output);
|
||||
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
|
||||
int32_t convertId = -1;
|
||||
if ( m_input.getMap().size() == 1
|
||||
&& m_input.getMap()[0] == audio::channel_frontCenter) {
|
||||
convertId = 0;
|
||||
} else {
|
||||
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
|
||||
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
|
||||
convertId = jjj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (convertId == -1) {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = 0;
|
||||
}
|
||||
} else {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case audio::format_double:
|
||||
{
|
||||
DRAIN_VERBOSE("convert (2) " << m_input.getMap() << " ==> " << m_output.getMap());
|
||||
uint64_t* in = static_cast<uint64_t*>(_input);
|
||||
uint64_t* out = static_cast<uint64_t*>(_output);
|
||||
for (size_t kkk=0; kkk<m_output.getMap().size(); ++kkk) {
|
||||
int32_t convertId = -1;
|
||||
if ( m_input.getMap().size() == 1
|
||||
&& m_input.getMap()[0] == audio::channel_frontCenter) {
|
||||
convertId = 0;
|
||||
} else {
|
||||
for (size_t jjj=0; jjj<m_input.getMap().size(); ++jjj) {
|
||||
if (m_output.getMap()[kkk] == m_input.getMap()[jjj]) {
|
||||
convertId = jjj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (convertId == -1) {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = 0;
|
||||
}
|
||||
} else {
|
||||
for (size_t iii=0; iii<_outputNbChunk; ++iii) {
|
||||
out[iii*m_output.getMap().size()+kkk] = in[iii*m_input.getMap().size()+convertId];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/Algo.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
class ChannelReorder : public audio::drain::Algo {
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
ChannelReorder();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<audio::drain::ChannelReorder> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~ChannelReorder() {};
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,295 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/CircularBuffer.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
audio::drain::CircularBuffer::CircularBuffer(const audio::drain::CircularBuffer& _obj) :
|
||||
m_data(),
|
||||
m_write(null),
|
||||
m_read(null),
|
||||
m_timeRead(),
|
||||
m_capacity(0),
|
||||
m_sizeChunk(0),
|
||||
m_size(0) {
|
||||
DRAIN_CRITICAL("error");
|
||||
};
|
||||
/**
|
||||
* @brief copy operator.
|
||||
*/
|
||||
audio::drain::CircularBuffer& audio::drain::CircularBuffer::operator=(const audio::drain::CircularBuffer& _obj) {
|
||||
DRAIN_CRITICAL("error");
|
||||
return *this;
|
||||
};
|
||||
|
||||
audio::drain::CircularBuffer::CircularBuffer() :
|
||||
m_data(),
|
||||
m_write(null),
|
||||
m_read(null),
|
||||
m_timeRead(),
|
||||
m_capacity(0),
|
||||
m_sizeChunk(0),
|
||||
m_size(0) {
|
||||
// nothing to do ...
|
||||
}
|
||||
|
||||
audio::drain::CircularBuffer::~CircularBuffer() {
|
||||
m_data.clear();
|
||||
m_read = null;
|
||||
m_write = null;
|
||||
}
|
||||
|
||||
void audio::drain::CircularBuffer::setCapacity(size_t _capacity, size_t _chunkSize, uint32_t _frequency) {
|
||||
if ( _chunkSize == m_sizeChunk
|
||||
&& _capacity == m_capacity) {
|
||||
clear();
|
||||
return;
|
||||
}
|
||||
DRAIN_DEBUG("buffer setCapacity(" << _capacity << "," << _chunkSize << ")");
|
||||
if (_capacity == 0) {
|
||||
DRAIN_ERROR("set a buffer capacity with 0 data ... (reset default at 4096)");
|
||||
_capacity = 4096;
|
||||
}
|
||||
if (_chunkSize == 0) {
|
||||
DRAIN_ERROR("set a buffer capacity with chunksize = 0 ... (reset default at 8)");
|
||||
_chunkSize = 8;
|
||||
}
|
||||
m_data.clear();
|
||||
m_write = null;
|
||||
m_read = null;
|
||||
m_frequency = _frequency;
|
||||
m_capacity = _capacity;
|
||||
m_sizeChunk = _chunkSize;
|
||||
m_size = 0;
|
||||
if ( _capacity == 0
|
||||
|| _chunkSize == 0) {
|
||||
m_capacity = 0;
|
||||
m_sizeChunk = 0;
|
||||
return;
|
||||
}
|
||||
m_data.resize(m_capacity*m_sizeChunk, 0);
|
||||
m_read = &m_data[0];
|
||||
m_write = &m_data[0];
|
||||
}
|
||||
|
||||
void audio::drain::CircularBuffer::setCapacity(echrono::Duration _capacity, size_t _chunkSize, uint32_t _frequency) {
|
||||
uint32_t nbSampleNeeded = _frequency*_capacity.get()/1000000000LL;
|
||||
DRAIN_DEBUG("buffer setCapacity(" << _capacity << " ," << _chunkSize << ")");
|
||||
setCapacity(nbSampleNeeded, _chunkSize, _frequency);
|
||||
}
|
||||
|
||||
|
||||
size_t audio::drain::CircularBuffer::getUsedSizeBeforEnd() const {
|
||||
size_t size;
|
||||
if (m_read < m_write) {
|
||||
size = static_cast<uint8_t*>(m_write) - static_cast<uint8_t*>(m_read);
|
||||
// the size result is in bytes we need to have it in element
|
||||
size /= m_sizeChunk;
|
||||
} else if ( m_read == m_write
|
||||
&& m_size == 0) {
|
||||
// no element in the buffer
|
||||
size = 0;
|
||||
} else {
|
||||
size = &m_data[0] + (m_capacity*m_sizeChunk) - static_cast<uint8_t*>(m_read);
|
||||
// the size result is in bytes we need to have it in element
|
||||
size /= m_sizeChunk;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
size_t audio::drain::CircularBuffer::getFreeSizeBeforEnd() const {
|
||||
size_t size;
|
||||
size = &m_data[0]
|
||||
+ (m_capacity*m_sizeChunk)
|
||||
- static_cast<uint8_t*>(m_write);
|
||||
// the size result is in Octet we need to have it in element
|
||||
size /= m_sizeChunk;
|
||||
return size;
|
||||
}
|
||||
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk) {
|
||||
return write(_data, _nbChunk, audio::Time::now());//m_timeRead + )
|
||||
}
|
||||
|
||||
size_t audio::drain::CircularBuffer::write(const void* _data, size_t _nbChunk, const audio::Time& _time) {
|
||||
if (m_data.size() == 0) {
|
||||
DRAIN_ERROR("EMPTY Buffer");
|
||||
return _nbChunk;
|
||||
}
|
||||
size_t nbElementDrop = 0;
|
||||
size_t freeSizeBeforeEnd = getFreeSizeBeforEnd();
|
||||
size_t freeSize = m_capacity - m_size;
|
||||
// Write element in all case
|
||||
// calculate the number of element that are overwritten
|
||||
if (freeSize < _nbChunk) {
|
||||
nbElementDrop = _nbChunk - freeSize;
|
||||
}
|
||||
// if User Request a write more important than the size of the buffer ==> update the pointer to feet only on the buffer size
|
||||
if (m_capacity < _nbChunk) {
|
||||
DRAIN_WARNING("CircularBuffer Write too BIG " << _nbChunk << " buffer max size : " << m_capacity << " (keep last Elements)");
|
||||
// Move data pointer
|
||||
_data = static_cast<const uint8_t*>(_data) + (_nbChunk - m_capacity) * m_sizeChunk;
|
||||
// update size
|
||||
_nbChunk = m_capacity;
|
||||
}
|
||||
// if no element in the FIFO ==> first time write or no more data inside ==> start set the file of the read data ...
|
||||
if (m_size == 0) {
|
||||
m_timeRead = _time;
|
||||
}
|
||||
// TODO : Check time to push continuous data ...
|
||||
|
||||
if (freeSizeBeforeEnd >= _nbChunk) {
|
||||
// all Data will be copy
|
||||
memcpy(m_write, _data, _nbChunk * m_sizeChunk);
|
||||
// update Writing pointer
|
||||
if (freeSizeBeforeEnd == _nbChunk) {
|
||||
// update to the end of FIFO ==> update to the start
|
||||
m_write = &m_data[0];
|
||||
} else {
|
||||
m_write = static_cast<uint8_t*>(m_write) + _nbChunk * m_sizeChunk;
|
||||
}
|
||||
// Update the number of element in the buffer.
|
||||
m_size += _nbChunk;
|
||||
} else {
|
||||
// copy data to the end of buffer
|
||||
memcpy(m_write, _data, freeSizeBeforeEnd * m_sizeChunk);
|
||||
// update Writing pointer ==> end of buffer ==> go to the start
|
||||
m_write = &m_data[0];
|
||||
// update data pointer
|
||||
_data = static_cast<const uint8_t*>(_data) + freeSizeBeforeEnd * m_sizeChunk;
|
||||
m_size += freeSizeBeforeEnd;
|
||||
// get the number of element we need to write
|
||||
_nbChunk -= freeSizeBeforeEnd;
|
||||
// Copy the las data if needed
|
||||
if (_nbChunk != 0) {
|
||||
memcpy(m_write, _data, _nbChunk * m_sizeChunk);
|
||||
// update Writing pointer
|
||||
m_write = static_cast<uint8_t*>(m_write) + _nbChunk * m_sizeChunk;
|
||||
m_size += _nbChunk;
|
||||
}
|
||||
}
|
||||
if (nbElementDrop > 0) {
|
||||
// if drop element we need to update the reading pointer
|
||||
m_read = m_write;
|
||||
m_size = m_capacity;
|
||||
}
|
||||
// return the number of element Overwrite
|
||||
return nbElementDrop;
|
||||
}
|
||||
|
||||
size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk) {
|
||||
return read(_data, _nbChunk, m_timeRead);
|
||||
}
|
||||
|
||||
size_t audio::drain::CircularBuffer::read(void* _data, size_t _nbChunk, const audio::Time& _time) {
|
||||
size_t nbElementDrop = 0;
|
||||
// Critical section (theoriquely protected by Mutex)
|
||||
size_t usedSizeBeforeEnd = getUsedSizeBeforEnd();
|
||||
// verify if we have elements in the Buffer
|
||||
if (0 < m_size) {
|
||||
// check the time of the read :
|
||||
audio::Duration deltaTime = m_timeRead - _time;
|
||||
if (deltaTime.get() == 0) {
|
||||
// nothing to do ==> just copy data ...
|
||||
} else if (deltaTime.get() > 0) {
|
||||
// Add empty sample in the output buffer ...
|
||||
size_t nbSampleEmpty = m_frequency*deltaTime.get()/1000000000LL;
|
||||
nbSampleEmpty = etk::min(nbSampleEmpty, _nbChunk);
|
||||
DRAIN_WARNING("add Empty sample in the output buffer " << nbSampleEmpty << " / " << _nbChunk);
|
||||
memset(_data, 0, nbSampleEmpty * m_sizeChunk);
|
||||
if (nbSampleEmpty == _nbChunk) {
|
||||
return 0;
|
||||
}
|
||||
_nbChunk -= nbSampleEmpty;
|
||||
} else {
|
||||
// Remove data from the FIFO
|
||||
setReadPosition(_time);
|
||||
}
|
||||
if (m_size < _nbChunk) {
|
||||
nbElementDrop = _nbChunk - m_size;
|
||||
DRAIN_VERBOSE("crop nb sample : m_size=" << m_size << " _nbChunk=" << _nbChunk);
|
||||
_nbChunk = m_size;
|
||||
}
|
||||
m_timeRead += echrono::microseconds(_nbChunk*1000000/m_frequency);
|
||||
if (usedSizeBeforeEnd >= _nbChunk) {
|
||||
// all Data will be copy
|
||||
memcpy(_data, m_read, _nbChunk * m_sizeChunk);
|
||||
// update Writing pointer
|
||||
m_read = static_cast<uint8_t*>(m_read) + _nbChunk * m_sizeChunk;
|
||||
m_size -= _nbChunk;
|
||||
// update output pointer in case of flush with 0 data
|
||||
_data = static_cast<uint8_t*>(_data) + _nbChunk * m_sizeChunk;
|
||||
} else {
|
||||
// copy data to the end of buffer
|
||||
memcpy(_data, m_read, usedSizeBeforeEnd * m_sizeChunk);
|
||||
// update Writing pointer ==> end of buffer ==> go to the start
|
||||
m_read = &m_data[0];
|
||||
_data = static_cast<uint8_t*>(_data) + usedSizeBeforeEnd * m_sizeChunk;
|
||||
m_size -= usedSizeBeforeEnd;
|
||||
// get the number of element we need to write
|
||||
_nbChunk -= usedSizeBeforeEnd;
|
||||
// Copy the last data if needed
|
||||
if (0 != _nbChunk) {
|
||||
memcpy(_data, m_read, _nbChunk * m_sizeChunk);
|
||||
// update Writing pointer
|
||||
m_read = static_cast<uint8_t*>(m_read) + _nbChunk * m_sizeChunk;
|
||||
m_size -= _nbChunk;
|
||||
// update output pointer in case of flush with 0 data
|
||||
_data = static_cast<uint8_t*>(_data) + _nbChunk * m_sizeChunk;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nbElementDrop = _nbChunk;
|
||||
}
|
||||
if (0 < nbElementDrop) {
|
||||
// set 0 in last element of the output
|
||||
memset(_data, 0, m_sizeChunk * nbElementDrop);
|
||||
}
|
||||
// return the number of element droped
|
||||
return nbElementDrop;
|
||||
}
|
||||
|
||||
void audio::drain::CircularBuffer::setReadPosition(const audio::Time& _time) {
|
||||
// Critical section (theoriquely protected by Mutex)
|
||||
size_t usedSizeBeforeEnd = getUsedSizeBeforEnd();
|
||||
if (0 < m_size) {
|
||||
// check the time of the read :
|
||||
audio::Duration deltaTime = _time - m_timeRead;
|
||||
size_t nbSampleToRemove = int64_t(m_frequency)*int64_t(deltaTime.get())/1000000000LL;
|
||||
nbSampleToRemove = etk::min(nbSampleToRemove, m_size);
|
||||
DRAIN_VERBOSE("Remove sample in the buffer " << nbSampleToRemove << " / " << m_size);
|
||||
audio::Duration updateTime(0,(int64_t(nbSampleToRemove)*1000000000LL)/int64_t(m_frequency));
|
||||
DRAIN_VERBOSE(" add time : " << updateTime << " / " << deltaTime);
|
||||
if (usedSizeBeforeEnd >= nbSampleToRemove) {
|
||||
usedSizeBeforeEnd -= nbSampleToRemove;
|
||||
m_size -= nbSampleToRemove;
|
||||
m_read = static_cast<uint8_t*>(m_read) + nbSampleToRemove * m_sizeChunk;
|
||||
} else {
|
||||
nbSampleToRemove -= usedSizeBeforeEnd;
|
||||
m_size -= nbSampleToRemove;
|
||||
m_read = &m_data[0] + nbSampleToRemove*m_sizeChunk;
|
||||
}
|
||||
m_timeRead += updateTime;
|
||||
//m_timeRead += deltaTime;
|
||||
} else {
|
||||
m_timeRead = audio::Time();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
size_t audio::drain::CircularBuffer::getFreeSize() const {
|
||||
return m_capacity - m_size;
|
||||
}
|
||||
|
||||
void audio::drain::CircularBuffer::clear() {
|
||||
DRAIN_DEBUG("buffer clear()");
|
||||
// set pointer to the start
|
||||
m_read = &m_data[0];
|
||||
m_write = &m_data[0];
|
||||
// Clean the number of element in the buffer
|
||||
m_size = 0;
|
||||
// Clean all element inside :
|
||||
memset(&m_data[0], 0, m_sizeChunk * m_capacity);
|
||||
}
|
@ -1,140 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/types.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
#include <echrono/Steady.hpp>
|
||||
#include <audio/Time.hpp>
|
||||
#include <audio/Duration.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
/**
|
||||
* For these functions we have 4 solutions :
|
||||
* - Free Buffer
|
||||
* ----------------------------------------------------------
|
||||
* m_data | | |
|
||||
* ----------------------------------------------------------
|
||||
* m_write
|
||||
* m_read
|
||||
* - Full Buffer
|
||||
* ----------------------------------------------------------
|
||||
* m_data |****************************|***************************|
|
||||
* ----------------------------------------------------------
|
||||
* m_write
|
||||
* m_read
|
||||
* - Buffer in used
|
||||
* ----------------------------------------------------------
|
||||
* m_data | |********************| |
|
||||
* ----------------------------------------------------------
|
||||
* m_read m_write
|
||||
* - Buffer out used
|
||||
* ----------------------------------------------------------
|
||||
* m_data |****************| |******************|
|
||||
* ----------------------------------------------------------
|
||||
* m_read m_write
|
||||
*/
|
||||
class CircularBuffer {
|
||||
private:
|
||||
etk::Vector<uint8_t> m_data; //!< data pointer
|
||||
void* m_write; //!< write pointer
|
||||
void* m_read; //!< read pointer
|
||||
audio::Time m_timeRead; //!< current read time
|
||||
uint32_t m_frequency;
|
||||
// TODO : Remove the m_size ==> this is a bad element to be mutex-less
|
||||
size_t m_size; //!< number of chunk availlable in this buffer
|
||||
size_t m_capacity; //!< number of chunk available in this Buffer
|
||||
size_t m_sizeChunk; //!< Size of one chunk (in byte)
|
||||
public:
|
||||
CircularBuffer();
|
||||
~CircularBuffer();
|
||||
/**
|
||||
* @brief copy contructor.
|
||||
* @param[in] _obj Circular buffer object
|
||||
*/
|
||||
CircularBuffer(const audio::drain::CircularBuffer& _obj);
|
||||
/**
|
||||
* @brief copy operator.
|
||||
* @param[in] _obj Circular buffer object
|
||||
*/
|
||||
CircularBuffer& operator=(const audio::drain::CircularBuffer& _obj);
|
||||
/**
|
||||
* @brief set the capacity of the circular buffer.
|
||||
* @param[in] _capacity Number of chunk in the buffer.
|
||||
* @param[in] _chunkSize Size of one chunk.
|
||||
* @param[in] _frequency Frequency of the buffer
|
||||
*/
|
||||
void setCapacity(size_t _capacity, size_t _chunkSize, uint32_t _frequency);
|
||||
/**
|
||||
* @brief set the capacity of the circular buffer.
|
||||
* @param[in] _capacity Duration stored in the buffer.
|
||||
* @param[in] _chunkSize Size of one chunk.
|
||||
* @param[in] _frequency Frequency of the buffer
|
||||
*/
|
||||
void setCapacity(echrono::Duration _capacity, size_t _chunkSize, uint32_t _frequency);
|
||||
/**
|
||||
* @brief get free size of the buffer.
|
||||
* @return Number of free chunk.
|
||||
*/
|
||||
size_t getFreeSize() const;
|
||||
/**
|
||||
* @brief Get number of chunk in the buffer.
|
||||
* @return number of chunk.
|
||||
*/
|
||||
size_t getSize() const {
|
||||
return m_size;
|
||||
}
|
||||
/**
|
||||
* @brief Get number of chunk that can be set in the buffer.
|
||||
* @return number of chunk.
|
||||
*/
|
||||
size_t getCapacity() const {
|
||||
return m_capacity;
|
||||
}
|
||||
/**
|
||||
* @brief Write chunk in the buffer.
|
||||
* @param[in] _data Pointer on the data.
|
||||
* @param[in] _nbChunk number of chunk to copy.
|
||||
* @param[in] _time Time to start write data (if before end ==> not replace data, write only if after end)
|
||||
* @return Number of chunk copied.
|
||||
*/
|
||||
size_t write(const void* _data, size_t _nbChunk, const audio::Time& _time);
|
||||
size_t write(const void* _data, size_t _nbChunk);
|
||||
/**
|
||||
* @brief Read Chunk from the buffer to the pointer data.
|
||||
* @param[out] _data Pointer on the data.
|
||||
* @param[in] _nbChunk number of chunk to copy.
|
||||
* @param[in] _time Time to start read data (if before start ==> add 0 at start, if after, remove unread data)
|
||||
* @return Number of chunk copied.
|
||||
*/
|
||||
size_t read(void* _data, size_t _nbChunk, const audio::Time& _time);
|
||||
//! @previous
|
||||
size_t read(void* _data, size_t _nbChunk);
|
||||
void setReadPosition(const audio::Time& _time);
|
||||
|
||||
audio::Time getReadTimeStamp() {
|
||||
return m_timeRead;
|
||||
}
|
||||
/**
|
||||
* @brief Clear the buffer.
|
||||
*/
|
||||
void clear();
|
||||
private:
|
||||
/**
|
||||
* @brief Get number of free chunks before end of buffer.
|
||||
* @return Number of chunk.
|
||||
*/
|
||||
size_t getFreeSizeBeforEnd() const;
|
||||
/**
|
||||
* @brief Get number of used chunks before end of buffer.
|
||||
* @return Number of chunk.
|
||||
*/
|
||||
size_t getUsedSizeBeforEnd() const;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,31 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/Algo.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
class EndPoint : public Algo {
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
EndPoint() {};
|
||||
void init() {
|
||||
drain::Algo::init();
|
||||
};
|
||||
public:
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~EndPoint() {
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,87 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/EndPointCallback.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
|
||||
audio::drain::EndPointCallback::EndPointCallback() :
|
||||
m_outputFunction(null),
|
||||
m_inputFunction(null) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::EndPointCallback::init(playbackFunction _callback) {
|
||||
m_outputFunction = _callback;
|
||||
audio::drain::EndPoint::init();
|
||||
m_type = "EndPointCallback";
|
||||
}
|
||||
void audio::drain::EndPointCallback::init(recordFunction _callback) {
|
||||
m_inputFunction = _callback;
|
||||
audio::drain::EndPoint::init();
|
||||
m_type = "EndPointCallback";
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::EndPointCallback> audio::drain::EndPointCallback::create(playbackFunction _callback) {
|
||||
ememory::SharedPtr<audio::drain::EndPointCallback> tmp(ETK_NEW(audio::drain::EndPointCallback));
|
||||
tmp->init(_callback);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::EndPointCallback> audio::drain::EndPointCallback::create(recordFunction _callback) {
|
||||
ememory::SharedPtr<audio::drain::EndPointCallback> tmp(ETK_NEW(audio::drain::EndPointCallback));
|
||||
tmp->init(_callback);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void audio::drain::EndPointCallback::configurationChange() {
|
||||
audio::drain::EndPoint::configurationChange();
|
||||
DRAIN_INFO("update : format=" << m_output.getFormat() << " map=" << m_input.getMap() << " freq=" << m_input.getFrequency() << " size=" << int32_t(m_formatSize));
|
||||
m_needProcess = true;
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::EndPointCallback::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk){
|
||||
audio::drain::AutoLogInOut tmpLog("EndPointCallback");
|
||||
if (m_inputFunction != null) {
|
||||
// Call user ...
|
||||
DRAIN_VERBOSE("call user set " << _inputNbChunk << "*" << m_input.getMap().size());
|
||||
m_inputFunction(_input,
|
||||
_time,
|
||||
_inputNbChunk,
|
||||
m_output.getFormat(),
|
||||
m_output.getFrequency(),
|
||||
m_output.getMap());
|
||||
return true;
|
||||
}
|
||||
if (m_outputFunction != null) {
|
||||
// update buffer size ...
|
||||
m_outputData.resize(_inputNbChunk*m_output.getMap().size()*m_formatSize);
|
||||
// clean output to prevent errors ...
|
||||
memset(&m_outputData[0], 0, m_outputData.size());
|
||||
// call user
|
||||
DRAIN_VERBOSE("call user get " << _inputNbChunk << "*" << m_output.getMap().size() << " map=" << m_output.getMap() << " datasize=" << int32_t(m_formatSize));
|
||||
m_outputFunction(&m_outputData[0],
|
||||
_time,
|
||||
_inputNbChunk,
|
||||
m_output.getFormat(),
|
||||
m_output.getFrequency(),
|
||||
m_output.getMap());
|
||||
if (m_outputData.size() != _inputNbChunk*m_output.getMap().size()*m_formatSize) {
|
||||
DRAIN_ERROR(" can not get enough data from user ... " << m_outputData.size() << " != " << _inputNbChunk*m_output.getMap().size());
|
||||
return false;
|
||||
}
|
||||
_output = &m_outputData[0];
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -1,52 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/EndPoint.hpp>
|
||||
#include <etk/Function.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
typedef etk::Function<void (void* _data,
|
||||
const audio::Time& _playTime,
|
||||
size_t _nbChunk,
|
||||
enum audio::format _format,
|
||||
uint32_t _frequency,
|
||||
const etk::Vector<audio::channel>& _map)> playbackFunction;
|
||||
typedef etk::Function<void (const void* _data,
|
||||
const audio::Time& _readTime,
|
||||
size_t _nbChunk,
|
||||
enum audio::format _format,
|
||||
uint32_t _frequency,
|
||||
const etk::Vector<audio::channel>& _map)> recordFunction;
|
||||
class EndPointCallback : public EndPoint {
|
||||
private:
|
||||
playbackFunction m_outputFunction;
|
||||
recordFunction m_inputFunction;
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
EndPointCallback();
|
||||
void init(playbackFunction _callback);
|
||||
void init(recordFunction _callback);
|
||||
public:
|
||||
static ememory::SharedPtr<EndPointCallback> create(playbackFunction _callback);
|
||||
static ememory::SharedPtr<EndPointCallback> create(recordFunction _callback);
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~EndPointCallback() {};
|
||||
virtual void configurationChange();
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,69 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/EndPointRead.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
|
||||
audio::drain::EndPointRead::EndPointRead() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void audio::drain::EndPointRead::init() {
|
||||
audio::drain::EndPoint::init();
|
||||
m_type = "EndPointRead";
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::EndPointRead> audio::drain::EndPointRead::create() {
|
||||
ememory::SharedPtr<audio::drain::EndPointRead> tmp(ETK_NEW(audio::drain::EndPointRead));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void audio::drain::EndPointRead::configurationChange() {
|
||||
audio::drain::EndPoint::configurationChange();
|
||||
m_needProcess = true;
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::EndPointRead::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk){
|
||||
audio::drain::AutoLogInOut tmpLog("EndPointRead");
|
||||
return false;
|
||||
}
|
||||
|
||||
void audio::drain::EndPointRead::setBufferSize(size_t _nbChunk) {
|
||||
DRAIN_TODO("...");
|
||||
}
|
||||
|
||||
void audio::drain::EndPointRead::setBufferSize(const echrono::microseconds& _time) {
|
||||
DRAIN_TODO("...");
|
||||
}
|
||||
|
||||
size_t audio::drain::EndPointRead::getBufferSize() {
|
||||
DRAIN_TODO("...");
|
||||
return 0;
|
||||
}
|
||||
|
||||
echrono::microseconds audio::drain::EndPointRead::getBufferSizeMicrosecond() {
|
||||
DRAIN_TODO("...");
|
||||
return echrono::microseconds(0);
|
||||
}
|
||||
|
||||
size_t audio::drain::EndPointRead::getBufferFillSize() {
|
||||
DRAIN_TODO("...");
|
||||
return 0;
|
||||
}
|
||||
|
||||
echrono::microseconds audio::drain::EndPointRead::getBufferFillSizeMicrosecond() {
|
||||
DRAIN_TODO("...");
|
||||
return echrono::microseconds(0);
|
||||
}
|
||||
|
@ -1,64 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/EndPoint.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
class EndPointRead : public EndPoint {
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
EndPointRead();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<EndPointRead> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~EndPointRead() {};
|
||||
virtual void configurationChange();
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
/**
|
||||
* @brief Set buffer size in chunk number
|
||||
* @param[in] _nbChunk Number of chunk in the buffer
|
||||
*/
|
||||
virtual void setBufferSize(size_t _nbChunk);
|
||||
/**
|
||||
* @brief Set buffer size size of the buffer with the stored time in µs
|
||||
* @param[in] _time Time in microsecond of the buffer
|
||||
*/
|
||||
virtual void setBufferSize(const echrono::microseconds& _time);
|
||||
/**
|
||||
* @brief get buffer size in chunk number
|
||||
* @return Number of chunk that can be written in the buffer
|
||||
*/
|
||||
virtual size_t getBufferSize();
|
||||
/**
|
||||
* @brief Set buffer size size of the buffer with the stored time in µs
|
||||
* @return Time in microsecond that can be written in the buffer
|
||||
*/
|
||||
virtual echrono::microseconds getBufferSizeMicrosecond();
|
||||
/**
|
||||
* @brief Get buffer size filled in chunk number
|
||||
* @return Number of chunk in the buffer (that might be read/write)
|
||||
*/
|
||||
virtual size_t getBufferFillSize();
|
||||
/**
|
||||
* @brief Set buffer size size of the buffer with the stored time in µs
|
||||
* @return Time in microsecond of the buffer (that might be read/write)
|
||||
*/
|
||||
virtual echrono::microseconds getBufferFillSizeMicrosecond();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,160 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#include <audio/drain/EndPointWrite.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
|
||||
audio::drain::EndPointWrite::EndPointWrite() :
|
||||
m_function(null),
|
||||
m_bufferSizeMicroseconds(1000000),
|
||||
m_bufferSizeChunk(32),
|
||||
m_bufferUnderFlowSize(0) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::EndPointWrite::init() {
|
||||
audio::drain::EndPoint::init();
|
||||
m_type = "EndPoint";
|
||||
if ( audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size() != 0
|
||||
&& m_output.getFrequency() != 0) {
|
||||
m_buffer.setCapacity(m_bufferSizeMicroseconds,
|
||||
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
|
||||
m_output.getFrequency());
|
||||
}
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::EndPointWrite> audio::drain::EndPointWrite::create() {
|
||||
ememory::SharedPtr<audio::drain::EndPointWrite> tmp(ETK_NEW(audio::drain::EndPointWrite));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void audio::drain::EndPointWrite::configurationChange() {
|
||||
audio::drain::EndPoint::configurationChange();
|
||||
// update the buffer size ...
|
||||
if ( audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size() != 0
|
||||
&& m_output.getFrequency() != 0) {
|
||||
if (m_bufferSizeMicroseconds.get() != 0) {
|
||||
m_buffer.setCapacity(m_bufferSizeMicroseconds,
|
||||
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
|
||||
m_output.getFrequency());
|
||||
} else {
|
||||
m_buffer.setCapacity(m_bufferSizeChunk,
|
||||
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
|
||||
m_output.getFrequency());
|
||||
}
|
||||
}
|
||||
m_needProcess = true;
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::EndPointWrite::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk){
|
||||
audio::drain::AutoLogInOut tmpLog("EndPointWrite");
|
||||
//DRAIN_INFO(" nb Sample in buffer : " << m_buffer.size());
|
||||
if (m_function != null) {
|
||||
// TODO : Rework this ...
|
||||
if (m_buffer.getSize() <= 20000) {
|
||||
m_function(_time, _inputNbChunk, m_output.getFormat(), m_output.getFrequency(), m_output.getMap());
|
||||
}
|
||||
}
|
||||
// resize output buffer:
|
||||
//DRAIN_INFO(" resize : " << (int32_t)m_formatSize << "*" << (int32_t)_inputNbChunk << "*" << (int32_t)m_outputMap.size());
|
||||
m_outputData.resize(m_formatSize*_inputNbChunk*m_output.getMap().size());
|
||||
// set output pointer:
|
||||
_outputNbChunk = m_outputData.size()/(m_formatSize*m_output.getMap().size());
|
||||
_output = &m_outputData[0];
|
||||
ethread::UniqueLock lock(m_mutex);
|
||||
// check if data in the tmpBuffer
|
||||
if (m_buffer.getSize() == 0) {
|
||||
if (m_bufferUnderFlowSize == 0) {
|
||||
DRAIN_WARNING("No data in the user buffer (write null data ... " << _outputNbChunk << " chunks)");
|
||||
m_bufferUnderFlowSize = 1;
|
||||
} else {
|
||||
if (m_bufferUnderFlowSize == 1) {
|
||||
m_bufferUnderFlowSize = 0;
|
||||
}
|
||||
m_bufferUnderFlowSize += _outputNbChunk;
|
||||
}
|
||||
// clear the buffer to force the flush on the next elements ...
|
||||
m_outputData.clear();
|
||||
_outputNbChunk = 0;
|
||||
generateStatus("EPW_UNDERFLOW");
|
||||
// just send no data ...
|
||||
return true;
|
||||
} else if (m_bufferUnderFlowSize > 1) {
|
||||
DRAIN_WARNING("No data in the user buffer (write null data ... " << m_bufferUnderFlowSize << " chunks [In the past])");
|
||||
}
|
||||
m_bufferUnderFlowSize = 0;
|
||||
DRAIN_VERBOSE("Write " << _outputNbChunk << " chunks");
|
||||
// check if we have enought data:
|
||||
int32_t nbChunkToCopy = etk::min(_inputNbChunk, m_buffer.getSize());
|
||||
if (nbChunkToCopy != _inputNbChunk) {
|
||||
generateStatus("EPW_UNDERFLOW");
|
||||
}
|
||||
DRAIN_VERBOSE(" " << nbChunkToCopy << " chunks ==> " << nbChunkToCopy*m_output.getMap().size()*m_formatSize << " Byte sizeBuffer=" << m_buffer.getSize());
|
||||
_outputNbChunk = nbChunkToCopy;
|
||||
// copy data to the output:
|
||||
int32_t nbUnderflow = m_buffer.read(_output, nbChunkToCopy);
|
||||
if (nbUnderflow != 0) {
|
||||
DRAIN_WARNING("Undeflow in FIFO ...");
|
||||
_outputNbChunk -= nbUnderflow;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void audio::drain::EndPointWrite::write(const void* _value, size_t _nbChunk) {
|
||||
ethread::UniqueLock lock(m_mutex);
|
||||
DRAIN_VERBOSE("[ASYNC] Write data : " << _nbChunk << " chunks" << " ==> " << m_output);
|
||||
int32_t nbOverflow = m_buffer.write(_value, _nbChunk);
|
||||
if (nbOverflow > 0) {
|
||||
DRAIN_ERROR("Overflow in output buffer : " << nbOverflow << " / " << _nbChunk);
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::EndPointWrite::setBufferSize(size_t _nbChunk) {
|
||||
m_bufferSizeMicroseconds = echrono::microseconds(0);
|
||||
m_bufferSizeChunk = _nbChunk;
|
||||
if ( audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size() != 0
|
||||
&& m_output.getFrequency() != 0) {
|
||||
m_buffer.setCapacity(_nbChunk,
|
||||
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
|
||||
float(m_output.getFrequency()));
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::EndPointWrite::setBufferSize(const echrono::microseconds& _time) {
|
||||
m_bufferSizeMicroseconds = _time;
|
||||
m_bufferSizeChunk = 0;
|
||||
m_buffer.setCapacity(_time,
|
||||
audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size(),
|
||||
float(m_output.getFrequency()));
|
||||
}
|
||||
|
||||
size_t audio::drain::EndPointWrite::getBufferSize() {
|
||||
if (m_bufferSizeChunk != 0) {
|
||||
return m_bufferSizeChunk;
|
||||
}
|
||||
return (int64_t(m_output.getFrequency())*m_bufferSizeMicroseconds.get())/1000000000LL;
|
||||
}
|
||||
|
||||
echrono::microseconds audio::drain::EndPointWrite::getBufferSizeMicrosecond() {
|
||||
if (m_bufferSizeMicroseconds.get() != 0) {
|
||||
return m_bufferSizeMicroseconds;
|
||||
}
|
||||
return echrono::microseconds(m_bufferSizeChunk*1000000LL/int64_t(m_output.getFrequency()));
|
||||
}
|
||||
|
||||
size_t audio::drain::EndPointWrite::getBufferFillSize() {
|
||||
return m_buffer.getSize()/(audio::getFormatBytes(m_output.getFormat())*m_output.getMap().size());
|
||||
}
|
||||
|
||||
echrono::microseconds audio::drain::EndPointWrite::getBufferFillSizeMicrosecond() {
|
||||
return echrono::microseconds(getBufferFillSize()*1000000LL/int64_t(m_output.getFrequency()));
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/EndPoint.hpp>
|
||||
#include <etk/Function.hpp>
|
||||
#include <ethread/Mutex.hpp>
|
||||
#include <audio/drain/CircularBuffer.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
typedef etk::Function<void (const audio::Time& _time,
|
||||
size_t _nbChunk,
|
||||
enum audio::format _format,
|
||||
uint32_t _frequency,
|
||||
const etk::Vector<audio::channel>& _map)> playbackFunctionWrite;
|
||||
class EndPointWrite : public EndPoint {
|
||||
private:
|
||||
audio::drain::CircularBuffer m_buffer;
|
||||
playbackFunctionWrite m_function;
|
||||
ethread::Mutex m_mutex;
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
EndPointWrite();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<audio::drain::EndPointWrite> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~EndPointWrite() {};
|
||||
virtual void configurationChange();
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
virtual void write(const void* _value, size_t _nbChunk);
|
||||
virtual void setCallback(playbackFunctionWrite _function) {
|
||||
m_function = _function;
|
||||
}
|
||||
protected:
|
||||
echrono::microseconds m_bufferSizeMicroseconds; // 0 if m_bufferSizeChunk != 0
|
||||
size_t m_bufferSizeChunk; // 0 if m_bufferSizeMicroseconds != 0
|
||||
size_t m_bufferUnderFlowSize; //!< Limit display of underflow in the write callback
|
||||
public:
|
||||
/**
|
||||
* @brief Set buffer size in chunk number
|
||||
* @param[in] _nbChunk Number of chunk in the buffer
|
||||
*/
|
||||
virtual void setBufferSize(size_t _nbChunk);
|
||||
/**
|
||||
* @brief Set buffer size size of the buffer with the stored time in µs
|
||||
* @param[in] _time Time in microsecond of the buffer
|
||||
*/
|
||||
virtual void setBufferSize(const echrono::microseconds& _time);
|
||||
/**
|
||||
* @brief get buffer size in chunk number
|
||||
* @return Number of chunk that can be written in the buffer
|
||||
*/
|
||||
virtual size_t getBufferSize();
|
||||
/**
|
||||
* @brief Set buffer size size of the buffer with the stored time in µs
|
||||
* @return Time in microsecond that can be written in the buffer
|
||||
*/
|
||||
virtual echrono::microseconds getBufferSizeMicrosecond();
|
||||
/**
|
||||
* @brief Get buffer size filled in chunk number
|
||||
* @return Number of chunk in the buffer (that might be read/write)
|
||||
*/
|
||||
virtual size_t getBufferFillSize();
|
||||
/**
|
||||
* @brief Set buffer size size of the buffer with the stored time in µs
|
||||
* @return Time in microsecond of the buffer (that might be read/write)
|
||||
*/
|
||||
virtual echrono::microseconds getBufferFillSizeMicrosecond();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,150 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/Equalizer.hpp>
|
||||
#include <audio/drain/Algo.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
// see http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt
|
||||
// see http://www.earlevel.com/main/2013/10/13/biquad-calculator-v2/
|
||||
|
||||
audio::drain::Equalizer::Equalizer() {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::Equalizer::init() {
|
||||
audio::drain::Algo::init();
|
||||
audio::drain::Algo::m_type = "Equalizer";
|
||||
m_supportedFormat.pushBack(audio::format_int16);
|
||||
m_supportedFormat.pushBack(audio::format_int16);
|
||||
configureBiQuad();
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::Equalizer> audio::drain::Equalizer::create() {
|
||||
ememory::SharedPtr<audio::drain::Equalizer> tmp(ETK_NEW(audio::drain::Equalizer));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
audio::drain::Equalizer::~Equalizer() {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::Equalizer::configurationChange() {
|
||||
audio::drain::Algo::configurationChange();
|
||||
configureBiQuad();
|
||||
}
|
||||
|
||||
bool audio::drain::Equalizer::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk) {
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
_output = _input;
|
||||
if (_input == null) {
|
||||
return false;
|
||||
}
|
||||
m_algo.process(_output, _input, _inputNbChunk);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool audio::drain::Equalizer::setParameter(const etk::String& _parameter, const etk::String& _value) {
|
||||
//DRAIN_WARNING("set : " << _parameter << " " << _value);
|
||||
if (_parameter == "config") {
|
||||
m_config = ejson::Object(_value);
|
||||
configureBiQuad();
|
||||
} else if (_parameter == "reset") {
|
||||
// TODO : m_algo.reset();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
etk::String audio::drain::Equalizer::getParameter(const etk::String& _parameter) const {
|
||||
return "error";
|
||||
}
|
||||
|
||||
etk::String audio::drain::Equalizer::getParameterProperty(const etk::String& _parameter) const {
|
||||
return "error";
|
||||
}
|
||||
|
||||
void audio::drain::Equalizer::addBiquad(int32_t _idBiquad, const ejson::Object& _object) {
|
||||
// get type:
|
||||
etk::String typeString = _object["type"].toString().get("none");
|
||||
if (typeString == "direct-value") {
|
||||
double a0 = _object["a0"].toNumber().get(0.0);
|
||||
double a1 = _object["a1"].toNumber().get(0.0);
|
||||
double a2 = _object["a2"].toNumber().get(0.0);
|
||||
double b0 = _object["b0"].toNumber().get(0.0);
|
||||
double b1 = _object["b1"].toNumber().get(0.0);
|
||||
if (_idBiquad < 0) {
|
||||
m_algo.addBiquad(a0, a1, a2, b0, b1);
|
||||
} else {
|
||||
m_algo.addBiquad(_idBiquad, a0, a1, a2, b0, b1);
|
||||
}
|
||||
} else {
|
||||
enum audio::algo::drain::biQuadType type;
|
||||
if (etk::from_string(type, typeString) == false) {
|
||||
DRAIN_ERROR("Can not parse equalizer type:'" << typeString << "'");
|
||||
}
|
||||
double gain = _object["gain"].toNumber().get(0.0);
|
||||
double frequency = _object["cut-frequency"].toNumber().get(0.0);
|
||||
double quality = _object["quality"].toNumber().get(0.0);
|
||||
if (_idBiquad < 0) {
|
||||
m_algo.addBiquad(type, frequency, quality, gain);
|
||||
} else {
|
||||
m_algo.addBiquad(_idBiquad, type, frequency, quality, gain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::Equalizer::configureBiQuad() {
|
||||
m_algo.init(getOutputFormat().getFrequency(),
|
||||
getOutputFormat().getMap().size(),
|
||||
getOutputFormat().getFormat());
|
||||
if (m_config.exist() == false) {
|
||||
return;
|
||||
}
|
||||
// check for a global config:
|
||||
const ejson::Array global = m_config["global"].toArray();
|
||||
if (global.exist() == true) {
|
||||
// only global configuration get all elements:
|
||||
for (size_t kkk=0; kkk<global.size(); ++kkk) {
|
||||
const ejson::Object tmpObject = global[kkk].toObject();
|
||||
if (tmpObject.exist() == false) {
|
||||
DRAIN_ERROR("Parse the configuration error : not a correct parameter:" << kkk);
|
||||
continue;
|
||||
}
|
||||
// Add biquad...
|
||||
addBiquad(-1, tmpObject);
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (size_t iii=0; iii<getOutputFormat().getMap().size(); ++iii) {
|
||||
etk::String channelName = etk::toString(getOutputFormat().getMap()[iii]);
|
||||
const ejson::Array channelConfig = m_config[channelName].toArray();
|
||||
if (channelConfig.exist() == false) {
|
||||
// no config ... not a problem ...
|
||||
continue;
|
||||
}
|
||||
// only global configuration get all elements:
|
||||
for (size_t kkk=0; kkk<channelConfig.size(); ++kkk) {
|
||||
const ejson::Object tmpObject = channelConfig[kkk].toObject();
|
||||
if (tmpObject.exist() == false) {
|
||||
DRAIN_ERROR("Parse the configuration error : not a correct parameter:" << kkk);
|
||||
continue;
|
||||
}
|
||||
// add biquad:
|
||||
addBiquad(kkk, tmpObject);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
etk::Vector<etk::Pair<float,float> > audio::drain::Equalizer::calculateTheory() {
|
||||
return m_algo.calculateTheory();
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/Algo.hpp>
|
||||
#include <ememory/memory.hpp>
|
||||
#include <ejson/Object.hpp>
|
||||
#include <audio/algo/drain/Equalizer.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
class Equalizer : public Algo {
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
Equalizer();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<audio::drain::Equalizer> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~Equalizer();
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
protected:
|
||||
ejson::Object m_config; // configuration of the equalizer.
|
||||
public:
|
||||
virtual bool setParameter(const etk::String& _parameter, const etk::String& _value);
|
||||
virtual etk::String getParameter(const etk::String& _parameter) const;
|
||||
virtual etk::String getParameterProperty(const etk::String& _parameter) const;
|
||||
protected:
|
||||
void addBiquad(int32_t _idBiquad, const ejson::Object& _object);
|
||||
audio::algo::drain::Equalizer m_algo;
|
||||
/**
|
||||
* @brief Configure biquad with the user spec.
|
||||
*/
|
||||
void configureBiQuad();
|
||||
public:
|
||||
// for debug & tools only
|
||||
etk::Vector<etk::Pair<float,float> > calculateTheory();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,269 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/FormatUpdate.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
#ifndef INT16_MAX
|
||||
#define INT16_MAX 0x7fff
|
||||
#endif
|
||||
#ifndef INT16_MIN
|
||||
#define INT16_MIN (-INT16_MAX - 1)
|
||||
#endif
|
||||
#ifndef INT32_MAX
|
||||
#define INT32_MAX 0x7fffffffL
|
||||
#endif
|
||||
#ifndef INT32_MIN
|
||||
#define INT32_MIN (-INT32_MAX - 1L)
|
||||
#endif
|
||||
|
||||
|
||||
static void convert__int16__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) {
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = in[iii];
|
||||
}
|
||||
}
|
||||
static void convert__int16__to__int32(void* _input, void* _output, size_t _nbSample) {
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = in[iii]<<16;
|
||||
}
|
||||
}
|
||||
static void convert__int16__to__float(void* _input, void* _output, size_t _nbSample) {
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
float* out = static_cast<float*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
// TODO : Set * intead of /
|
||||
out[iii] = static_cast<float>(in[iii])/static_cast<float>(INT16_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
static void convert__int16_on_int32__to__int16(void* _input, void* _output, size_t _nbSample) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = static_cast<int16_t>(etk::min(etk::max(INT16_MIN, in[iii]), INT16_MAX));
|
||||
}
|
||||
}
|
||||
static void convert__int16_on_int32__to__int32(void* _input, void* _output, size_t _nbSample) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
int32_t value = etk::min(etk::max(INT16_MIN, in[iii]), INT16_MAX);
|
||||
out[iii] = value << 16;
|
||||
}
|
||||
}
|
||||
static void convert__int16_on_int32__to__float(void* _input, void* _output, size_t _nbSample) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
float* out = static_cast<float*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
// TODO : Set * intead of /
|
||||
out[iii] = static_cast<float>(in[iii])/static_cast<float>(INT16_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
static void convert__int32__to__int16(void* _input, void* _output, size_t _nbSample) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
int32_t value = in[iii] >> 16;
|
||||
out[iii] = static_cast<int16_t>(etk::min(etk::max(INT16_MIN, value), INT16_MAX));
|
||||
}
|
||||
}
|
||||
static void convert__int32__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = in[iii] >> 16;
|
||||
}
|
||||
}
|
||||
static void convert__int32__to__float(void* _input, void* _output, size_t _nbSample) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
float* out = static_cast<float*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
// TODO : Set * intead of /
|
||||
out[iii] = static_cast<float>(in[iii])/static_cast<float>(INT32_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
static void convert__float__to__int16(void* _input, void* _output, size_t _nbSample) {
|
||||
float* in = static_cast<float*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
float value = in[iii] * static_cast<float>(INT16_MAX);
|
||||
value = etk::min(etk::max(static_cast<float>(INT16_MIN), value), static_cast<float>(INT16_MAX));
|
||||
out[iii] = static_cast<int16_t>(value);
|
||||
//DRAIN_DEBUG(iii << " in=" << in[iii] << " out=" << out[iii]);
|
||||
}
|
||||
}
|
||||
static void convert__float__to__int16_on_int32(void* _input, void* _output, size_t _nbSample) {
|
||||
float* in = static_cast<float*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
float value = in[iii] * static_cast<float>(INT16_MAX);
|
||||
value = etk::min(etk::max(static_cast<float>(INT32_MIN), value), static_cast<float>(INT32_MAX));
|
||||
out[iii] = static_cast<int32_t>(value);
|
||||
}
|
||||
}
|
||||
static void convert__float__to__int32(void* _input, void* _output, size_t _nbSample) {
|
||||
float* in = static_cast<float*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
float value = in[iii] * static_cast<float>(INT32_MAX);
|
||||
value = etk::min(etk::max(static_cast<float>(INT32_MIN), value), static_cast<float>(INT32_MAX));
|
||||
out[iii] = static_cast<int32_t>(value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
audio::drain::FormatUpdate::FormatUpdate() :
|
||||
m_functionConvert(null) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::FormatUpdate::init() {
|
||||
audio::drain::Algo::init();
|
||||
m_type = "FormatUpdate";
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::FormatUpdate> audio::drain::FormatUpdate::create() {
|
||||
ememory::SharedPtr<audio::drain::FormatUpdate> tmp(ETK_NEW(audio::drain::FormatUpdate));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
void audio::drain::FormatUpdate::configurationChange() {
|
||||
audio::drain::Algo::configurationChange();
|
||||
if (m_input.getMap() != m_output.getMap()) {
|
||||
DRAIN_ERROR("can not support Map Change ...");
|
||||
m_needProcess = false;
|
||||
}
|
||||
if (m_input.getFrequency() != m_output.getFrequency()) {
|
||||
DRAIN_ERROR("can not support frequency Change ...");
|
||||
m_needProcess = false;
|
||||
}
|
||||
if (m_input.getFormat() == m_output.getFormat()) {
|
||||
// nothing to process...
|
||||
m_needProcess = false;
|
||||
return;
|
||||
}
|
||||
switch (m_input.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
DRAIN_ERROR(" Impossible case 1");
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
m_functionConvert = &convert__int16__to__int16_on_int32;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int16__to__int16_on_int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int32:
|
||||
m_functionConvert = &convert__int16__to__int32;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int16__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_float:
|
||||
m_functionConvert = &convert__int16__to__float;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int16__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
m_functionConvert = &convert__int16_on_int32__to__int16;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int16_on_int32__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
DRAIN_ERROR(" Impossible case 2");
|
||||
break;
|
||||
case audio::format_int32:
|
||||
m_functionConvert = &convert__int16_on_int32__to__int32;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int16_on_int32__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_float:
|
||||
m_functionConvert = &convert__int16_on_int32__to__float;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int16_on_int32__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_int32:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
m_functionConvert = &convert__int32__to__int16;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int32__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
m_functionConvert = &convert__int32__to__int16_on_int32;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int32__to__int16_on_int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int32:
|
||||
DRAIN_ERROR(" Impossible case 3");
|
||||
break;
|
||||
case audio::format_float:
|
||||
m_functionConvert = &convert__int32__to__float;
|
||||
DRAIN_DEBUG(" use converter : 'convert__int32__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_float:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
m_functionConvert = &convert__float__to__int16;
|
||||
DRAIN_DEBUG(" use converter : 'convert__float__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
m_functionConvert = &convert__float__to__int16_on_int32;
|
||||
DRAIN_DEBUG(" use converter : 'convert__float__to__int16_on_int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int32:
|
||||
m_functionConvert = &convert__float__to__int32;
|
||||
DRAIN_DEBUG(" use converter : 'convert__float__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_float:
|
||||
DRAIN_ERROR(" Impossible case 4");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::FormatUpdate::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk) {
|
||||
audio::drain::AutoLogInOut tmpLog("FormatUpdate");
|
||||
// chack if we need to process:
|
||||
if (m_needProcess == false) {
|
||||
_output = _input;
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
return true;
|
||||
}
|
||||
if (_input == null) {
|
||||
_output = &(m_outputData[0]);
|
||||
_outputNbChunk = 0;
|
||||
DRAIN_ERROR("null pointer input ... ");
|
||||
return false;
|
||||
}
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
m_outputData.resize(_outputNbChunk*m_input.getMap().size()*m_formatSize);
|
||||
_output = &(m_outputData[0]);
|
||||
if (m_functionConvert == null) {
|
||||
DRAIN_ERROR("null function ptr");
|
||||
return false;
|
||||
}
|
||||
m_functionConvert(_input, _output, _outputNbChunk*m_input.getMap().size());
|
||||
return true;
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/Algo.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
class FormatUpdate : public Algo {
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
FormatUpdate();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<audio::drain::FormatUpdate> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~FormatUpdate() {};
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
private:
|
||||
void (*m_functionConvert)(void* _input, void* _output, size_t _nbSample);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,119 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include "IOFormatInterface.hpp"
|
||||
#include "debug.hpp"
|
||||
|
||||
etk::Stream& audio::drain::operator <<(etk::Stream& _os, const IOFormatInterface& _obj) {
|
||||
_os << "{";
|
||||
if (_obj.getConfigured() == false) {
|
||||
_os << "Not configured";
|
||||
} else {
|
||||
_os << "format=" << _obj.getFormat();
|
||||
_os << ", frequency=" << _obj.getFrequency();
|
||||
_os << ", map=" << _obj.getMap();
|
||||
}
|
||||
_os << "}";
|
||||
return _os;
|
||||
}
|
||||
|
||||
audio::drain::IOFormatInterface::IOFormatInterface() :
|
||||
m_configured(false),
|
||||
m_format(audio::format_unknow),
|
||||
m_map(),
|
||||
m_frequency(0) {
|
||||
m_map.pushBack(audio::channel_frontLeft);
|
||||
m_map.pushBack(audio::channel_frontRight);
|
||||
}
|
||||
|
||||
audio::drain::IOFormatInterface::IOFormatInterface(etk::Vector<enum audio::channel> _map, enum audio::format _format, float _frequency) :
|
||||
m_configured(true),
|
||||
m_format(_format),
|
||||
m_map(_map),
|
||||
m_frequency(_frequency) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::IOFormatInterface::set(etk::Vector<enum audio::channel> _map, enum audio::format _format, float _frequency) {
|
||||
bool hasChange = false;
|
||||
if (m_map != _map) {
|
||||
m_map = _map;
|
||||
hasChange = true;
|
||||
}
|
||||
if (m_format != _format) {
|
||||
m_format = _format;
|
||||
hasChange = true;
|
||||
}
|
||||
if (m_frequency != _frequency) {
|
||||
m_frequency = _frequency;
|
||||
hasChange = true;
|
||||
}
|
||||
if (hasChange == true) {
|
||||
m_configured = true;
|
||||
configurationChange();
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::IOFormatInterface::setConfigured(bool _value) {
|
||||
m_configured = _value;
|
||||
}
|
||||
|
||||
bool audio::drain::IOFormatInterface::getConfigured() const {
|
||||
return m_configured;
|
||||
}
|
||||
|
||||
enum audio::format audio::drain::IOFormatInterface::getFormat() const {
|
||||
return m_format;
|
||||
}
|
||||
|
||||
void audio::drain::IOFormatInterface::setFormat(enum audio::format _value) {
|
||||
if (m_format == _value) {
|
||||
return;
|
||||
}
|
||||
m_format = _value;
|
||||
m_configured = true;
|
||||
configurationChange();
|
||||
}
|
||||
|
||||
const etk::Vector<enum audio::channel>& audio::drain::IOFormatInterface::getMap() const{
|
||||
return m_map;
|
||||
}
|
||||
|
||||
void audio::drain::IOFormatInterface::setMap(const etk::Vector<enum audio::channel>& _value) {
|
||||
if (m_map == _value) {
|
||||
return;
|
||||
}
|
||||
m_map = _value;
|
||||
m_configured = true;
|
||||
configurationChange();
|
||||
}
|
||||
|
||||
float audio::drain::IOFormatInterface::getFrequency() const{
|
||||
return m_frequency;
|
||||
}
|
||||
|
||||
void audio::drain::IOFormatInterface::setFrequency(float _value) {
|
||||
if (m_frequency == _value) {
|
||||
return;
|
||||
}
|
||||
m_configured = true;
|
||||
m_frequency = _value;
|
||||
configurationChange();
|
||||
}
|
||||
|
||||
void audio::drain::IOFormatInterface::configurationChange() {
|
||||
if (m_ioChangeFunctor != null) {
|
||||
m_ioChangeFunctor();
|
||||
}
|
||||
}
|
||||
void audio::drain::IOFormatInterface::setCallback(const etk::Function<void()>& _functor) {
|
||||
m_ioChangeFunctor = _functor;
|
||||
}
|
||||
|
||||
|
||||
int32_t audio::drain::IOFormatInterface::getChunkSize() const {
|
||||
return m_map.size() * audio::getFormatBytes(m_format);
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/String.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
#include <audio/format.hpp>
|
||||
#include <audio/channel.hpp>
|
||||
#include <echrono/Steady.hpp>
|
||||
#include <etk/Function.hpp>
|
||||
#include <ememory/memory.hpp>
|
||||
#include "AutoLogInOut.hpp"
|
||||
#include "debug.hpp"
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
class IOFormatInterface {
|
||||
public:
|
||||
IOFormatInterface();
|
||||
IOFormatInterface(etk::Vector<enum audio::channel> _map, enum audio::format _format=audio::format_int16, float _frequency=48000.0f);
|
||||
void set(etk::Vector<enum audio::channel> _map, enum audio::format _format=audio::format_int16, float _frequency=48000.0f);
|
||||
protected:
|
||||
bool m_configured;
|
||||
public:
|
||||
void setConfigured(bool _value);
|
||||
bool getConfigured() const;
|
||||
protected:
|
||||
enum audio::format m_format; //!< input Algo Format
|
||||
public:
|
||||
/**
|
||||
* @brief Get the algo format.
|
||||
* @return the current Format.
|
||||
*/
|
||||
enum audio::format getFormat() const;
|
||||
/**
|
||||
* @brief Set the algo format.
|
||||
* @param[in] _value New Format.
|
||||
*/
|
||||
void setFormat(enum audio::format _value);
|
||||
protected:
|
||||
etk::Vector<enum audio::channel> m_map; //!< input channel Map
|
||||
public:
|
||||
/**
|
||||
* @brief Get the algo channel Map.
|
||||
* @return the current channel Map.
|
||||
*/
|
||||
const etk::Vector<enum audio::channel>& getMap() const;
|
||||
/**
|
||||
* @brief Set the algo channel Map.
|
||||
* @param[in] _value New channel Map.
|
||||
*/
|
||||
void setMap(const etk::Vector<enum audio::channel>& _value);
|
||||
protected:
|
||||
float m_frequency; //!< input Algo Format
|
||||
public:
|
||||
/**
|
||||
* @brief Get the algo frequency.
|
||||
* @return the current frequency.
|
||||
*/
|
||||
float getFrequency() const;
|
||||
/**
|
||||
* @brief Set the algo frequency.
|
||||
* @param[in] _value New frequency.
|
||||
*/
|
||||
void setFrequency(float _value);
|
||||
public:
|
||||
/**
|
||||
* @brief Get the Chunk size in byte.
|
||||
* @return the number of byte used by chunk.
|
||||
*/
|
||||
int32_t getChunkSize() const;
|
||||
protected:
|
||||
etk::Function<void()> m_ioChangeFunctor; //!< function pointer on the upper class
|
||||
void configurationChange();
|
||||
public:
|
||||
/**
|
||||
* @brief Set the callback function to be notify when the arameter change.
|
||||
* @param[in] _functor Function to call.
|
||||
*/
|
||||
void setCallback(const etk::Function<void()>& _functor);
|
||||
};
|
||||
etk::Stream& operator <<(etk::Stream& _os, const audio::drain::IOFormatInterface& _obj);
|
||||
}
|
||||
}
|
||||
|
@ -1,658 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <etk/String.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
#include <audio/format.hpp>
|
||||
#include <audio/channel.hpp>
|
||||
#include <audio/drain/Process.hpp>
|
||||
#include <audio/drain/ChannelReorder.hpp>
|
||||
#include <audio/drain/FormatUpdate.hpp>
|
||||
#include <audio/drain/Resampler.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
audio::drain::Process::Process() :
|
||||
m_isConfigured(false) {
|
||||
m_data.clear();
|
||||
}
|
||||
audio::drain::Process::~Process() {
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
m_listAlgo[iii].reset();
|
||||
}
|
||||
}
|
||||
|
||||
bool audio::drain::Process::push(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk) {
|
||||
void* out = null;
|
||||
size_t nbChunkOut;
|
||||
DRAIN_VERBOSE(" Process push");
|
||||
process(_time, _data, _nbChunk, out, nbChunkOut);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool audio::drain::Process::pull(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk,
|
||||
size_t _chunkSize) {
|
||||
//DRAIN_DEBUG("Execute:");
|
||||
while(m_data.size() < _nbChunk*_chunkSize) {
|
||||
void* in = null;
|
||||
size_t nbChunkIn = _nbChunk - m_data.size()/_chunkSize;
|
||||
void* out = null;
|
||||
size_t nbChunkOut;
|
||||
if (nbChunkIn < 128) {
|
||||
nbChunkIn = 128;
|
||||
}
|
||||
// TODO : maybe remove this for input data ...
|
||||
for (int32_t iii=m_listAlgo.size()-1; iii >=0; --iii) {
|
||||
if (m_listAlgo[iii] != null) {
|
||||
nbChunkIn = m_listAlgo[iii]->needInputData(nbChunkIn);
|
||||
}
|
||||
}
|
||||
if (nbChunkIn < 32) {
|
||||
nbChunkIn = 32;
|
||||
}
|
||||
//DRAIN_DEBUG(" process:" << _time << " in=" << in << " nbChunkIn=" << nbChunkIn << " out=" << out << " nbChunkOut=" << nbChunkOut);
|
||||
// get data from the upstream
|
||||
process(_time, in, nbChunkIn, out, nbChunkOut);
|
||||
if (nbChunkOut > 0) {
|
||||
size_t position = m_data.size();
|
||||
m_data.resize(m_data.size() + nbChunkOut*_chunkSize);
|
||||
memcpy(&m_data[position], out, nbChunkOut*_chunkSize);
|
||||
} else {
|
||||
// No more data in the process stream (0 input data might have flush data)
|
||||
break;
|
||||
}
|
||||
}
|
||||
// copy only data availlable :
|
||||
int32_t minByTeSize = etk::min(m_data.size(), _nbChunk*_chunkSize);
|
||||
if (minByTeSize >= 0) {
|
||||
memcpy(_data, &m_data[0], minByTeSize);
|
||||
m_data.erase(m_data.begin(), m_data.begin()+minByTeSize);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::Process::process(audio::Time& _time,
|
||||
void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void*& _outData,
|
||||
size_t& _outNbChunk) {
|
||||
updateInterAlgo();
|
||||
if (m_listAlgo.size() == 0) {
|
||||
_outData = _inData;
|
||||
_outNbChunk = _inNbChunk;
|
||||
return true;
|
||||
}
|
||||
DRAIN_VERBOSE(" process : " << m_listAlgo.size() << " algos nbChunk=" << _inNbChunk);
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
DRAIN_VERBOSE(" Algo " << iii+1 << "/" << m_listAlgo.size());
|
||||
if (m_listAlgo[iii] != null) {
|
||||
m_listAlgo[iii]->process(_time, _inData, _inNbChunk, _outData, _outNbChunk);
|
||||
_inData = _outData;
|
||||
_inNbChunk = _outNbChunk;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void audio::drain::Process::pushBack(ememory::SharedPtr<audio::drain::Algo> _algo) {
|
||||
removeAlgoDynamic();
|
||||
_algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
|
||||
m_listAlgo.pushBack(_algo);
|
||||
}
|
||||
|
||||
void audio::drain::Process::pushFront(ememory::SharedPtr<audio::drain::Algo> _algo) {
|
||||
removeAlgoDynamic();
|
||||
_algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
|
||||
m_listAlgo.pushFront(_algo);
|
||||
}
|
||||
|
||||
template<typename DRAIN_TYPE>
|
||||
etk::Vector<DRAIN_TYPE> getUnion(const etk::Vector<DRAIN_TYPE>& _out, const etk::Vector<DRAIN_TYPE>& _in) {
|
||||
etk::Vector<DRAIN_TYPE> out;
|
||||
if (_out.size() == 0) {
|
||||
// Last is ok for all format
|
||||
// ==> set the limit with the next element
|
||||
out = _in;
|
||||
} else if (_in.size() == 0) {
|
||||
// next is ok for all format
|
||||
} else {
|
||||
// must check all values
|
||||
for (size_t ooo=0; ooo<_out.size(); ++ooo) {
|
||||
for (size_t iii=0; iii<_in.size(); ++iii) {
|
||||
if (_out[ooo] == _in[iii]) {
|
||||
out.pushBack(_out[ooo]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
void audio::drain::Process::displayAlgo() {
|
||||
DRAIN_DEBUG(" Input : " << m_inputConfig);
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
DRAIN_DEBUG(" [" << m_listAlgo[iii]->getType() << "] '" << m_listAlgo[iii]->getName() << "'");
|
||||
if (m_listAlgo[iii]->getInputFormat().getConfigured() == true) {
|
||||
DRAIN_DEBUG(" Input : " << m_listAlgo[iii]->getInputFormat());
|
||||
} else {
|
||||
DRAIN_DEBUG(" Input : Not configured");
|
||||
DRAIN_DEBUG(" format : " << m_listAlgo[iii]->getFormatSupportedInput());
|
||||
DRAIN_DEBUG(" frequency : " << m_listAlgo[iii]->getFrequencySupportedInput());
|
||||
DRAIN_DEBUG(" map : " << m_listAlgo[iii]->getMapSupportedInput());
|
||||
}
|
||||
if (m_listAlgo[iii]->getOutputFormat().getConfigured() == true) {
|
||||
DRAIN_DEBUG(" Output: " << m_listAlgo[iii]->getOutputFormat());
|
||||
} else {
|
||||
DRAIN_DEBUG(" Output : Not configured");
|
||||
DRAIN_DEBUG(" format : " << m_listAlgo[iii]->getFormatSupportedOutput());
|
||||
DRAIN_DEBUG(" frequency : " << m_listAlgo[iii]->getFrequencySupportedOutput());
|
||||
DRAIN_DEBUG(" map : " << m_listAlgo[iii]->getMapSupportedOutput());
|
||||
}
|
||||
}
|
||||
DRAIN_DEBUG(" Output : " << m_outputConfig);
|
||||
}
|
||||
|
||||
void audio::drain::Process::updateAlgo(size_t _position) {
|
||||
DRAIN_VERBOSE(" id = " << _position);
|
||||
if ( ( _position == 0
|
||||
|| ( _position > 0
|
||||
&& m_listAlgo[_position-1]->getOutputFormat().getConfigured() == false
|
||||
)
|
||||
)
|
||||
&& ( _position == m_listAlgo.size()
|
||||
|| ( _position < m_listAlgo.size()
|
||||
&& m_listAlgo[_position]->getInputFormat().getConfigured() == false
|
||||
)
|
||||
)
|
||||
) {
|
||||
// step 1 : check frequency:
|
||||
etk::Vector<float> freqOut;
|
||||
etk::Vector<float> freqIn;
|
||||
if (_position == 0) {
|
||||
freqOut.pushBack(m_inputConfig.getFrequency());
|
||||
} else {
|
||||
freqOut = m_listAlgo[_position-1]->getFrequencySupportedOutput();
|
||||
}
|
||||
if (_position == m_listAlgo.size()) {
|
||||
freqIn.pushBack(m_outputConfig.getFrequency());
|
||||
} else {
|
||||
freqIn = m_listAlgo[_position]->getFrequencySupportedInput();
|
||||
}
|
||||
etk::Vector<float> freq = getUnion<float>(freqOut, freqIn);
|
||||
DRAIN_VERBOSE(" freq out :" << freqOut);
|
||||
DRAIN_VERBOSE(" freq in :" << freqIn);
|
||||
DRAIN_VERBOSE(" freq union :" << freq);
|
||||
|
||||
// step 2 : Check map:
|
||||
etk::Vector<etk::Vector<audio::channel> > mapOut;
|
||||
etk::Vector<etk::Vector<audio::channel> > mapIn;
|
||||
if (_position == 0) {
|
||||
mapOut.pushBack(m_inputConfig.getMap());
|
||||
} else {
|
||||
mapOut = m_listAlgo[_position-1]->getMapSupportedOutput();
|
||||
}
|
||||
if (_position == m_listAlgo.size()) {
|
||||
mapIn.pushBack(m_outputConfig.getMap());
|
||||
} else {
|
||||
mapIn = m_listAlgo[_position]->getMapSupportedInput();
|
||||
}
|
||||
etk::Vector<etk::Vector<audio::channel> > map = getUnion<etk::Vector<audio::channel> >(mapOut, mapIn);
|
||||
DRAIN_VERBOSE(" map out :" << mapOut);
|
||||
DRAIN_VERBOSE(" map in :" << mapIn);
|
||||
DRAIN_VERBOSE(" map union :" << map);
|
||||
// step 3 : Check Format:
|
||||
etk::Vector<audio::format> formatOut;
|
||||
etk::Vector<audio::format> formatIn;
|
||||
if (_position == 0) {
|
||||
formatOut.pushBack(m_inputConfig.getFormat());
|
||||
} else {
|
||||
formatOut = m_listAlgo[_position-1]->getFormatSupportedOutput();
|
||||
}
|
||||
if (_position == m_listAlgo.size()) {
|
||||
formatIn.pushBack(m_outputConfig.getFormat());
|
||||
} else {
|
||||
formatIn = m_listAlgo[_position]->getFormatSupportedInput();
|
||||
}
|
||||
etk::Vector<audio::format> format = getUnion<audio::format>(formatOut, formatIn);
|
||||
DRAIN_VERBOSE(" format out :" << formatOut);
|
||||
DRAIN_VERBOSE(" format in :" << formatIn);
|
||||
DRAIN_VERBOSE(" format union :" << format);
|
||||
|
||||
if ( freq.size() >= 1
|
||||
&& map.size() >= 1
|
||||
&& format.size() >= 1) {
|
||||
DRAIN_VERBOSE(" find 1 compatibility :{format=" << format << ",frequency=" << freq << ",map=" << map << "}");
|
||||
drain::IOFormatInterface tmp(map[0], format[0], freq[0]);
|
||||
if (_position > 0) {
|
||||
m_listAlgo[_position-1]->setOutputFormat(tmp);
|
||||
}
|
||||
if (_position <m_listAlgo.size()) {
|
||||
m_listAlgo[_position]->setInputFormat(tmp);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// create mapping to transform:
|
||||
audio::drain::IOFormatInterface out;
|
||||
audio::drain::IOFormatInterface in;
|
||||
if (freq.size() > 0) {
|
||||
out.setFrequency(freq[0]);
|
||||
in.setFrequency(freq[0]);
|
||||
} else {
|
||||
if (freqOut.size() == 0) {
|
||||
if (freqIn.size() == 0) {
|
||||
if (_position == 0) {
|
||||
DRAIN_ERROR("IMPOSSIBLE CASE");
|
||||
} else {
|
||||
out.setFrequency(m_listAlgo[_position-1]->getInputFormat().getFrequency());
|
||||
in.setFrequency(m_listAlgo[_position-1]->getInputFormat().getFrequency());
|
||||
}
|
||||
} else {
|
||||
out.setFrequency(freqIn[0]);
|
||||
in.setFrequency(freqIn[0]);
|
||||
}
|
||||
} else {
|
||||
if (freqIn.size() == 0) {
|
||||
out.setFrequency(freqOut[0]);
|
||||
in.setFrequency(freqOut[0]);
|
||||
} else {
|
||||
out.setFrequency(freqOut[0]);
|
||||
in.setFrequency(freqIn[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (map.size() > 0) {
|
||||
out.setMap(map[0]);
|
||||
in.setMap(map[0]);
|
||||
} else {
|
||||
if (mapOut.size() == 0) {
|
||||
if (mapIn.size() == 0) {
|
||||
if (_position == 0) {
|
||||
DRAIN_ERROR("IMPOSSIBLE CASE");
|
||||
} else {
|
||||
out.setMap(m_listAlgo[_position-1]->getInputFormat().getMap());
|
||||
in.setMap(m_listAlgo[_position-1]->getInputFormat().getMap());
|
||||
}
|
||||
} else {
|
||||
out.setMap(mapIn[0]);
|
||||
in.setMap(mapIn[0]);
|
||||
}
|
||||
} else {
|
||||
if (mapIn.size() == 0) {
|
||||
out.setMap(mapOut[0]);
|
||||
in.setMap(mapOut[0]);
|
||||
} else {
|
||||
out.setMap(mapOut[0]);
|
||||
in.setMap(mapIn[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (format.size() > 0) {
|
||||
out.setFormat(format[0]);
|
||||
in.setFormat(format[0]);
|
||||
} else {
|
||||
if (formatOut.size() == 0) {
|
||||
if (formatIn.size() == 0) {
|
||||
if (_position == 0) {
|
||||
DRAIN_ERROR("IMPOSSIBLE CASE");
|
||||
} else {
|
||||
out.setFormat(m_listAlgo[_position-1]->getInputFormat().getFormat());
|
||||
in.setFormat(m_listAlgo[_position-1]->getInputFormat().getFormat());
|
||||
}
|
||||
} else {
|
||||
out.setFormat(formatIn[0]);
|
||||
in.setFormat(formatIn[0]);
|
||||
}
|
||||
} else {
|
||||
if (formatIn.size() == 0) {
|
||||
out.setFormat(formatOut[0]);
|
||||
in.setFormat(formatOut[0]);
|
||||
} else {
|
||||
out.setFormat(formatOut[0]);
|
||||
in.setFormat(formatIn[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
DRAIN_VERBOSE(" update: out=" << out);
|
||||
DRAIN_VERBOSE(" in=" << in);
|
||||
if (_position > 0) {
|
||||
m_listAlgo[_position-1]->setOutputFormat(out);
|
||||
}
|
||||
if (_position < m_listAlgo.size()) {
|
||||
m_listAlgo[_position]->setInputFormat(in);
|
||||
}
|
||||
// TODO : Add updater with an optimisation of CPU
|
||||
if (out.getFrequency() != in.getFrequency()) {
|
||||
|
||||
// TODO : Do it better: special check for resampler : only support int16_t
|
||||
if ( out.getFormat() != audio::format_int16
|
||||
/* && out.getFormat() != format_float */) {
|
||||
// need add a format Updater
|
||||
ememory::SharedPtr<audio::drain::FormatUpdate> algo = audio::drain::FormatUpdate::create();
|
||||
algo->setTemporary();
|
||||
algo->setInputFormat(out);
|
||||
out.setFormat(audio::format_int16);
|
||||
algo->setOutputFormat(out);
|
||||
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
|
||||
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
|
||||
DRAIN_VERBOSE("convert " << out.getFormat() << " -> " << in.getFormat());
|
||||
_position++;
|
||||
}
|
||||
// need add a resampler
|
||||
ememory::SharedPtr<audio::drain::Resampler> algo = audio::drain::Resampler::create();
|
||||
algo->setTemporary();
|
||||
algo->setInputFormat(out);
|
||||
out.setFrequency(in.getFrequency());
|
||||
algo->setOutputFormat(out);
|
||||
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
|
||||
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
|
||||
DRAIN_VERBOSE("convert " << out.getFrequency() << " -> " << in.getFrequency());
|
||||
out.setFrequency(in.getFrequency());
|
||||
_position++;
|
||||
}
|
||||
if (out.getMap() != in.getMap()) {
|
||||
// need add a channel Reorder
|
||||
ememory::SharedPtr<audio::drain::ChannelReorder> algo = audio::drain::ChannelReorder::create();
|
||||
algo->setTemporary();
|
||||
algo->setInputFormat(out);
|
||||
out.setMap(in.getMap());
|
||||
algo->setOutputFormat(out);
|
||||
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
|
||||
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
|
||||
DRAIN_VERBOSE("convert " << out.getMap() << " -> " << in.getMap());
|
||||
_position++;
|
||||
}
|
||||
if (out.getFormat() != in.getFormat()) {
|
||||
// need add a format Updater
|
||||
ememory::SharedPtr<audio::drain::FormatUpdate> algo = audio::drain::FormatUpdate::create();
|
||||
algo->setTemporary();
|
||||
algo->setInputFormat(out);
|
||||
out.setFormat(in.getFormat());
|
||||
algo->setOutputFormat(out);
|
||||
algo->setStatusFunction([=](const etk::String& _origin, const etk::String& _status) { generateStatus(_origin, _status);});
|
||||
m_listAlgo.insert(m_listAlgo.begin()+_position, algo);
|
||||
DRAIN_VERBOSE("convert " << out.getFormat() << " -> " << in.getFormat());
|
||||
_position++;
|
||||
}
|
||||
|
||||
} else if ( ( _position > 0
|
||||
&& m_listAlgo[_position-1]->getOutputFormat().getConfigured() == false
|
||||
)
|
||||
|| ( _position < m_listAlgo.size()
|
||||
&& m_listAlgo[_position]->getInputFormat().getConfigured() == false
|
||||
)
|
||||
) {
|
||||
DRAIN_ERROR(" configuration error mode in " << _position-1 << " && " << _position );
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::Process::updateInterAlgo() {
|
||||
if (m_isConfigured == true) {
|
||||
// cahin is already configured
|
||||
return ;
|
||||
}
|
||||
DRAIN_VERBOSE("Display properties : nbAlgo : " << m_listAlgo.size());
|
||||
displayAlgo();
|
||||
DRAIN_VERBOSE("********* configuration START *************");
|
||||
// configure first the endpoint ...
|
||||
if (m_listAlgo.size() >= 1) {
|
||||
updateAlgo(m_listAlgo.size());
|
||||
}
|
||||
for (size_t iii=0; iii<=m_listAlgo.size(); ++iii) {
|
||||
updateAlgo(iii);
|
||||
}
|
||||
DRAIN_VERBOSE("********* configuration will be done *************");
|
||||
displayAlgo();
|
||||
m_isConfigured = true;
|
||||
//exit(-1);
|
||||
}
|
||||
|
||||
void audio::drain::Process::removeAlgoDynamic() {
|
||||
if (m_isConfigured == true) {
|
||||
// chain is already unconfigured.
|
||||
return;
|
||||
}
|
||||
m_isConfigured = false;
|
||||
}
|
||||
|
||||
|
||||
bool audio::drain::Process::processIn(void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void* _outData,
|
||||
size_t _outNbChunk){
|
||||
void* outData = null;
|
||||
size_t outSize = 0;
|
||||
bool error = process(_inData, _inNbChunk, outData, outSize);
|
||||
if (outSize != _outNbChunk) {
|
||||
DRAIN_ERROR("can not copy data to output (not the same chunk number : out=" << outSize << " chunks != request=" << _outNbChunk << " chunks");
|
||||
return false;
|
||||
}
|
||||
// TODO : Do it better ...
|
||||
DRAIN_VERBOSE("Copy " << _outNbChunk << " chunks byte size=" << audio::getFormatBytes(m_outputConfig.getFormat()) << " nbChan=" << m_outputConfig.getMap().size() << " format=" << m_outputConfig.getFormat());
|
||||
memcpy(_outData, outData, _outNbChunk*audio::getFormatBytes(m_outputConfig.getFormat()) * m_outputConfig.getMap().size());
|
||||
return false;
|
||||
}
|
||||
|
||||
static void link(ememory::SharedPtr<etk::io::Interface>& _io, const etk::String& _first, const etk::String& _op, const etk::String& _second, bool _isLink=true) {
|
||||
if (_op == "->") {
|
||||
if (_isLink) {
|
||||
*_io << " " << _first << " -> " << _second << ";\n";
|
||||
} else {
|
||||
*_io << " " << _first << " -> " << _second << " [style=dashed];\n";
|
||||
}
|
||||
} else if (_op == "<-") {
|
||||
*_io << " " << _first << " -> " <<_second<< " [color=transparent];\n";
|
||||
if (_isLink) {
|
||||
*_io << " " << _second << " -> " << _first << " [constraint=false];\n";
|
||||
} else {
|
||||
*_io << " " << _second << " -> " << _first << " [constraint=false, style=dashed];\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::Process::generateDot(ememory::SharedPtr<etk::io::Interface>& _io,
|
||||
int32_t _offset,
|
||||
int32_t _basicID,
|
||||
etk::String& _nameIn,
|
||||
etk::String& _nameOut,
|
||||
bool _reserseGraph) {
|
||||
*_io << " subgraph clusterNode_" << _basicID << "_process {\n";
|
||||
*_io << " label=\"Drain::Process" << (_reserseGraph?"_R":"_N") << "\";\n";
|
||||
*_io << " node [shape=ellipse];\n";
|
||||
|
||||
if (_reserseGraph == false) {
|
||||
// ----------------------
|
||||
// -- STEP 1 --
|
||||
// ----------------------
|
||||
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
|
||||
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
|
||||
<< "\\n freq=" << getInputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
|
||||
// ----------------------
|
||||
// -- STEP 2 --
|
||||
// ----------------------
|
||||
etk::String connectString = _nameIn;
|
||||
*_io << " node [shape=box];\n";
|
||||
// ----------------------
|
||||
// -- STEP 3 --
|
||||
// ----------------------
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
if (m_listAlgo[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
|
||||
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
|
||||
if (m_listAlgo[iii]->getName() != "") {
|
||||
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
|
||||
}
|
||||
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
|
||||
if (tmpDesc.size() != 0) {
|
||||
*_io << tmpDesc;
|
||||
}
|
||||
*_io << "\" ];\n";
|
||||
link(_io, connectString, "->", connectStringSecond);
|
||||
connectString = connectStringSecond;
|
||||
}
|
||||
// ----------------------
|
||||
// -- STEP 4 --
|
||||
// ----------------------
|
||||
*_io << " node [shape=ellipse];\n";
|
||||
// ----------------------
|
||||
// -- STEP 5 --
|
||||
// ----------------------
|
||||
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
|
||||
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
|
||||
<< "\\n freq=" << getOutputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
|
||||
// ----------------------
|
||||
// -- STEP 6 --
|
||||
// ----------------------
|
||||
link(_io, connectString, "->", _nameOut);
|
||||
} else {
|
||||
// ----------------------
|
||||
// -- STEP 1 --
|
||||
// ----------------------
|
||||
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
|
||||
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
|
||||
<< "\\n freq=" << getOutputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
|
||||
// ----------------------
|
||||
// -- STEP 2 --
|
||||
// ----------------------
|
||||
etk::String connectString = _nameIn;
|
||||
*_io << " node [shape=box];\n";
|
||||
// ----------------------
|
||||
// -- STEP 3 --
|
||||
// ----------------------
|
||||
for (int32_t iii=m_listAlgo.size()-1; iii>=0; --iii) {
|
||||
//for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
if (m_listAlgo[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
|
||||
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
|
||||
if (m_listAlgo[iii]->getName() != "") {
|
||||
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
|
||||
}
|
||||
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
|
||||
if (tmpDesc.size() != 0) {
|
||||
*_io << tmpDesc;
|
||||
}
|
||||
*_io << "\" ];\n";
|
||||
//link(_io, connectStringSecond, "<-", connectString);
|
||||
link(_io, connectString, "<-", connectStringSecond);
|
||||
//link(_io, connectStringSecond, "->", connectString);
|
||||
connectString = connectStringSecond;
|
||||
}
|
||||
// ----------------------
|
||||
// -- STEP 4 --
|
||||
// ----------------------
|
||||
*_io << " node [shape=ellipse];\n";
|
||||
// ----------------------
|
||||
// -- STEP 5 --
|
||||
// ----------------------
|
||||
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
|
||||
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
|
||||
<< "\\n freq=" << getInputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
|
||||
// ----------------------
|
||||
// -- STEP 6 --
|
||||
// ----------------------
|
||||
link(_io, connectString, "<-", _nameOut);
|
||||
}
|
||||
*_io << " }\n";
|
||||
}
|
||||
|
||||
void audio::drain::Process::generateDotProcess(ememory::SharedPtr<etk::io::Interface>& _io, int32_t _offset, int32_t _basicID, etk::String& _nameIn, etk::String& _nameOut, bool _reserseGraph) {
|
||||
*_io << " subgraph clusterNode_" << _basicID << "_process {\n";
|
||||
*_io << " label=\"Drain::Process" << (_reserseGraph?"_R":"_N") << "\";\n";
|
||||
*_io << " node [shape=ellipse];\n";
|
||||
|
||||
if (_reserseGraph == true) {
|
||||
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
|
||||
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
|
||||
<< "\\n freq=" << getInputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
|
||||
} else {
|
||||
_nameIn = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
|
||||
*_io << " " << _nameIn << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
|
||||
<< "\\n freq=" << getOutputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
|
||||
}
|
||||
etk::String connectString = _nameIn;
|
||||
*_io << " node [shape=box];\n";
|
||||
if (_reserseGraph == false) {
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
if (m_listAlgo[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
|
||||
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
|
||||
if (m_listAlgo[iii]->getName() != "") {
|
||||
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
|
||||
}
|
||||
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
|
||||
if (tmpDesc.size() != 0) {
|
||||
*_io << tmpDesc;
|
||||
}
|
||||
*_io << "\" ];\n";
|
||||
link(_io, connectString, "->", connectStringSecond);
|
||||
connectString = connectStringSecond;
|
||||
}
|
||||
} else {
|
||||
//for (int32_t iii=m_listAlgo.size()-1; iii>=0; --iii) {
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
if (m_listAlgo[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
etk::String connectStringSecond = "ALGO_" + etk::toString(_basicID) + "__" + etk::toString(iii);
|
||||
*_io << " " << connectStringSecond << " [label=\"ALGO\\ntype='" << m_listAlgo[iii]->getType() << "'";
|
||||
if (m_listAlgo[iii]->getName() != "") {
|
||||
*_io << "\\nname='" << m_listAlgo[iii]->getName() << "'";
|
||||
}
|
||||
etk::String tmpDesc = m_listAlgo[iii]->getDotDesc();
|
||||
if (tmpDesc.size() != 0) {
|
||||
*_io << tmpDesc;
|
||||
}
|
||||
*_io << "\" ];\n";
|
||||
link(_io, connectStringSecond, "<-", connectString);
|
||||
connectString = connectStringSecond;
|
||||
}
|
||||
}
|
||||
*_io << " node [shape=ellipse];\n";
|
||||
if (_reserseGraph == true) {
|
||||
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_out";
|
||||
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getOutputConfig().getFormat())
|
||||
<< "\\n freq=" << getOutputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getOutputConfig().getMap()) << "\\n out\" ];\n";
|
||||
} else {
|
||||
_nameOut = "INTERFACE_ALGO_" + etk::toString(_basicID) + "_in";
|
||||
*_io << " " << _nameOut << " [ label=\"format=" << etk::toString(getInputConfig().getFormat())
|
||||
<< "\\n freq=" << getInputConfig().getFrequency()
|
||||
<< "\\n channelMap=" << etk::toString(getInputConfig().getMap()) << "\\n in\" ];\n";
|
||||
}
|
||||
if (_reserseGraph == false) {
|
||||
link(_io, connectString, "->", _nameOut);
|
||||
} else {
|
||||
link(_io, _nameOut, "<-", connectString);
|
||||
}
|
||||
*_io << " }\n";
|
||||
}
|
||||
|
||||
|
||||
void audio::drain::Process::generateStatus(const etk::String& _origin, const etk::String& _status) {
|
||||
if (m_statusFunction != null) {
|
||||
m_statusFunction(_origin, _status);
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::Process::setStatusFunction(statusFunction _newFunction) {
|
||||
m_statusFunction = _newFunction;
|
||||
}
|
@ -1,187 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/String.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
#include <etk/io/Interface.hpp>
|
||||
#include <audio/format.hpp>
|
||||
#include <audio/channel.hpp>
|
||||
#include <audio/drain/Algo.hpp>
|
||||
#include <echrono/Steady.hpp>
|
||||
#include <ememory/memory.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain{
|
||||
typedef etk::Function<void (const etk::String& _origin, const etk::String& _status)> statusFunction;
|
||||
class Process {
|
||||
protected:
|
||||
etk::Vector<int8_t> m_data; //!< temporary overlap output buffer (change size of the output data)
|
||||
public:
|
||||
Process();
|
||||
virtual ~Process();
|
||||
public:
|
||||
/**
|
||||
* @brief Push data in the algo stream.
|
||||
* @param[in] _time Time of the first sample pushed.
|
||||
* @param[in] _data Pointer on the data pushed.
|
||||
* @param[in] _nbChunk Number of chunk present in the pointer.
|
||||
* @return true The procress is done corectly.
|
||||
* @return false An error occured.
|
||||
*/
|
||||
bool push(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk);
|
||||
/**
|
||||
* @brief Push data in the algo stream.
|
||||
* @param[in] _time Time of the first sample requested.
|
||||
* @param[in] _data Pointer on the data pushed.
|
||||
* @param[in,out] _nbChunk Number of chunk present in the pointer (set at the number of chunk requested(hope)).
|
||||
* @param[out] _chunkSize size of a single chunk. TODO : Not needed ... Remove it ...
|
||||
* @return true The procress is done corectly.
|
||||
* @return false An error occured.
|
||||
*/
|
||||
bool pull(audio::Time& _time,
|
||||
void* _data,
|
||||
size_t _nbChunk,
|
||||
size_t _chunkSize);
|
||||
/**
|
||||
* @brief Push data in the algo stream.
|
||||
* @param[in] _time Time of the first sample pushed.
|
||||
* @param[in] _inData Pointer on the data pushed.
|
||||
* @param[in] _inNbChunk Number of chunk present in the input pointer.
|
||||
* @param[out] _outData Pointer on the data geted.
|
||||
* @param[out] _outNbChunk Number of chunk present in the output pointer.
|
||||
* @return true The procress is done corectly.
|
||||
* @return false An error occured.
|
||||
*/
|
||||
bool process(audio::Time& _time,
|
||||
void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void*& _outData,
|
||||
size_t& _outNbChunk);
|
||||
bool process(void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void*& _outData,
|
||||
size_t& _outNbChunk) {
|
||||
audio::Time time;
|
||||
return process(time, _inData, _inNbChunk, _outData, _outNbChunk);
|
||||
}
|
||||
bool processIn(void* _inData,
|
||||
size_t _inNbChunk,
|
||||
void* _outData,
|
||||
size_t _outNbChunk);
|
||||
protected:
|
||||
IOFormatInterface m_inputConfig;
|
||||
public:
|
||||
const IOFormatInterface& getInputConfig() const {
|
||||
return m_inputConfig;
|
||||
}
|
||||
void setInputConfig(const IOFormatInterface& _interface) {
|
||||
m_inputConfig = _interface;
|
||||
}
|
||||
protected:
|
||||
IOFormatInterface m_outputConfig;
|
||||
public:
|
||||
const IOFormatInterface& getOutputConfig() const {
|
||||
return m_outputConfig;
|
||||
}
|
||||
void setOutputConfig(const IOFormatInterface& _interface) {
|
||||
m_outputConfig = _interface;
|
||||
}
|
||||
protected:
|
||||
etk::Vector<ememory::SharedPtr<drain::Algo> > m_listAlgo;
|
||||
public:
|
||||
void pushBack(ememory::SharedPtr<drain::Algo> _algo);
|
||||
void pushFront(ememory::SharedPtr<drain::Algo> _algo);
|
||||
void clear() {
|
||||
m_isConfigured = false;
|
||||
m_listAlgo.clear();
|
||||
}
|
||||
size_t size() {
|
||||
return m_listAlgo.size();
|
||||
}
|
||||
etk::Vector<ememory::SharedPtr<drain::Algo>>::Iterator begin() {
|
||||
return m_listAlgo.begin();
|
||||
}
|
||||
etk::Vector<ememory::SharedPtr<drain::Algo>>::Iterator end() {
|
||||
return m_listAlgo.end();
|
||||
}
|
||||
ememory::SharedPtr<drain::Algo> operator[](int32_t _id) {
|
||||
return m_listAlgo[_id];
|
||||
}
|
||||
|
||||
template<typename T> ememory::SharedPtr<T> get(const etk::String& _name) {
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
if (m_listAlgo[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
if (m_listAlgo[iii]->getName() == _name) {
|
||||
return ememory::dynamicPointerCast<T>(m_listAlgo[iii]);
|
||||
}
|
||||
}
|
||||
return ememory::SharedPtr<T>();
|
||||
}
|
||||
template<typename T> ememory::SharedPtr<const T> get(const etk::String& _name) const {
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
if (m_listAlgo[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
if (m_listAlgo[iii]->getName() == _name) {
|
||||
return ememory::dynamicPointerCast<T>(m_listAlgo[iii]);
|
||||
}
|
||||
}
|
||||
return ememory::SharedPtr<const T>();
|
||||
}
|
||||
template<typename T> ememory::SharedPtr<T> get(int32_t _id) {
|
||||
return ememory::dynamicPointerCast<T>(m_listAlgo[_id]);
|
||||
}
|
||||
template<typename T> void removeIfFirst() {
|
||||
if (m_listAlgo.size() > 0) {
|
||||
ememory::SharedPtr<T> algoEP = get<T>(0);
|
||||
if (algoEP != null) {
|
||||
m_listAlgo.erase(m_listAlgo.begin());
|
||||
}
|
||||
}
|
||||
}
|
||||
template<typename T> void removeIfLast() {
|
||||
if (m_listAlgo.size() > 0) {
|
||||
ememory::SharedPtr<T> algoEP = get<T>(m_listAlgo.size()-1);
|
||||
if (algoEP != null) {
|
||||
m_listAlgo.erase(m_listAlgo.begin()+m_listAlgo.size()-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
template<typename T> bool hasType() {
|
||||
for (size_t iii=0; iii<m_listAlgo.size(); ++iii) {
|
||||
ememory::SharedPtr<T> tmp = ememory::dynamicPointerCast<T>(m_listAlgo[iii]);
|
||||
if (tmp != null) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private:
|
||||
statusFunction m_statusFunction;
|
||||
public:
|
||||
void generateStatus(const etk::String& _origin, const etk::String& _status);
|
||||
void setStatusFunction(statusFunction _newFunction);
|
||||
private:
|
||||
bool m_isConfigured;
|
||||
public:
|
||||
void updateInterAlgo();
|
||||
void removeAlgoDynamic();
|
||||
private:
|
||||
void displayAlgo();
|
||||
void updateAlgo(size_t _position);
|
||||
public:
|
||||
void generateDot(ememory::SharedPtr<etk::io::Interface>& _io, int32_t _offset, int32_t _basicID, etk::String& _nameIn, etk::String& _nameOut, bool _reserseGraph);
|
||||
// TODO : Remove this one when we find a good way to do it ...
|
||||
void generateDotProcess(ememory::SharedPtr<etk::io::Interface>& _io, int32_t _offset, int32_t _basicID, etk::String& _nameIn, etk::String& _nameOut, bool _reserseGraph);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,162 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/Resampler.hpp>
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
audio::drain::Resampler::Resampler() :
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
m_speexResampler(null),
|
||||
#endif
|
||||
m_positionRead(0),
|
||||
m_positionWrite(0) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::Resampler::init() {
|
||||
audio::drain::Algo::init();
|
||||
m_type = "Resampler";
|
||||
m_supportedFormat.pushBack(audio::format_int16);
|
||||
m_residualTimeInResampler = audio::Duration(0);
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::Resampler> audio::drain::Resampler::create() {
|
||||
ememory::SharedPtr<audio::drain::Resampler> tmp(ETK_NEW(audio::drain::Resampler));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
audio::drain::Resampler::~Resampler() {
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
if (m_speexResampler != null) {
|
||||
speex_resampler_destroy(m_speexResampler);
|
||||
m_speexResampler = null;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void audio::drain::Resampler::configurationChange() {
|
||||
audio::drain::Algo::configurationChange();
|
||||
if (m_input.getFormat() != m_output.getFormat()) {
|
||||
DRAIN_ERROR("can not support Format Change ...");
|
||||
m_needProcess = false;
|
||||
}
|
||||
if (m_input.getFormat() != audio::format_int16) {
|
||||
DRAIN_ERROR("can not support Format other than int16_t ...");
|
||||
m_needProcess = false;
|
||||
return;
|
||||
}
|
||||
if (m_output.getMap() != m_output.getMap()) {
|
||||
DRAIN_ERROR("can not support map Change ...");
|
||||
m_needProcess = false;
|
||||
}
|
||||
if (m_input.getFrequency() == m_output.getFrequency()) {
|
||||
// nothing to process...
|
||||
m_needProcess = false;
|
||||
return;
|
||||
}
|
||||
if ( m_input.getFrequency() == 0
|
||||
|| m_output.getFrequency() == 0) {
|
||||
DRAIN_WARNING("Configure IO with 0 frequency ... " << m_input << " to " << m_output);
|
||||
return;
|
||||
}
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
if (m_speexResampler != null) {
|
||||
speex_resampler_destroy(m_speexResampler);
|
||||
m_speexResampler = null;
|
||||
}
|
||||
int err = 0;
|
||||
DRAIN_WARNING("Create resampler for : " << m_input << " to " << m_output);
|
||||
m_speexResampler = speex_resampler_init(m_output.getMap().size(),
|
||||
m_input.getFrequency(),
|
||||
m_output.getFrequency(),
|
||||
10, &err);
|
||||
m_residualTimeInResampler = audio::Duration(0);
|
||||
#else
|
||||
DRAIN_WARNING("SPEEX DSP lib not accessible ==> can not resample");
|
||||
m_needProcess = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool audio::drain::Resampler::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk) {
|
||||
drain::AutoLogInOut tmpLog("Resampler");
|
||||
_outputNbChunk = 2048;
|
||||
// chack if we need to process:
|
||||
if (m_needProcess == false) {
|
||||
DRAIN_WARNING("no process");
|
||||
_output = _input;
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
return true;
|
||||
}
|
||||
if (_input == null) {
|
||||
_output = &(m_outputData[0]);
|
||||
_outputNbChunk = 0;
|
||||
DRAIN_ERROR("null pointer input ... ");
|
||||
return false;
|
||||
}
|
||||
// Update Output time with the previous delta of the buffer
|
||||
DRAIN_VERBOSE("Resampler correct timestamp : " << _time << " ==> " << (_time - m_residualTimeInResampler));
|
||||
_time -= m_residualTimeInResampler;
|
||||
|
||||
audio::Duration inTime(0, (int64_t(_inputNbChunk)*1000000000LL) / int64_t(m_input.getFrequency()));
|
||||
m_residualTimeInResampler += inTime;
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
float nbInputTime = float(_inputNbChunk)/m_input.getFrequency();
|
||||
float nbOutputSample = nbInputTime*m_output.getFrequency();
|
||||
// we add 10% of the buffer size to have all the time enought data in the output to proceed all the input data...
|
||||
_outputNbChunk = size_t(nbOutputSample*1.5f);
|
||||
DRAIN_VERBOSE(" freq in=" << m_input.getFrequency() << " out=" << m_output.getFrequency());
|
||||
DRAIN_VERBOSE(" Frame duration=" << nbInputTime);
|
||||
DRAIN_VERBOSE(" nbInput chunk=" << _inputNbChunk << " nbOutputChunk=" << nbOutputSample);
|
||||
|
||||
m_outputData.resize(_outputNbChunk*m_output.getMap().size()*m_formatSize*16);
|
||||
_output = &(m_outputData[0]);
|
||||
if (m_speexResampler == null) {
|
||||
DRAIN_ERROR(" No speex resampler");
|
||||
return false;
|
||||
}
|
||||
uint32_t nbChunkInput = _inputNbChunk;
|
||||
uint32_t nbChunkOutput = _outputNbChunk;
|
||||
DRAIN_VERBOSE(" >> input=" << nbChunkInput << " output=" << nbChunkOutput);
|
||||
int ret = speex_resampler_process_interleaved_int(m_speexResampler,
|
||||
static_cast<int16_t*>(_input),
|
||||
&nbChunkInput,
|
||||
static_cast<int16_t*>(_output),
|
||||
&nbChunkOutput);
|
||||
DRAIN_VERBOSE(" << input=" << nbChunkInput << " output=" << nbChunkOutput);
|
||||
// update position of data:
|
||||
m_positionWrite += nbChunkOutput;
|
||||
// Check all input and output ...
|
||||
if (nbChunkInput != _inputNbChunk) {
|
||||
DRAIN_ERROR(" inputSize (not all read ...) proceed=" << nbChunkInput << " requested=" << _inputNbChunk);
|
||||
// TODO : manage this case ...
|
||||
}
|
||||
if (nbChunkOutput == _outputNbChunk) {
|
||||
DRAIN_ERROR(" Might have not enought data in output... output size=" << _outputNbChunk);
|
||||
// TODO : manage this case ...
|
||||
}
|
||||
_outputNbChunk = nbChunkOutput;
|
||||
DRAIN_VERBOSE(" process chunk=" << nbChunkInput << " out=" << nbChunkOutput);
|
||||
audio::Duration outTime(0, (int64_t(_outputNbChunk)*1000000000LL) / int64_t(m_output.getFrequency()));
|
||||
DRAIN_VERBOSE("convert " << _inputNbChunk << " ==> " << _outputNbChunk << " " << inTime << " => " << outTime);
|
||||
// correct time :
|
||||
m_residualTimeInResampler -= outTime;
|
||||
/*
|
||||
if (m_residualTimeInResampler.get() < 0) {
|
||||
DRAIN_TODO("manage this case ... residual time in resampler : " << m_residualTimeInResampler << "ns");
|
||||
}
|
||||
*/
|
||||
return true;
|
||||
#else
|
||||
_output = _input;
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
return false;
|
||||
#endif
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/Algo.hpp>
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
#include <speex/speex_resampler.h>
|
||||
#endif
|
||||
#include <ememory/memory.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
// TODO: Manage change timestamp when pull mode
|
||||
// TODO: drain ...
|
||||
class Resampler : public audio::drain::Algo {
|
||||
private:
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
SpeexResamplerState* m_speexResampler;
|
||||
#endif
|
||||
size_t m_positionRead; //!< For residual data in the buffer last read number of chunk
|
||||
size_t m_positionWrite; //!< Current pointer of writing new output data of resampler
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
Resampler();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<audio::drain::Resampler> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~Resampler();
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
private:
|
||||
audio::Duration m_residualTimeInResampler; //!< the time of data locked in the resampler ...
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,451 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/Volume.hpp>
|
||||
extern "C" {
|
||||
#include <math.h>
|
||||
}
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
audio::drain::Volume::Volume() :
|
||||
m_volumeAppli(1.0f),
|
||||
m_functionConvert(null) {
|
||||
|
||||
}
|
||||
|
||||
void audio::drain::Volume::init() {
|
||||
audio::drain::Algo::init();
|
||||
m_type = "Volume";
|
||||
m_supportedFormat.pushBack(audio::format_int16);
|
||||
m_supportedFormat.pushBack(audio::format_int16_on_int32);
|
||||
}
|
||||
|
||||
ememory::SharedPtr<audio::drain::Volume> audio::drain::Volume::create() {
|
||||
ememory::SharedPtr<audio::drain::Volume> tmp(ETK_NEW(audio::drain::Volume));
|
||||
tmp->init();
|
||||
return tmp;
|
||||
}
|
||||
|
||||
audio::drain::Volume::~Volume() {
|
||||
|
||||
}
|
||||
|
||||
static int32_t neareastsss(float _val) {
|
||||
int32_t out = 0;
|
||||
while (_val > float(1<<out)) {
|
||||
out++;
|
||||
}
|
||||
return etk::min(16,out);
|
||||
}
|
||||
|
||||
|
||||
static void convert__int16__to__int16(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = int16_t((int32_t(in[iii]) * int32_t(_volumeCoef)) >> _volumeDecalage);
|
||||
}
|
||||
}
|
||||
static void convert__int16__to__float(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
float* out = static_cast<float*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = double((int32_t(in[iii]) * int32_t(_volumeCoef)) >> _volumeDecalage) * 0.00003051757;
|
||||
}
|
||||
}
|
||||
|
||||
static void convert__int16__to__int32(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
|
||||
int16_t* in = static_cast<int16_t*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = (int32_t(in[iii]) * int32_t(_volumeCoef)) >> _volumeDecalage;
|
||||
}
|
||||
//DRAIN_INFO("plop " << in[0] << " >> " << out[0]);
|
||||
}
|
||||
|
||||
static void convert__int32__to__int16(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
int16_t* out = static_cast<int16_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
int32_t value = in[iii] >> 16;
|
||||
out[iii] = int16_t((int64_t(in[iii]) * int64_t(_volumeCoef)) >> _volumeDecalage);
|
||||
}
|
||||
}
|
||||
|
||||
static void convert__int32__to__int32(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
|
||||
int32_t* in = static_cast<int32_t*>(_input);
|
||||
int32_t* out = static_cast<int32_t*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = int32_t((int64_t(in[iii]) * int64_t(_volumeCoef)) >> _volumeDecalage);
|
||||
}
|
||||
//DRAIN_INFO("plop " << in[0] << " >> " << out[0]);
|
||||
}
|
||||
|
||||
static void convert__float__to__float(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli) {
|
||||
float* in = static_cast<float*>(_input);
|
||||
float* out = static_cast<float*>(_output);
|
||||
for (size_t iii=0; iii<_nbSample; ++iii) {
|
||||
out[iii] = in[iii] * _volumeAppli;
|
||||
}
|
||||
}
|
||||
|
||||
void audio::drain::Volume::configurationChange() {
|
||||
audio::drain::Algo::configurationChange();
|
||||
switch (m_input.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
m_functionConvert = &convert__int16__to__int16;
|
||||
DRAIN_DEBUG("Use converter : 'convert__int16__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
case audio::format_int32:
|
||||
m_functionConvert = &convert__int16__to__int32;
|
||||
DRAIN_DEBUG("Use converter : 'convert__int16__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_float:
|
||||
m_functionConvert = &convert__int16__to__float;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
case audio::format_int32:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
m_functionConvert = &convert__int32__to__int16;
|
||||
DRAIN_DEBUG("Use converter : 'convert__int32__to__int16' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
case audio::format_int32:
|
||||
m_functionConvert = &convert__int32__to__int32;
|
||||
DRAIN_DEBUG("Use converter : 'convert__int32__to__int32' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
case audio::format_float:
|
||||
DRAIN_ERROR("Impossible case 2");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_float:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
case audio::format_int16_on_int32:
|
||||
case audio::format_int32:
|
||||
DRAIN_ERROR("Impossible case 4");
|
||||
break;
|
||||
case audio::format_float:
|
||||
m_functionConvert = &convert__float__to__float;
|
||||
DRAIN_DEBUG("Use converter : 'convert__float__to__float' for " << m_input.getFormat() << " to " << m_output.getFormat());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (m_input.getMap() != m_output.getMap()) {
|
||||
DRAIN_ERROR("Volume map change is not supported");
|
||||
}
|
||||
if (m_input.getFrequency() != m_output.getFrequency()) {
|
||||
DRAIN_ERROR("Volume frequency change is not supported");
|
||||
}
|
||||
// nee to process all time (the format not change (just a simple filter))
|
||||
m_needProcess = true;
|
||||
volumeChange();
|
||||
}
|
||||
|
||||
void audio::drain::Volume::volumeChange() {
|
||||
//m_volumeAppli = 20 * log(m_volumedB);
|
||||
float volumedB = 0.0f;
|
||||
bool mute = false;
|
||||
for (size_t iii=0; iii<m_volumeList.size(); ++iii) {
|
||||
if (m_volumeList[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
if (m_volumeList[iii]->getMute() == true) {
|
||||
mute = true;
|
||||
}
|
||||
volumedB += m_volumeList[iii]->getVolume();
|
||||
DRAIN_VERBOSE("append volume : '" << m_volumeList[iii]->getName() << " vol=" << m_volumeList[iii]->getVolume() << "dB");
|
||||
}
|
||||
DRAIN_DEBUG(" Total volume : " << volumedB << "dB nbVolume=" << m_volumeList.size());
|
||||
if (mute == true) {
|
||||
m_volumeAppli = 0.0f;
|
||||
m_volumeCoef = 0;
|
||||
m_volumeDecalage = 0;
|
||||
return;
|
||||
}
|
||||
#if (defined(__STDCPP_LLVM__) || __cplusplus < 201103L)
|
||||
m_volumeAppli = pow(10.0f, volumedB/20.0f);
|
||||
#else
|
||||
m_volumeAppli = etk::pow(10.0f, volumedB/20.0f);
|
||||
#endif
|
||||
switch (m_input.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 16;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 16-neareast;
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 16;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 16-neareast;
|
||||
}
|
||||
break;
|
||||
case audio::format_int32:
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 0;
|
||||
break;
|
||||
case audio::format_float:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 16;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 16-neareast;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 16;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 16-neareast;
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 16;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 16-neareast;
|
||||
}
|
||||
break;
|
||||
case audio::format_int32:
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 0;
|
||||
break;
|
||||
case audio::format_float:
|
||||
DRAIN_ERROR("Impossible case 2");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_int32:
|
||||
switch (m_output.getFormat()) {
|
||||
default:
|
||||
case audio::format_int16:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 32;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 32-neareast;
|
||||
}
|
||||
break;
|
||||
case audio::format_int16_on_int32:
|
||||
if (m_volumeAppli <= 1.0f) {
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 32;
|
||||
} else {
|
||||
int32_t neareast = neareastsss(m_volumeAppli);
|
||||
m_volumeCoef = m_volumeAppli*float(1<<(16-neareast));
|
||||
m_volumeDecalage = 32-neareast;
|
||||
}
|
||||
break;
|
||||
case audio::format_int32:
|
||||
m_volumeCoef = m_volumeAppli*float(1<<16);
|
||||
m_volumeDecalage = 16;
|
||||
break;
|
||||
case audio::format_float:
|
||||
DRAIN_ERROR("Impossible case 3");
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case audio::format_float:
|
||||
// nothing to do (use m_volumeAppli)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
etk::Vector<audio::format> audio::drain::Volume::getFormatSupportedInput() {
|
||||
etk::Vector<audio::format> tmp;
|
||||
if (m_output.getFormat() == audio::format_float) {
|
||||
tmp.pushBack(audio::format_float);
|
||||
}
|
||||
if ( m_output.getFormat() == audio::format_int16
|
||||
|| m_output.getFormat() == audio::format_int16_on_int32
|
||||
|| m_output.getFormat() == audio::format_int32) {
|
||||
tmp.pushBack(audio::format_int16);
|
||||
tmp.pushBack(audio::format_int16_on_int32);
|
||||
tmp.pushBack(audio::format_int32);
|
||||
}
|
||||
return tmp;
|
||||
};
|
||||
|
||||
etk::Vector<audio::format> audio::drain::Volume::getFormatSupportedOutput() {
|
||||
etk::Vector<audio::format> tmp;
|
||||
if (m_input.getFormat() == audio::format_float) {
|
||||
tmp.pushBack(audio::format_float);
|
||||
}
|
||||
if ( m_input.getFormat() == audio::format_int16
|
||||
|| m_input.getFormat() == audio::format_int16_on_int32
|
||||
|| m_input.getFormat() == audio::format_int32) {
|
||||
tmp.pushBack(audio::format_int16);
|
||||
tmp.pushBack(audio::format_int16_on_int32);
|
||||
tmp.pushBack(audio::format_int32);
|
||||
}
|
||||
return tmp;
|
||||
};
|
||||
|
||||
|
||||
bool audio::drain::Volume::process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk) {
|
||||
audio::drain::AutoLogInOut tmpLog("Volume");
|
||||
// chack if we need to process:
|
||||
if (m_needProcess == false) {
|
||||
_output = _input;
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
return true;
|
||||
}
|
||||
if (_input == null) {
|
||||
_output = &(m_outputData[0]);
|
||||
_outputNbChunk = 0;
|
||||
DRAIN_ERROR("null pointer input ... ");
|
||||
return false;
|
||||
}
|
||||
_outputNbChunk = _inputNbChunk;
|
||||
m_outputData.resize(_outputNbChunk*m_input.getMap().size()*m_formatSize);
|
||||
_output = &(m_outputData[0]);
|
||||
if (m_functionConvert == null) {
|
||||
DRAIN_ERROR("null function ptr");
|
||||
return false;
|
||||
}
|
||||
//DRAIN_WARNING("Apply volume : " << m_volumedB << "dB " << m_volumeAppli << " ==> x*" << m_volumeCoef << ">>" << m_volumeDecalage << " ex:50*C>>D=" << (50*m_volumeCoef>>m_volumeDecalage) );
|
||||
m_functionConvert(_input, _output, _outputNbChunk*m_input.getMap().size(), m_volumeCoef, m_volumeDecalage, m_volumeAppli);
|
||||
return true;
|
||||
}
|
||||
|
||||
void audio::drain::Volume::addVolumeStage(const ememory::SharedPtr<audio::drain::VolumeElement>& _volume) {
|
||||
if (_volume == null) {
|
||||
return;
|
||||
}
|
||||
for (size_t iii=0; iii<m_volumeList.size(); ++iii) {
|
||||
if (m_volumeList[iii] == null) {
|
||||
continue;
|
||||
}
|
||||
if (m_volumeList[iii] == _volume) {
|
||||
// already done ...
|
||||
return;
|
||||
}
|
||||
if (m_volumeList[iii]->getName() == _volume->getName()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_volumeList.pushBack(_volume);
|
||||
volumeChange();
|
||||
}
|
||||
|
||||
bool audio::drain::Volume::setParameter(const etk::String& _parameter, const etk::String& _value) {
|
||||
if (_parameter == "FLOW") {
|
||||
// set Volume ...
|
||||
for (auto &it : m_volumeList) {
|
||||
if (it == null) {
|
||||
continue;
|
||||
}
|
||||
if (it->getName() == "FLOW") {
|
||||
float value = 0;
|
||||
if (sscanf(_value.c_str(), "%fdB", &value) != 1) {
|
||||
return false;
|
||||
}
|
||||
if ( value < -300
|
||||
|| value > 300) {
|
||||
DRAIN_ERROR("Can not set volume ... : '" << _parameter << "' out of range : [-300..300]");
|
||||
return false;
|
||||
}
|
||||
it->setVolume(value);
|
||||
DRAIN_DEBUG("Set volume : FLOW = " << value << " dB (from:" << _value << ")");
|
||||
volumeChange();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
DRAIN_ERROR("unknow set Parameter : '" << _parameter << "' with Value: '" << _value << "'");
|
||||
return false;
|
||||
}
|
||||
|
||||
etk::String audio::drain::Volume::getParameter(const etk::String& _parameter) const {
|
||||
if (_parameter == "FLOW") {
|
||||
// set Volume ...
|
||||
for (auto &it : m_volumeList) {
|
||||
if (it == null) {
|
||||
continue;
|
||||
}
|
||||
if (it->getName() == "FLOW") {
|
||||
return etk::toString(it->getVolume()) + "dB";
|
||||
}
|
||||
}
|
||||
}
|
||||
DRAIN_ERROR("unknow get Parameter : '" << _parameter << "'");
|
||||
return "[ERROR]";
|
||||
}
|
||||
|
||||
etk::String audio::drain::Volume::getParameterProperty(const etk::String& _parameter) const {
|
||||
if (_parameter == "FLOW") {
|
||||
// set Volume ...
|
||||
for (auto &it : m_volumeList) {
|
||||
if (it == null) {
|
||||
continue;
|
||||
}
|
||||
if (it->getName() == "FLOW") {
|
||||
return "[-300..300]dB";
|
||||
}
|
||||
}
|
||||
}
|
||||
DRAIN_ERROR("unknow Parameter property for: '" << _parameter << "'");
|
||||
return "[ERROR]";
|
||||
}
|
||||
|
||||
etk::String audio::drain::Volume::getDotDesc() {
|
||||
etk::String out = audio::drain::Algo::getDotDesc();
|
||||
for (auto &it : m_volumeList) {
|
||||
if (it == null) {
|
||||
continue;
|
||||
}
|
||||
out += "\\n" + it->getName() + "=" + etk::toString(it->getVolume()) + "dB";
|
||||
if (it->getMute() == true) {
|
||||
out += " MUTE";
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
@ -1,100 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <audio/drain/Algo.hpp>
|
||||
#ifdef HAVE_SPEEX_DSP_RESAMPLE
|
||||
#include <speex/speex_resampler.h>
|
||||
#endif
|
||||
#include <ememory/memory.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
// data structure.
|
||||
class VolumeElement {
|
||||
public:
|
||||
VolumeElement(const etk::String& _name="ERROR-VOLUME-NAME", float _volumedB=0.0f) :
|
||||
m_name(_name),
|
||||
m_volumedB(_volumedB),
|
||||
m_mute(false) {
|
||||
|
||||
}
|
||||
private:
|
||||
etk::String m_name;
|
||||
public:
|
||||
etk::String getName() const {
|
||||
return m_name;
|
||||
}
|
||||
private:
|
||||
float m_volumedB;
|
||||
public:
|
||||
float getVolume() const {
|
||||
return m_volumedB;
|
||||
}
|
||||
void setVolume(float _volumedB) {
|
||||
m_volumedB = _volumedB;
|
||||
}
|
||||
private:
|
||||
bool m_mute;
|
||||
public:
|
||||
bool getMute() const {
|
||||
return m_mute;
|
||||
}
|
||||
void setMute(bool _mute) {
|
||||
m_mute = _mute;
|
||||
}
|
||||
};
|
||||
// TODO: Optimisation
|
||||
// TODO: Zero crossing
|
||||
// TODO: Continuous update volume
|
||||
// TODO: Manage multiple volume
|
||||
// TODO: Manage set volume
|
||||
class Volume : public audio::drain::Algo {
|
||||
private:
|
||||
etk::Vector<ememory::SharedPtr<drain::VolumeElement> > m_volumeList;
|
||||
// for float input :
|
||||
float m_volumeAppli;
|
||||
// for integer input :
|
||||
int32_t m_volumeDecalage; // Volume to apply is simple as : X * m_coef >> m_coef
|
||||
int32_t m_volumeCoef;
|
||||
// convertion function:
|
||||
void (*m_functionConvert)(void* _input, void* _output, size_t _nbSample, int32_t _volumeCoef, int32_t _volumeDecalage, float _volumeAppli);
|
||||
protected:
|
||||
/**
|
||||
* @brief Constructor
|
||||
*/
|
||||
Volume();
|
||||
void init();
|
||||
public:
|
||||
static ememory::SharedPtr<Volume> create();
|
||||
/**
|
||||
* @brief Destructor
|
||||
*/
|
||||
virtual ~Volume();
|
||||
protected:
|
||||
virtual void configurationChange();
|
||||
public:
|
||||
virtual bool process(audio::Time& _time,
|
||||
void* _input,
|
||||
size_t _inputNbChunk,
|
||||
void*& _output,
|
||||
size_t& _outputNbChunk);
|
||||
public:
|
||||
virtual etk::Vector<audio::format> getFormatSupportedInput();
|
||||
virtual etk::Vector<audio::format> getFormatSupportedOutput();
|
||||
public:
|
||||
virtual void addVolumeStage(const ememory::SharedPtr<drain::VolumeElement>& _volume);
|
||||
virtual bool setParameter(const etk::String& _parameter, const etk::String& _value);
|
||||
virtual etk::String getParameter(const etk::String& _parameter) const;
|
||||
virtual etk::String getParameterProperty(const etk::String& _parameter) const;
|
||||
public:
|
||||
void volumeChange();
|
||||
public:
|
||||
virtual etk::String getDotDesc();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include "debug.hpp"
|
||||
|
||||
|
@ -1,42 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/String.hpp>
|
||||
#include <audio/format.hpp>
|
||||
#include <audio/drain/channel.hpp>
|
||||
#include <echrono/Steady.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
/**
|
||||
* @brief Init the instance af algorithm (add all internal factory)
|
||||
*/
|
||||
void init();
|
||||
/**
|
||||
* @brief Uninit the instance af algorithm (rm all internal factory)
|
||||
*/
|
||||
void init();
|
||||
/**
|
||||
* @brief Create a process Algo with his name.
|
||||
* @param[in] _name Name of the Algorithm.
|
||||
* @return Instanciate algorithm
|
||||
*/
|
||||
drain::Algo* createAlgo(const etk::String& _name);
|
||||
/**
|
||||
* @brief Add a Factory Algorithm in the internal List (static for all instance)
|
||||
* @param[in] _name Name of the Algorithm.
|
||||
* @param[in] _functor Function of the factory
|
||||
*/
|
||||
void addAlgoFactory(const etk::String& _name, etk::Function<drain::Algo*(void)> _functor);
|
||||
/**
|
||||
* @brief Remove a Factory Algorithm in the internal List (static for all instance)
|
||||
* @param[in] _name Name of the Algorithm.
|
||||
*/
|
||||
void RmAlgoFactory(const etk::String& _name);
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/drain/debug.hpp>
|
||||
|
||||
|
||||
int32_t audio::drain::getLogId() {
|
||||
static int32_t g_val = elog::registerInstance("audio-drain");
|
||||
return g_val;
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#ifndef __AUDIO_DRAIN_DEBUG_H__
|
||||
#define __AUDIO_DRAIN_DEBUG_H__
|
||||
|
||||
#include <elog/log.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace drain {
|
||||
int32_t getLogId();
|
||||
}
|
||||
}
|
||||
#define DRAIN_BASE(info,data) ELOG_BASE(audio::drain::getLogId(),info,data)
|
||||
|
||||
#define DRAIN_CRITICAL(data) DRAIN_BASE(1, data)
|
||||
#define DRAIN_ERROR(data) DRAIN_BASE(2, data)
|
||||
#define DRAIN_WARNING(data) DRAIN_BASE(3, data)
|
||||
#ifdef DEBUG
|
||||
#define DRAIN_INFO(data) DRAIN_BASE(4, data)
|
||||
#define DRAIN_DEBUG(data) DRAIN_BASE(5, data)
|
||||
#define DRAIN_VERBOSE(data) DRAIN_BASE(6, data)
|
||||
#define DRAIN_TODO(data) DRAIN_BASE(4, "TODO : " << data)
|
||||
#else
|
||||
#define DRAIN_INFO(data) do { } while(false)
|
||||
#define DRAIN_DEBUG(data) do { } while(false)
|
||||
#define DRAIN_VERBOSE(data) do { } while(false)
|
||||
#define DRAIN_TODO(data) do { } while(false)
|
||||
#endif
|
||||
|
||||
#define DRAIN_ASSERT(cond,data) \
|
||||
do { \
|
||||
if (!(cond)) { \
|
||||
DRAIN_CRITICAL(data); \
|
||||
assert(!#cond); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
@ -1,20 +0,0 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#ifdef __AUDIO_DRAIN_DEBUG_H__
|
||||
#undef __AUDIO_DRAIN_DEBUG_H__
|
||||
|
||||
#undef DRAIN_BASE
|
||||
#undef DRAIN_CRITICAL
|
||||
#undef DRAIN_ERROR
|
||||
#undef DRAIN_WARNING
|
||||
#undef DRAIN_INFO
|
||||
#undef DRAIN_DEBUG
|
||||
#undef DRAIN_VERBOSE
|
||||
#undef DRAIN_TODO
|
||||
#undef DRAIN_ASSERT
|
||||
#endif
|
||||
|
183
audio_algo_build.html
Normal file
183
audio_algo_build.html
Normal file
@ -0,0 +1,183 @@
|
||||
<!-- HTML header for doxygen 1.8.8-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!-- For Mobile Devices -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||
<title>Basic audio algo interface single pipe to process data: Build lib & build sample</title>
|
||||
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="doxy-boot.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand">Basic audio algo interface single pipe to process data 0.3.0</a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="index.html">Main Page</a></li>
|
||||
<li><a href="pages.html">Related Pages</a></li>
|
||||
<li><a href="namespaces.html">Namespaces</a></li>
|
||||
<li><a href="annotated.html">Classes</a></li>
|
||||
<li><a href="files.html">Files</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
|
||||
Link-libs<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="http://HeeroYui.github.io/lutin">lutin</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ewol">ewol</a></li>
|
||||
<li><a href="http://atria-soft.github.io/echrono">echrono</a></li>
|
||||
<li><a href="http://atria-soft.github.io/etk">etk</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ejson">ejson</a></li>
|
||||
<li><a href="http://atria-soft.github.io/exml">exml</a></li>
|
||||
<li><a href="http://atria-soft.github.io/esvg">esvg</a></li>
|
||||
<li><a href="http://atria-soft.github.io/egami">egami</a></li>
|
||||
<li><a href="http://atria-soft.github.io/gale">gale</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ege">ege</a></li>
|
||||
<li><a href="http://atria-soft.github.io/elog">elog</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ememory">ememory</a></li>
|
||||
<li><a href="http://atria-soft.github.io/enet">enet</a></li>
|
||||
<li><a href="http://atria-soft.github.io/eproperty">eproperty</a></li>
|
||||
<li><a href="http://atria-soft.github.io/esignal">esignal</a></li>
|
||||
<li><a href="http://atria-soft.github.io/etranslate">etranslate</a></li>
|
||||
<li><a href="http://atria-soft.github.io/zeus">zeus</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-ess">audio-ess</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio">audio</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-drain">audio-drain</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-orchestra">audio-orchestra</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-river">audio-river</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="search-box" class="input-group">
|
||||
<div class="input-group-btn">
|
||||
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="glyphicon glyphicon-search"></span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">All</a></li>
|
||||
<li><a href="#">Classes</a></li>
|
||||
<li><a href="#">Namespaces</a></li>
|
||||
<li><a href="#">Files</a></li>
|
||||
<li><a href="#">Functions</a></li>
|
||||
<li><a href="#">Variables</a></li>
|
||||
<li><a href="#">Typedefs</a></li>
|
||||
<li><a href="#">Enumerations</a></li>
|
||||
<li><a href="#">Enumerator</a></li>
|
||||
<li><a href="#">Friends</a></li>
|
||||
<li><a href="#">Macros</a></li>
|
||||
<li><a href="#">Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<button id="search-close" type="button" class="close" aria-label="Close">
|
||||
<span aria-hidden="true"></span>
|
||||
</button>
|
||||
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">
|
||||
</div>
|
||||
</div><!--/.nav-collapse -->
|
||||
</div>
|
||||
</nav>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div class="content" id="content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
|
||||
<div style="margin-bottom: 15px;margin-top: 60px;">
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.12 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Build lib & build sample </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="toc"><h3>Table of Contents</h3>
|
||||
<ul><li class="level1"><a href="#audio_algo_build_download">Download: </a><ul><li class="level2"><a href="#audio_algo_build_download_repo">need google repo: </a></li>
|
||||
<li class="level2"><a href="#audio_algo_build_download_lutin">lutin (build-system): </a></li>
|
||||
<li class="level2"><a href="#audio_algo_build_download_dependency">dependency: </a></li>
|
||||
<li class="level2"><a href="#audio_algo_build_download_sources">sources: </a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="level1"><a href="#audio_algo_build_build">Build: </a><ul><li class="level2"><a href="#audio_algo_build_build_library">library: </a></li>
|
||||
<li class="level2"><a href="#audio_algo_build_build_sample">Test sample: </a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="textblock"><h1><a class="anchor" id="audio_algo_build_download"></a>
|
||||
Download: </h1>
|
||||
<p>ege use some tools to manage source and build it:</p>
|
||||
<h2><a class="anchor" id="audio_algo_build_download_repo"></a>
|
||||
need google repo: </h2>
|
||||
<p>see: <a href="http://source.android.com/source/downloading.html#installing-repo">http://source.android.com/source/downloading.html#installing-repo</a></p>
|
||||
<p>On all platform: </p><div class="fragment"><div class="line">mkdir ~/.bin</div><div class="line">PATH=~/.bin:$PATH</div><div class="line">curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo</div><div class="line">chmod a+x ~/.bin/repo</div></div><!-- fragment --><p>On ubuntu </p><div class="fragment"><div class="line">sudo apt-get install repo</div></div><!-- fragment --><p>On archlinux </p><div class="fragment"><div class="line">sudo pacman -S repo</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_download_lutin"></a>
|
||||
lutin (build-system): </h2>
|
||||
<div class="fragment"><div class="line">pip install lutin --user</div><div class="line"># optionnal dependency of lutin (manage image changing size for application release)</div><div class="line">pip install pillow --user</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_download_dependency"></a>
|
||||
dependency: </h2>
|
||||
<div class="fragment"><div class="line">mkdir -p WORKING_DIRECTORY/framework</div><div class="line">cd WORKING_DIRECTORY/framework</div><div class="line">repo init -u git://github.com/atria-soft/manifest.git</div><div class="line">repo sync -j8</div><div class="line">cd ../..</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_download_sources"></a>
|
||||
sources: </h2>
|
||||
<p>They are already download in the repo manifest in:</p>
|
||||
<div class="fragment"><div class="line">cd WORKING_DIRECTORY/framework/musicdsp/audio-drain</div></div><!-- fragment --><h1><a class="anchor" id="audio_algo_build_build"></a>
|
||||
Build: </h1>
|
||||
<p>you must stay in your working directory... </p><div class="fragment"><div class="line">cd WORKING_DIRECTORY</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_build_library"></a>
|
||||
library: </h2>
|
||||
<div class="fragment"><div class="line">lutin -mdebug audio-drain</div></div><!-- fragment --><h2><a class="anchor" id="audio_algo_build_build_sample"></a>
|
||||
Test sample: </h2>
|
||||
<div class="fragment"><div class="line">lutin -mdebug audio-drain-test?build?run</div></div><!-- fragment --> </div></div><!-- contents -->
|
||||
<!-- HTML footer for doxygen 1.8.8-->
|
||||
<!-- start footer part -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Oct 24 2016 15:35:48 for Basic audio algo interface single pipe to process data by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.12
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
@ -1 +0,0 @@
|
||||
MR Edouard DUPIN <yui.heero@gmail.com>
|
BIN
closed.png
Normal file
BIN
closed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 132 B |
377
customdoxygen.css
Normal file
377
customdoxygen.css
Normal file
@ -0,0 +1,377 @@
|
||||
|
||||
#navrow1, #navrow2, #navrow3, #navrow4, #navrow5{
|
||||
border-bottom: 1px solid #EEEEEE;
|
||||
}
|
||||
|
||||
.adjust-right {
|
||||
margin-left: 30px !important;
|
||||
font-size: 1.15em !important;
|
||||
}
|
||||
.navbar{
|
||||
border: 0px solid #222 !important;
|
||||
}
|
||||
|
||||
|
||||
/* Sticky footer styles
|
||||
-------------------------------------------------- */
|
||||
html,
|
||||
body {
|
||||
counter-reset: h1counter;
|
||||
height: 100%;
|
||||
/* The html and body elements cannot have any padding or margin. */
|
||||
}
|
||||
h1, .h1, h2, .h2, h3, .h3{
|
||||
font-weight: bold !important;
|
||||
}
|
||||
h1:before {
|
||||
content: counter(h1counter) ".\0000a0\0000a0";
|
||||
counter-increment: h1counter;
|
||||
counter-reset: h2counter;
|
||||
}
|
||||
h2:before {
|
||||
content: counter(h1counter) "." counter(h2counter) ".\0000a0\0000a0";
|
||||
counter-increment: h2counter;
|
||||
counter-reset: h3counter;
|
||||
}
|
||||
h3:before {
|
||||
content: counter(h1counter) "." counter(h2counter) "." counter(h3counter) ".\0000a0\0000a0";
|
||||
counter-increment: h3counter;
|
||||
}
|
||||
|
||||
/* Wrapper for page content to push down footer */
|
||||
#wrap {
|
||||
min-height: 100%;
|
||||
height: auto;
|
||||
/* Negative indent footer by its height */
|
||||
margin: 0 auto -60px;
|
||||
/* Pad bottom by footer height */
|
||||
padding: 0 0 60px;
|
||||
}
|
||||
|
||||
/* Set the fixed height of the footer here */
|
||||
#footer {
|
||||
font-size: 0.9em;
|
||||
padding: 8px 0px;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.footer-row {
|
||||
line-height: 44px;
|
||||
}
|
||||
|
||||
#footer > .container {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.footer-follow-icon {
|
||||
margin-left: 3px;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.footer-follow-icon img {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.footer-link {
|
||||
padding-top: 5px;
|
||||
display: inline-block;
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer-copyright {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.footer-row {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.footer-icons {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
@media (max-width: 991px) {
|
||||
.footer-row {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.footer-icons {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
/* DOXYGEN Code Styles
|
||||
----------------------------------- */
|
||||
|
||||
|
||||
a.qindex {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a.qindexHL {
|
||||
font-weight: bold;
|
||||
background-color: #9CAFD4;
|
||||
color: #ffffff;
|
||||
border: 1px double #869DCA;
|
||||
}
|
||||
|
||||
.contents a.qindexHL:visited {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
a.code, a.code:visited, a.line, a.line:visited {
|
||||
color: #4665A2;
|
||||
}
|
||||
|
||||
a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
|
||||
color: #4665A2;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
dl.el {
|
||||
margin-left: -1cm;
|
||||
}
|
||||
|
||||
pre.fragment {
|
||||
border: 1px solid #C4CFE5;
|
||||
background-color: #FBFCFD;
|
||||
padding: 4px 6px;
|
||||
margin: 4px 8px 4px 2px;
|
||||
overflow: auto;
|
||||
word-wrap: break-word;
|
||||
font-size: 9pt;
|
||||
line-height: 125%;
|
||||
font-family: monospace, fixed;
|
||||
font-size: 105%;
|
||||
}
|
||||
|
||||
div.fragment {
|
||||
padding: 4px 6px;
|
||||
margin: 4px 8px 4px 2px;
|
||||
border: 1px solid #C4CFE5;
|
||||
}
|
||||
|
||||
div.line {
|
||||
font-family: monospace, fixed;
|
||||
font-size: 13px;
|
||||
min-height: 13px;
|
||||
line-height: 1.0;
|
||||
text-wrap: unrestricted;
|
||||
white-space: -moz-pre-wrap; /* Moz */
|
||||
white-space: -pre-wrap; /* Opera 4-6 */
|
||||
white-space: -o-pre-wrap; /* Opera 7 */
|
||||
white-space: pre-wrap; /* CSS3 */
|
||||
word-wrap: break-word; /* IE 5.5+ */
|
||||
text-indent: -53px;
|
||||
padding-left: 53px;
|
||||
padding-bottom: 0px;
|
||||
margin: 0px;
|
||||
-webkit-transition-property: background-color, box-shadow;
|
||||
-webkit-transition-duration: 0.5s;
|
||||
-moz-transition-property: background-color, box-shadow;
|
||||
-moz-transition-duration: 0.5s;
|
||||
-ms-transition-property: background-color, box-shadow;
|
||||
-ms-transition-duration: 0.5s;
|
||||
-o-transition-property: background-color, box-shadow;
|
||||
-o-transition-duration: 0.5s;
|
||||
transition-property: background-color, box-shadow;
|
||||
transition-duration: 0.5s;
|
||||
}
|
||||
|
||||
div.line.glow {
|
||||
background-color: cyan;
|
||||
box-shadow: 0 0 10px cyan;
|
||||
}
|
||||
|
||||
|
||||
span.lineno {
|
||||
padding-right: 4px;
|
||||
text-align: right;
|
||||
border-right: 2px solid #0F0;
|
||||
background-color: #E8E8E8;
|
||||
white-space: pre;
|
||||
}
|
||||
span.lineno a {
|
||||
background-color: #D8D8D8;
|
||||
}
|
||||
|
||||
span.lineno a:hover {
|
||||
background-color: #C8C8C8;
|
||||
}
|
||||
|
||||
div.groupHeader {
|
||||
margin-left: 16px;
|
||||
margin-top: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.groupText {
|
||||
margin-left: 16px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* @group Code Colorization */
|
||||
|
||||
span.keyword {
|
||||
color: #008000
|
||||
}
|
||||
|
||||
span.keywordtype {
|
||||
color: #604020
|
||||
}
|
||||
|
||||
span.keywordflow {
|
||||
color: #e08000
|
||||
}
|
||||
|
||||
span.comment {
|
||||
color: #800000
|
||||
}
|
||||
|
||||
span.preprocessor {
|
||||
color: #806020
|
||||
}
|
||||
|
||||
span.stringliteral {
|
||||
color: #002080
|
||||
}
|
||||
|
||||
span.charliteral {
|
||||
color: #008080
|
||||
}
|
||||
|
||||
span.vhdldigit {
|
||||
color: #ff00ff
|
||||
}
|
||||
|
||||
span.vhdlchar {
|
||||
color: #000000
|
||||
}
|
||||
|
||||
span.vhdlkeyword {
|
||||
color: #700070
|
||||
}
|
||||
|
||||
span.vhdllogic {
|
||||
color: #ff0000
|
||||
}
|
||||
|
||||
blockquote {
|
||||
background-color: #F7F8FB;
|
||||
border-left: 2px solid #9CAFD4;
|
||||
margin: 0 24px 0 4px;
|
||||
padding: 0 12px 0 16px;
|
||||
}
|
||||
|
||||
/*---------------- Search Box */
|
||||
|
||||
#search-box {
|
||||
margin: 10px 0px;
|
||||
}
|
||||
#search-box .close {
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
padding: 6px 12px;
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
/*---------------- Search results window */
|
||||
|
||||
#search-results-window {
|
||||
display: none;
|
||||
}
|
||||
|
||||
iframe#MSearchResults {
|
||||
width: 100%;
|
||||
height: 15em;
|
||||
}
|
||||
|
||||
.SRChildren {
|
||||
padding-left: 3ex; padding-bottom: .5em
|
||||
}
|
||||
.SRPage .SRChildren {
|
||||
display: none;
|
||||
}
|
||||
a.SRScope {
|
||||
display: block;
|
||||
}
|
||||
a.SRSymbol:focus, a.SRSymbol:active,
|
||||
a.SRScope:focus, a.SRScope:active {
|
||||
text-decoration: underline;
|
||||
}
|
||||
span.SRScope {
|
||||
padding-left: 4px;
|
||||
}
|
||||
.SRResult {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* class and file list */
|
||||
.directory .icona,
|
||||
.directory .arrow {
|
||||
height: auto;
|
||||
}
|
||||
.directory .icona .icon {
|
||||
height: 16px;
|
||||
}
|
||||
.directory .icondoc {
|
||||
background-position: 0px 0px;
|
||||
height: 20px;
|
||||
}
|
||||
.directory .iconfopen {
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
.directory td.entry {
|
||||
padding: 7px 8px 6px 8px;
|
||||
}
|
||||
|
||||
.table > tbody > tr > td.memSeparator {
|
||||
line-height: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.memItemLeft, .memTemplItemLeft {
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
/* enumerations */
|
||||
.panel-body thead > tr {
|
||||
background-color: #e0e0e0;
|
||||
}
|
||||
|
||||
/* todo lists */
|
||||
.todoname,
|
||||
.todoname a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Class title */
|
||||
.summary {
|
||||
margin-top: 25px;
|
||||
}
|
||||
.page-header {
|
||||
margin: 20px 0px !important;
|
||||
}
|
||||
.page-header {
|
||||
#display: inline-block;
|
||||
}
|
||||
.title {
|
||||
text-align: center;
|
||||
color: orange;
|
||||
}
|
||||
.page-header .pull-right {
|
||||
margin-top: 0.3em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
.page-header .label {
|
||||
font-size: 50%;
|
||||
}
|
||||
|
||||
#main-nav {
|
||||
display: none;
|
||||
}
|
85
doc/build.md
85
doc/build.md
@ -1,85 +0,0 @@
|
||||
Build lib & build sample {#audio_algo_build}
|
||||
========================
|
||||
|
||||
@tableofcontents
|
||||
|
||||
Download: {#audio_algo_build_download}
|
||||
=========
|
||||
|
||||
ege use some tools to manage source and build it:
|
||||
|
||||
need google repo: {#audio_algo_build_download_repo}
|
||||
-----------------
|
||||
|
||||
see: http://source.android.com/source/downloading.html#installing-repo
|
||||
|
||||
On all platform:
|
||||
```{.sh}
|
||||
mkdir ~/.bin
|
||||
PATH=~/.bin:$PATH
|
||||
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
|
||||
chmod a+x ~/.bin/repo
|
||||
```
|
||||
|
||||
On ubuntu
|
||||
```{.sh}
|
||||
sudo apt-get install repo
|
||||
```
|
||||
|
||||
On archlinux
|
||||
```{.sh}
|
||||
sudo pacman -S repo
|
||||
```
|
||||
|
||||
lutin (build-system): {#audio_algo_build_download_lutin}
|
||||
---------------------
|
||||
|
||||
```{.sh}
|
||||
pip install lutin --user
|
||||
# optionnal dependency of lutin (manage image changing size for application release)
|
||||
pip install pillow --user
|
||||
```
|
||||
|
||||
|
||||
dependency: {#audio_algo_build_download_dependency}
|
||||
-----------
|
||||
|
||||
```{.sh}
|
||||
mkdir -p WORKING_DIRECTORY/framework
|
||||
cd WORKING_DIRECTORY/framework
|
||||
repo init -u git://github.com/atria-soft/manifest.git
|
||||
repo sync -j8
|
||||
cd ../..
|
||||
```
|
||||
|
||||
sources: {#audio_algo_build_download_sources}
|
||||
--------
|
||||
|
||||
They are already download in the repo manifest in:
|
||||
|
||||
```{.sh}
|
||||
cd WORKING_DIRECTORY/framework/musicdsp/audio-drain
|
||||
```
|
||||
|
||||
Build: {#audio_algo_build_build}
|
||||
======
|
||||
|
||||
you must stay in your working directory...
|
||||
```{.sh}
|
||||
cd WORKING_DIRECTORY
|
||||
```
|
||||
|
||||
library: {#audio_algo_build_build_library}
|
||||
--------
|
||||
|
||||
```{.sh}
|
||||
lutin -mdebug audio-drain
|
||||
```
|
||||
|
||||
Test sample: {#audio_algo_build_build_sample}
|
||||
------------
|
||||
|
||||
```{.sh}
|
||||
lutin -mdebug audio-drain-test?build?run
|
||||
```
|
||||
|
@ -1,56 +0,0 @@
|
||||
AUDIO-ALGO library {#mainpage}
|
||||
=============
|
||||
|
||||
@tableofcontents
|
||||
|
||||
What is AUDIO-ALGO: {#audio_algo_mainpage_what}
|
||||
==============
|
||||
|
||||
AUDIO-ALGO, Is a single Pipeline processing to simply update format, framerate, channel maps ...
|
||||
|
||||
What it does: {#audio_algo_mainpage_what_it_does}
|
||||
-------------
|
||||
|
||||
- Change format
|
||||
- Change framerate
|
||||
- change number of channel
|
||||
|
||||
AUDIO-ALGO is dependent of the STL (compatible with MacOs stl (CXX))
|
||||
|
||||
|
||||
What languages are supported? {#audio_algo_mainpage_language}
|
||||
=============================
|
||||
|
||||
AUDIO-ALGO is written in C++.
|
||||
|
||||
|
||||
Are there any licensing restrictions? {#audio_algo_mainpage_license_restriction}
|
||||
=====================================
|
||||
|
||||
AUDIO-ALGO is **FREE software** and _all sub-library are FREE and staticly linkable !!!_
|
||||
|
||||
|
||||
License (MPL v2.0) {#audio_algo_mainpage_license}
|
||||
==================
|
||||
|
||||
Copyright AUDIO-ALGO Edouard DUPIN
|
||||
|
||||
Licensed under the Mozilla Public License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
<https://www.mozilla.org/MPL/2.0>
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
Other pages {#audio_algo_mainpage_sub_page}
|
||||
===========
|
||||
|
||||
- @ref audio_algo_build
|
||||
- [**ewol coding style**](http://atria-soft.github.io/ewol/ewol_coding_style.html)
|
||||
|
264
doxy-boot.js
Normal file
264
doxy-boot.js
Normal file
@ -0,0 +1,264 @@
|
||||
$( document ).ready(function() {
|
||||
|
||||
$("div.headertitle").addClass("page-header");
|
||||
$("div.title").addClass("h1");
|
||||
|
||||
$('li > a[href="index.html"] > span').before("<i class='fa fa-cog'></i> ");
|
||||
$('li > a[href="modules.html"] > span').before("<i class='fa fa-square'></i> ");
|
||||
$('li > a[href="namespaces.html"] > span').before("<i class='fa fa-bars'></i> ");
|
||||
$('li > a[href="annotated.html"] > span').before("<i class='fa fa-list-ul'></i> ");
|
||||
$('li > a[href="classes.html"] > span').before("<i class='fa fa-book'></i> ");
|
||||
$('li > a[href="inherits.html"] > span').before("<i class='fa fa-sitemap'></i> ");
|
||||
$('li > a[href="functions.html"] > span').before("<i class='fa fa-list'></i> ");
|
||||
$('li > a[href="functions_func.html"] > span').before("<i class='fa fa-list'></i> ");
|
||||
$('li > a[href="functions_vars.html"] > span').before("<i class='fa fa-list'></i> ");
|
||||
$('li > a[href="functions_enum.html"] > span').before("<i class='fa fa-list'></i> ");
|
||||
$('li > a[href="functions_eval.html"] > span').before("<i class='fa fa-list'></i> ");
|
||||
$('img[src="ftv2ns.png"]').replaceWith('<span class="label label-danger">N</span> ');
|
||||
$('img[src="ftv2cl.png"]').replaceWith('<span class="label label-danger">C</span> ');
|
||||
|
||||
$("ul.tablist").addClass("nav nav-pills nav-justified");
|
||||
$("ul.tablist").css("margin-top", "0.5em");
|
||||
$("ul.tablist").css("margin-bottom", "0.5em");
|
||||
$("li.current").addClass("active");
|
||||
$("iframe").attr("scrolling", "yes");
|
||||
|
||||
$("#nav-path > ul").addClass("breadcrumb");
|
||||
|
||||
$("table.params").addClass("table");
|
||||
$("div.ingroups").wrapInner("<small></small>");
|
||||
$("div.levels").css("margin", "0.5em");
|
||||
$("div.levels > span").addClass("btn btn-default btn-xs");
|
||||
$("div.levels > span").css("margin-right", "0.25em");
|
||||
|
||||
$("table.directory").addClass("table table-striped");
|
||||
$("div.summary > a").addClass("btn btn-default btn-xs");
|
||||
$("table.fieldtable").addClass("table");
|
||||
$(".fragment").addClass("well");
|
||||
$(".memitem").addClass("panel panel-default");
|
||||
$(".memproto").addClass("panel-heading");
|
||||
$(".memdoc").addClass("panel-body");
|
||||
$("span.mlabel").addClass("label label-info");
|
||||
|
||||
$("table.memberdecls").addClass("table");
|
||||
$("[class^=memitem]").addClass("active");
|
||||
|
||||
$("div.ah").addClass("btn btn-default");
|
||||
$("span.mlabels").addClass("pull-right");
|
||||
$("table.mlabels").css("width", "100%")
|
||||
$("td.mlabels-right").addClass("pull-right");
|
||||
|
||||
$("div.ttc").addClass("panel panel-primary");
|
||||
$("div.ttname").addClass("panel-heading");
|
||||
$("div.ttname a").css("color", 'white');
|
||||
$("div.ttdef,div.ttdoc,div.ttdeci").addClass("panel-body");
|
||||
|
||||
$('div.fragment.well div.line:first').css('margin-top', '15px');
|
||||
$('div.fragment.well div.line:last').css('margin-bottom', '15px');
|
||||
|
||||
$('table.doxtable').removeClass('doxtable').addClass('table table-striped table-bordered').each(function(){
|
||||
$(this).prepend('<thead></thead>');
|
||||
$(this).find('tbody > tr:first').prependTo($(this).find('thead'));
|
||||
|
||||
$(this).find('td > span.success').parent().addClass('success');
|
||||
$(this).find('td > span.warning').parent().addClass('warning');
|
||||
$(this).find('td > span.danger').parent().addClass('danger');
|
||||
});
|
||||
|
||||
|
||||
|
||||
if($('div.fragment.well div.ttc').length > 0)
|
||||
{
|
||||
$('div.fragment.well div.line:first').parent().removeClass('fragment well');
|
||||
}
|
||||
//merge left ad right element in the fuction table item
|
||||
/*
|
||||
$('table.memberdecls').find('.memItemRight').each(function(){
|
||||
$(this).contents().appendTo($(this).siblings('.memItemLeft'));
|
||||
$(this).siblings('.memItemLeft').attr('align', 'left');
|
||||
});
|
||||
*/
|
||||
|
||||
function getOriginalWidthOfImg(img_element) {
|
||||
var t = new Image();
|
||||
t.src = (img_element.getAttribute ? img_element.getAttribute("src") : false) || img_element.src;
|
||||
return t.width;
|
||||
}
|
||||
|
||||
$('div.dyncontent').find('img').each(function(){
|
||||
if(getOriginalWidthOfImg($(this)[0]) > $('#content>div.container').width())
|
||||
$(this).css('width', '100%');
|
||||
});
|
||||
|
||||
|
||||
/* responsive search box */
|
||||
|
||||
$('#MSearchBox').parent().remove();
|
||||
|
||||
var nav_container = $('<div class="row"></div>');
|
||||
$('#navrow1').parent().prepend(nav_container);
|
||||
|
||||
var left_nav = $('<div class="col-md-9"></div>');
|
||||
for (i = 0; i < 6; i++) {
|
||||
var navrow = $('#navrow' + i + ' > ul.tablist').detach();
|
||||
left_nav.append(navrow);
|
||||
$('#navrow' + i).remove();
|
||||
}
|
||||
var right_nav = $('<div class="col-md-3"></div>').append('\
|
||||
<div id="search-box" class="input-group">\
|
||||
<div class="input-group-btn">\
|
||||
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">\
|
||||
<span class="glyphicon glyphicon-search"></span> <span class="caret"></span>\
|
||||
</button>\
|
||||
<ul class="dropdown-menu">\
|
||||
</ul>\
|
||||
</div>\
|
||||
<button id="search-close" type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>\
|
||||
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">\
|
||||
</div>');
|
||||
$(nav_container).append(left_nav);
|
||||
$(nav_container).append(right_nav);
|
||||
|
||||
$('#MSearchSelectWindow .SelectionMark').remove();
|
||||
var search_selectors = $('#MSearchSelectWindow .SelectItem');
|
||||
for (var i = 0; i < search_selectors.length; i += 1) {
|
||||
var element_a = $('<a href="#"></a>').text($(search_selectors[i]).text());
|
||||
|
||||
element_a.click(function(){
|
||||
$('#search-box .dropdown-menu li').removeClass('active');
|
||||
$(this).parent().addClass('active');
|
||||
searchBox.OnSelectItem($('#search-box li a').index(this));
|
||||
searchBox.Search();
|
||||
return false;
|
||||
});
|
||||
|
||||
var element = $('<li></li>').append(element_a);
|
||||
$('#search-box .dropdown-menu').append(element);
|
||||
}
|
||||
$('#MSearchSelectWindow').remove();
|
||||
|
||||
$('#search-box .close').click(function (){
|
||||
searchBox.CloseResultsWindow();
|
||||
});
|
||||
|
||||
$('body').append('<div id="MSearchClose"></div>');
|
||||
$('body').append('<div id="MSearchBox"></div>');
|
||||
$('body').append('<div id="MSearchSelectWindow"></div>');
|
||||
|
||||
searchBox.searchLabel = '';
|
||||
searchBox.DOMSearchField = function() {
|
||||
return document.getElementById("search-field");
|
||||
}
|
||||
searchBox.DOMSearchClose = function(){
|
||||
return document.getElementById("search-close");
|
||||
}
|
||||
|
||||
|
||||
/* search results */
|
||||
var results_iframe = $('#MSearchResults').detach();
|
||||
$('#MSearchResultsWindow')
|
||||
.attr('id', 'search-results-window')
|
||||
.addClass('panel panel-default')
|
||||
.append(
|
||||
'<div class="panel-heading">\
|
||||
<h3 class="panel-title">Search Results</h3>\
|
||||
</div>\
|
||||
<div class="panel-body"></div>'
|
||||
);
|
||||
$('#search-results-window .panel-body').append(results_iframe);
|
||||
|
||||
searchBox.DOMPopupSearchResultsWindow = function() {
|
||||
return document.getElementById("search-results-window");
|
||||
}
|
||||
|
||||
function update_search_results_window() {
|
||||
$('#search-results-window').removeClass('panel-default panel-success panel-warning panel-danger')
|
||||
var status = $('#MSearchResults').contents().find('.SRStatus:visible');
|
||||
if (status.length > 0) {
|
||||
switch(status.attr('id')) {
|
||||
case 'Loading':
|
||||
case 'Searching':
|
||||
$('#search-results-window').addClass('panel-warning');
|
||||
break;
|
||||
case 'NoMatches':
|
||||
$('#search-results-window').addClass('panel-danger');
|
||||
break;
|
||||
default:
|
||||
$('#search-results-window').addClass('panel-default');
|
||||
}
|
||||
} else {
|
||||
$('#search-results-window').addClass('panel-success');
|
||||
}
|
||||
}
|
||||
$('#MSearchResults').load(function() {
|
||||
$('#MSearchResults').contents().find('link[href="search.css"]').attr('href','../doxygen.css');
|
||||
$('#MSearchResults').contents().find('head').append(
|
||||
'<link href="../customdoxygen.css" rel="stylesheet" type="text/css">');
|
||||
|
||||
update_search_results_window();
|
||||
|
||||
// detect status changes (only for search with external search backend)
|
||||
var observer = new MutationObserver(function(mutations) {
|
||||
update_search_results_window();
|
||||
});
|
||||
var config = {
|
||||
attributes: true
|
||||
};
|
||||
|
||||
var targets = $('#MSearchResults').contents().find('.SRStatus');
|
||||
for (i = 0; i < targets.length; i++) {
|
||||
observer.observe(targets[i], config);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/* enumerations */
|
||||
$('table.fieldtable').removeClass('fieldtable').addClass('table table-striped table-bordered').each(function(){
|
||||
$(this).prepend('<thead></thead>');
|
||||
$(this).find('tbody > tr:first').prependTo($(this).find('thead'));
|
||||
|
||||
$(this).find('td > span.success').parent().addClass('success');
|
||||
$(this).find('td > span.warning').parent().addClass('warning');
|
||||
$(this).find('td > span.danger').parent().addClass('danger');
|
||||
});
|
||||
|
||||
/* todo list */
|
||||
var todoelements = $('.contents > .textblock > dl.reflist > dt, .contents > .textblock > dl.reflist > dd');
|
||||
for (var i = 0; i < todoelements.length; i += 2) {
|
||||
$('.contents > .textblock').append(
|
||||
'<div class="panel panel-default active">'
|
||||
+ "<div class=\"panel-heading todoname\">" + $(todoelements[i]).html() + "</div>"
|
||||
+ "<div class=\"panel-body\">" + $(todoelements[i+1]).html() + "</div>"
|
||||
+ '</div>');
|
||||
}
|
||||
$('.contents > .textblock > dl').remove();
|
||||
|
||||
|
||||
$(".memitem").removeClass('memitem');
|
||||
$(".memproto").removeClass('memproto');
|
||||
$(".memdoc").removeClass('memdoc');
|
||||
$("span.mlabel").removeClass('mlabel');
|
||||
$("table.memberdecls").removeClass('memberdecls');
|
||||
$("[class^=memitem]").removeClass('memitem');
|
||||
$("span.mlabels").removeClass('mlabels');
|
||||
$("table.mlabels").removeClass('mlabels');
|
||||
$("td.mlabels-right").removeClass('mlabels-right');
|
||||
$(".navpath").removeClass('navpath');
|
||||
$("li.navelem").removeClass('navelem');
|
||||
$("a.el").removeClass('el');
|
||||
$("div.ah").removeClass('ah');
|
||||
$("div.header").removeClass("header");
|
||||
|
||||
$('.mdescLeft').each(function(){
|
||||
if($(this).html()==" ") {
|
||||
$(this).siblings('.mdescRight').attr('colspan', 2);
|
||||
$(this).remove();
|
||||
}
|
||||
});
|
||||
$('td.memItemLeft').each(function(){
|
||||
if($(this).siblings('.memItemRight').html()=="") {
|
||||
$(this).attr('colspan', 2);
|
||||
$(this).siblings('.memItemRight').remove();
|
||||
}
|
||||
});
|
||||
});
|
@ -1,33 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
import os
|
||||
import doxy.module as module
|
||||
import doxy.debug as debug
|
||||
import doxy.tools as tools
|
||||
|
||||
def create(target, module_name):
|
||||
my_module = module.Module(__file__, module_name)
|
||||
my_module.set_version("version.txt")
|
||||
my_module.set_title("Basic audio algo interface single pipe to process data")
|
||||
my_module.set_website("http://musicdsp.github.io/" + module_name)
|
||||
my_module.set_website_sources("http://github.com/musicdsp/" + module_name)
|
||||
my_module.add_path([
|
||||
"audio",
|
||||
"doc"
|
||||
])
|
||||
my_module.add_depend([
|
||||
'etk',
|
||||
'audio',
|
||||
'ejson'
|
||||
])
|
||||
my_module.add_exclude_symbols([
|
||||
'*operator<<*',
|
||||
])
|
||||
my_module.add_exclude_file([
|
||||
'debug.h',
|
||||
])
|
||||
my_module.add_file_patterns([
|
||||
'*.h',
|
||||
'*.md',
|
||||
])
|
||||
|
||||
return my_module
|
1508
doxygen.css
Normal file
1508
doxygen.css
Normal file
File diff suppressed because it is too large
Load Diff
BIN
doxygen.png
Normal file
BIN
doxygen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
97
dynsections.js
Normal file
97
dynsections.js
Normal file
@ -0,0 +1,97 @@
|
||||
function toggleVisibility(linkObj)
|
||||
{
|
||||
var base = $(linkObj).attr('id');
|
||||
var summary = $('#'+base+'-summary');
|
||||
var content = $('#'+base+'-content');
|
||||
var trigger = $('#'+base+'-trigger');
|
||||
var src=$(trigger).attr('src');
|
||||
if (content.is(':visible')===true) {
|
||||
content.hide();
|
||||
summary.show();
|
||||
$(linkObj).addClass('closed').removeClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
content.show();
|
||||
summary.hide();
|
||||
$(linkObj).removeClass('closed').addClass('opened');
|
||||
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateStripes()
|
||||
{
|
||||
$('table.directory tr').
|
||||
removeClass('even').filter(':visible:even').addClass('even');
|
||||
}
|
||||
|
||||
function toggleLevel(level)
|
||||
{
|
||||
$('table.directory tr').each(function() {
|
||||
var l = this.id.split('_').length-1;
|
||||
var i = $('#img'+this.id.substring(3));
|
||||
var a = $('#arr'+this.id.substring(3));
|
||||
if (l<level+1) {
|
||||
i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
|
||||
a.html('▼');
|
||||
$(this).show();
|
||||
} else if (l==level+1) {
|
||||
i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
|
||||
a.html('►');
|
||||
$(this).show();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
function toggleFolder(id)
|
||||
{
|
||||
// the clicked row
|
||||
var currentRow = $('#row_'+id);
|
||||
|
||||
// all rows after the clicked row
|
||||
var rows = currentRow.nextAll("tr");
|
||||
|
||||
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
|
||||
|
||||
// only match elements AFTER this one (can't hide elements before)
|
||||
var childRows = rows.filter(function() { return this.id.match(re); });
|
||||
|
||||
// first row is visible we are HIDING
|
||||
if (childRows.filter(':first').is(':visible')===true) {
|
||||
// replace down arrow by right arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
currentRowSpans.filter(".arrow").html('►');
|
||||
rows.filter("[id^=row_"+id+"]").hide(); // hide all children
|
||||
} else { // we are SHOWING
|
||||
// replace right arrow by down arrow for current row
|
||||
var currentRowSpans = currentRow.find("span");
|
||||
currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
|
||||
currentRowSpans.filter(".arrow").html('▼');
|
||||
// replace down arrows by right arrows for child rows
|
||||
var childRowsSpans = childRows.find("span");
|
||||
childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
|
||||
childRowsSpans.filter(".arrow").html('►');
|
||||
childRows.show(); //show all children
|
||||
}
|
||||
updateStripes();
|
||||
}
|
||||
|
||||
|
||||
function toggleInherit(id)
|
||||
{
|
||||
var rows = $('tr.inherit.'+id);
|
||||
var img = $('tr.inherit_header.'+id+' img');
|
||||
var src = $(img).attr('src');
|
||||
if (rows.filter(':first').is(':visible')===true) {
|
||||
rows.css('display','none');
|
||||
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
|
||||
} else {
|
||||
rows.css('display','table-row'); // using show() causes jump in firefox
|
||||
$(img).attr('src',src.substring(0,src.length-10)+'open.png');
|
||||
}
|
||||
}
|
||||
|
BIN
folderclosed.png
Normal file
BIN
folderclosed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 616 B |
BIN
folderopen.png
Normal file
BIN
folderopen.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 597 B |
190
index.html
Normal file
190
index.html
Normal file
@ -0,0 +1,190 @@
|
||||
<!-- HTML header for doxygen 1.8.8-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!-- For Mobile Devices -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||
<title>Basic audio algo interface single pipe to process data: AUDIO-ALGO library</title>
|
||||
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="doxy-boot.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand">Basic audio algo interface single pipe to process data 0.3.0</a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="index.html">Main Page</a></li>
|
||||
<li><a href="pages.html">Related Pages</a></li>
|
||||
<li><a href="namespaces.html">Namespaces</a></li>
|
||||
<li><a href="annotated.html">Classes</a></li>
|
||||
<li><a href="files.html">Files</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
|
||||
Link-libs<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="http://HeeroYui.github.io/lutin">lutin</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ewol">ewol</a></li>
|
||||
<li><a href="http://atria-soft.github.io/echrono">echrono</a></li>
|
||||
<li><a href="http://atria-soft.github.io/etk">etk</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ejson">ejson</a></li>
|
||||
<li><a href="http://atria-soft.github.io/exml">exml</a></li>
|
||||
<li><a href="http://atria-soft.github.io/esvg">esvg</a></li>
|
||||
<li><a href="http://atria-soft.github.io/egami">egami</a></li>
|
||||
<li><a href="http://atria-soft.github.io/gale">gale</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ege">ege</a></li>
|
||||
<li><a href="http://atria-soft.github.io/elog">elog</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ememory">ememory</a></li>
|
||||
<li><a href="http://atria-soft.github.io/enet">enet</a></li>
|
||||
<li><a href="http://atria-soft.github.io/eproperty">eproperty</a></li>
|
||||
<li><a href="http://atria-soft.github.io/esignal">esignal</a></li>
|
||||
<li><a href="http://atria-soft.github.io/etranslate">etranslate</a></li>
|
||||
<li><a href="http://atria-soft.github.io/zeus">zeus</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-ess">audio-ess</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio">audio</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-drain">audio-drain</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-orchestra">audio-orchestra</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-river">audio-river</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="search-box" class="input-group">
|
||||
<div class="input-group-btn">
|
||||
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="glyphicon glyphicon-search"></span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">All</a></li>
|
||||
<li><a href="#">Classes</a></li>
|
||||
<li><a href="#">Namespaces</a></li>
|
||||
<li><a href="#">Files</a></li>
|
||||
<li><a href="#">Functions</a></li>
|
||||
<li><a href="#">Variables</a></li>
|
||||
<li><a href="#">Typedefs</a></li>
|
||||
<li><a href="#">Enumerations</a></li>
|
||||
<li><a href="#">Enumerator</a></li>
|
||||
<li><a href="#">Friends</a></li>
|
||||
<li><a href="#">Macros</a></li>
|
||||
<li><a href="#">Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<button id="search-close" type="button" class="close" aria-label="Close">
|
||||
<span aria-hidden="true"></span>
|
||||
</button>
|
||||
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">
|
||||
</div>
|
||||
</div><!--/.nav-collapse -->
|
||||
</div>
|
||||
</nav>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div class="content" id="content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
|
||||
<div style="margin-bottom: 15px;margin-top: 60px;">
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.12 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">AUDIO-ALGO library </div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="toc"><h3>Table of Contents</h3>
|
||||
<ul><li class="level1"><a href="#audio_algo_mainpage_what">What is AUDIO-ALGO: </a><ul><li class="level2"><a href="#audio_algo_mainpage_what_it_does">What it does: </a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="level1"><a href="#audio_algo_mainpage_language">What languages are supported? </a></li>
|
||||
<li class="level1"><a href="#audio_algo_mainpage_license_restriction">Are there any licensing restrictions? </a></li>
|
||||
<li class="level1"><a href="#audio_algo_mainpage_license">License (APACHE-2.0) </a></li>
|
||||
<li class="level1"><a href="#audio_algo_mainpage_sub_page">Other pages </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="textblock"><h1><a class="anchor" id="audio_algo_mainpage_what"></a>
|
||||
What is AUDIO-ALGO: </h1>
|
||||
<p>AUDIO-ALGO, Is a single Pipeline processing to simply update format, framerate, channel maps ...</p>
|
||||
<h2><a class="anchor" id="audio_algo_mainpage_what_it_does"></a>
|
||||
What it does: </h2>
|
||||
<ul>
|
||||
<li>Change format</li>
|
||||
<li>Change framerate</li>
|
||||
<li>change number of channel</li>
|
||||
</ul>
|
||||
<p>AUDIO-ALGO is dependent of the STL (compatible with MacOs stl (CXX))</p>
|
||||
<h1><a class="anchor" id="audio_algo_mainpage_language"></a>
|
||||
What languages are supported? </h1>
|
||||
<p>AUDIO-ALGO is written in C++.</p>
|
||||
<h1><a class="anchor" id="audio_algo_mainpage_license_restriction"></a>
|
||||
Are there any licensing restrictions? </h1>
|
||||
<p>AUDIO-ALGO is <b>FREE software</b> and <em>all sub-library are FREE and staticly linkable !!!</em></p>
|
||||
<h1><a class="anchor" id="audio_algo_mainpage_license"></a>
|
||||
License (APACHE-2.0) </h1>
|
||||
<p>Copyright AUDIO-ALGO Edouard DUPIN</p>
|
||||
<p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at</p>
|
||||
<p><a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a></p>
|
||||
<p>Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.</p>
|
||||
<h1><a class="anchor" id="audio_algo_mainpage_sub_page"></a>
|
||||
Other pages </h1>
|
||||
<ul>
|
||||
<li><a class="el" href="audio_algo_build.html">Build lib & build sample</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ewol/ewol_coding_style.html"><b>ewol coding style</b></a> </li>
|
||||
</ul>
|
||||
</div></div><!-- contents -->
|
||||
<!-- HTML footer for doxygen 1.8.8-->
|
||||
<!-- start footer part -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Oct 24 2016 15:35:48 for Basic audio algo interface single pipe to process data by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.12
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
87
jquery.js
vendored
Normal file
87
jquery.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,51 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
import realog.debug as debug
|
||||
import lutin.tools as tools
|
||||
|
||||
|
||||
def get_type():
|
||||
return "BINARY"
|
||||
|
||||
def get_sub_type():
|
||||
return "TEST"
|
||||
|
||||
def get_desc():
|
||||
return "single audio flow test"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
||||
def get_compagny_name():
|
||||
return "atria-soft"
|
||||
|
||||
def get_maintainer():
|
||||
return "authors.txt"
|
||||
|
||||
def configure(target, my_module):
|
||||
my_module.add_src_file([
|
||||
'test/main.cpp',
|
||||
'test/updateFlow.cpp',
|
||||
'test/resampling.cpp',
|
||||
'test/format.cpp',
|
||||
'test/channelOrder.cpp',
|
||||
'test/equalizer.cpp'
|
||||
])
|
||||
my_module.add_depend([
|
||||
'audio-drain',
|
||||
'etest',
|
||||
'etk',
|
||||
'test-debug'
|
||||
])
|
||||
return True
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,87 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
import lutin.tools as tools
|
||||
import realog.debug as debug
|
||||
|
||||
|
||||
def get_type():
|
||||
return "LIBRARY"
|
||||
|
||||
def get_desc():
|
||||
return "Basic audio algo interface single pipe to provess data"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
||||
def get_compagny_name():
|
||||
return "atria-soft"
|
||||
|
||||
def get_maintainer():
|
||||
return "authors.txt"
|
||||
|
||||
def get_version():
|
||||
return "version.txt"
|
||||
|
||||
def configure(target, my_module):
|
||||
|
||||
my_module.add_src_file([
|
||||
'audio/drain/debug.cpp',
|
||||
'audio/drain/airtalgo.cpp',
|
||||
'audio/drain/Algo.cpp',
|
||||
'audio/drain/ChannelReorder.cpp',
|
||||
'audio/drain/CircularBuffer.cpp',
|
||||
'audio/drain/EndPointCallback.cpp',
|
||||
'audio/drain/EndPoint.cpp',
|
||||
'audio/drain/EndPointRead.cpp',
|
||||
'audio/drain/EndPointWrite.cpp',
|
||||
'audio/drain/FormatUpdate.cpp',
|
||||
'audio/drain/Process.cpp',
|
||||
'audio/drain/Resampler.cpp',
|
||||
'audio/drain/Volume.cpp',
|
||||
'audio/drain/IOFormatInterface.cpp',
|
||||
'audio/drain/AutoLogInOut.cpp',
|
||||
'audio/drain/Equalizer.cpp'
|
||||
])
|
||||
|
||||
my_module.add_header_file([
|
||||
'audio/drain/debug.hpp',
|
||||
'audio/drain/debugRemove.hpp',
|
||||
'audio/drain/airtalgo.hpp',
|
||||
'audio/drain/Algo.hpp',
|
||||
'audio/drain/ChannelReorder.hpp',
|
||||
'audio/drain/CircularBuffer.hpp',
|
||||
'audio/drain/EndPointCallback.hpp',
|
||||
'audio/drain/EndPoint.hpp',
|
||||
'audio/drain/EndPointRead.hpp',
|
||||
'audio/drain/EndPointWrite.hpp',
|
||||
'audio/drain/FormatUpdate.hpp',
|
||||
'audio/drain/Process.hpp',
|
||||
'audio/drain/Resampler.hpp',
|
||||
'audio/drain/Volume.hpp',
|
||||
'audio/drain/IOFormatInterface.hpp',
|
||||
'audio/drain/AutoLogInOut.hpp',
|
||||
'audio/drain/Equalizer.hpp'
|
||||
])
|
||||
|
||||
# TODO: my_module.add_optional_module_depend('speexdsp', "HAVE_SPEEX_DSP_RESAMPLE")
|
||||
my_module.add_flag('c++', "-DHAVE_SPEEX_DSP_RESAMPLE")
|
||||
my_module.add_depend([
|
||||
'etk',
|
||||
'audio',
|
||||
'ejson',
|
||||
'speex-dsp',
|
||||
'audio-algo-drain'
|
||||
])
|
||||
my_module.add_path(".")
|
||||
return True
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
26
menu.js
Normal file
26
menu.js
Normal file
@ -0,0 +1,26 @@
|
||||
function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
|
||||
function makeTree(data,relPath) {
|
||||
var result='';
|
||||
if ('children' in data) {
|
||||
result+='<ul>';
|
||||
for (var i in data.children) {
|
||||
result+='<li><a href="'+relPath+data.children[i].url+'">'+
|
||||
data.children[i].text+'</a>'+
|
||||
makeTree(data.children[i],relPath)+'</li>';
|
||||
}
|
||||
result+='</ul>';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
$('#main-nav').append(makeTree(menudata,relPath));
|
||||
$('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
|
||||
if (searchEnabled) {
|
||||
if (serverSide) {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
|
||||
} else {
|
||||
$('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
|
||||
}
|
||||
}
|
||||
$('#main-menu').smartmenus();
|
||||
}
|
3
menudata.js
Normal file
3
menudata.js
Normal file
@ -0,0 +1,3 @@
|
||||
var menudata={children:[
|
||||
{text:'Main Page',url:'index.html'},
|
||||
{text:'Related Pages',url:'pages.html'}]}
|
156
pages.html
Normal file
156
pages.html
Normal file
@ -0,0 +1,156 @@
|
||||
<!-- HTML header for doxygen 1.8.8-->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<!-- For Mobile Devices -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
|
||||
<title>Basic audio algo interface single pipe to process data: Related Pages</title>
|
||||
<!--<link href="tabs.css" rel="stylesheet" type="text/css"/>-->
|
||||
<script type="text/javascript" src="dynsections.js"></script>
|
||||
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="customdoxygen.css" rel="stylesheet" type="text/css"/>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
|
||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="doxy-boot.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<a class="navbar-brand">Basic audio algo interface single pipe to process data 0.3.0</a>
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li><a href="index.html">Main Page</a></li>
|
||||
<li><a href="pages.html">Related Pages</a></li>
|
||||
<li><a href="namespaces.html">Namespaces</a></li>
|
||||
<li><a href="annotated.html">Classes</a></li>
|
||||
<li><a href="files.html">Files</a></li>
|
||||
</ul>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="dropdown">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
|
||||
Link-libs<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="http://HeeroYui.github.io/lutin">lutin</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ewol">ewol</a></li>
|
||||
<li><a href="http://atria-soft.github.io/echrono">echrono</a></li>
|
||||
<li><a href="http://atria-soft.github.io/etk">etk</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ejson">ejson</a></li>
|
||||
<li><a href="http://atria-soft.github.io/exml">exml</a></li>
|
||||
<li><a href="http://atria-soft.github.io/esvg">esvg</a></li>
|
||||
<li><a href="http://atria-soft.github.io/egami">egami</a></li>
|
||||
<li><a href="http://atria-soft.github.io/gale">gale</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ege">ege</a></li>
|
||||
<li><a href="http://atria-soft.github.io/elog">elog</a></li>
|
||||
<li><a href="http://atria-soft.github.io/ememory">ememory</a></li>
|
||||
<li><a href="http://atria-soft.github.io/enet">enet</a></li>
|
||||
<li><a href="http://atria-soft.github.io/eproperty">eproperty</a></li>
|
||||
<li><a href="http://atria-soft.github.io/esignal">esignal</a></li>
|
||||
<li><a href="http://atria-soft.github.io/etranslate">etranslate</a></li>
|
||||
<li><a href="http://atria-soft.github.io/zeus">zeus</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-ess">audio-ess</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio">audio</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-drain">audio-drain</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-orchestra">audio-orchestra</a></li>
|
||||
<li><a href="http://musicdsp.github.io/audio-river">audio-river</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="search-box" class="input-group">
|
||||
<div class="input-group-btn">
|
||||
<button aria-expanded="false" type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="glyphicon glyphicon-search"></span>
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#">All</a></li>
|
||||
<li><a href="#">Classes</a></li>
|
||||
<li><a href="#">Namespaces</a></li>
|
||||
<li><a href="#">Files</a></li>
|
||||
<li><a href="#">Functions</a></li>
|
||||
<li><a href="#">Variables</a></li>
|
||||
<li><a href="#">Typedefs</a></li>
|
||||
<li><a href="#">Enumerations</a></li>
|
||||
<li><a href="#">Enumerator</a></li>
|
||||
<li><a href="#">Friends</a></li>
|
||||
<li><a href="#">Macros</a></li>
|
||||
<li><a href="#">Pages</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<button id="search-close" type="button" class="close" aria-label="Close">
|
||||
<span aria-hidden="true"></span>
|
||||
</button>
|
||||
<input id="search-field" class="form-control" accesskey="S" onkeydown="searchBox.OnSearchFieldChange(event);" placeholder="Search ..." type="text">
|
||||
</div>
|
||||
</div><!--/.nav-collapse -->
|
||||
</div>
|
||||
</nav>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div class="content" id="content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 panel panel-default" style="padding-bottom: 15px;">
|
||||
<div style="margin-bottom: 15px;margin-top: 60px;">
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.12 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<script type="text/javascript" src="menudata.js"></script>
|
||||
<script type="text/javascript" src="menu.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
initMenu('',true,false,'search.php','Search');
|
||||
$(document).ready(function() { init_search(); });
|
||||
});
|
||||
</script>
|
||||
<div id="main-nav"></div>
|
||||
</div><!-- top -->
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">Related Pages</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
|
||||
<table class="directory">
|
||||
<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><a class="el" href="audio_algo_build.html" target="_self">Build lib & build sample</a></td><td class="desc"></td></tr>
|
||||
</table>
|
||||
</div><!-- directory -->
|
||||
</div><!-- contents -->
|
||||
<!-- HTML footer for doxygen 1.8.8-->
|
||||
<!-- start footer part -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="footer"/><address class="footer"><small>
|
||||
Generated on Mon Oct 24 2016 15:35:48 for Basic audio algo interface single pipe to process data by  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||
</a> 1.8.12
|
||||
</small></address>
|
||||
</body>
|
||||
</html>
|
26
search/all_0.html
Normal file
26
search/all_0.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_0.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
27
search/all_0.js
Normal file
27
search/all_0.js
Normal file
@ -0,0 +1,27 @@
|
||||
var searchData=
|
||||
[
|
||||
['a',['a',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a772e2882d3a9f91c6f73c0c70c8f3130',1,'etk::Color']]],
|
||||
['absolute',['absolute',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a0f1734db865e5a9c69d896bc237de133',1,'etk::Vector2D::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a0f1734db865e5a9c69d896bc237de133',1,'Vector2D< int32_t >::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a0f1734db865e5a9c69d896bc237de133',1,'Vector2D< uint32_t >::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a5b9733cd0928920ccc8e34d89e980b82',1,'etk::Vector3D::absolute()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#ab8a9feace5794c5a8a02e4b0e124408a',1,'etk::Vector4D::absolute()']]],
|
||||
['add',['add',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a723e93ae06d3d612dc4ebf2e1e7ffd5a',1,'etk::Hash::add()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#af5bb12b12c4fc35869a32192539c7beb',1,'ejson::Array::add()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#ade4f0bf9db6c5f3dd14cab34815d175a',1,'ejson::internal::Array::add()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0248c96fa66e30adfb84249def2c4c94',1,'ejson::internal::Object::add()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a8cec54f55c2b5fb497e6bfc59ea4be13',1,'ejson::Object::add()']]],
|
||||
['addindent',['addIndent',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a6119b75406b5648629b8eaa20948d224',1,'ejson::internal::Value']]],
|
||||
['aliceblue',['aliceBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#adcf86ef9c7918dcb094a0783761899f1',1,'etk::color']]],
|
||||
['all',['all',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a1614d672880eb19b18a98ea9babe723eaa181a603769c1f98ad927e7367c7aa51',1,'ememory::Counter']]],
|
||||
['angle',['angle',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a3b403b529d49082265f3655aff656a7e',1,'etk::Vector3D']]],
|
||||
['antiquewhite',['antiqueWhite',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a88abb6eca9c1ba0f346fb697683fa836',1,'etk::color']]],
|
||||
['applyscalerotation',['applyScaleRotation',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#aaafd3d4f83d6fd021b76a54f6a31b010',1,'etk::Matrix2']]],
|
||||
['aqua',['aqua',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a2cef110e71ce12876fcfd6605e57f716',1,'etk::color']]],
|
||||
['aquamarine',['aquamarine',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a8b69f67ed3e2db9915acde652a1cff80',1,'etk::color']]],
|
||||
['archive',['Archive',['http://atria-soft.github.io/etk/classetk_1_1_archive.html',1,'etk']]],
|
||||
['archive',['Archive',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a5991c05535749c9ed04eeec185f675ac',1,'etk::Archive']]],
|
||||
['archive_2ehpp',['Archive.hpp',['http://atria-soft.github.io/etk/__archive__8hpp.html',1,'']]],
|
||||
['archivecontent',['ArchiveContent',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#aac29f8265fa496ca9576f21e13a704d4',1,'etk::ArchiveContent']]],
|
||||
['archivecontent',['ArchiveContent',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html',1,'etk']]],
|
||||
['array',['Array',['http://atria-soft.github.io/ejson/classejson_1_1_array.html',1,'ejson']]],
|
||||
['array',['Array',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html',1,'ejson::internal']]],
|
||||
['array',['Array',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a918d2bded14bafde7809d9485659d58f',1,'ejson::Array::Array(ememory::SharedPtr< ejson::internal::Value > _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a36e158041e827b534ce245b18ddf5cc7',1,'ejson::Array::Array(const ejson::Array &_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a8ad8561622a2f641fb45b9650061ce68',1,'ejson::Array::Array()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#aac1462e570bd26f53b95621b6626e4cf',1,'ejson::internal::Array::Array()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709af1f713c9e000f5d3f280adbd124df4f5',1,'ejson::array()']]],
|
||||
['array_2ehpp',['Array.hpp',['http://atria-soft.github.io/ejson/__array__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/internal__2__array__8hpp.html',1,'(Global Namespace)']]],
|
||||
['audio',['audio',['http://musicdsp.github.io/audio/namespaceaudio.html',1,'']]],
|
||||
['avg',['avg',['http://atria-soft.github.io/etk/namespaceetk.html#a4397d293209affffd0c2f6832ebe2aea',1,'etk']]],
|
||||
['azure',['azure',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a51cb04e4a5b927ec82ceef2676b781f7',1,'etk::color']]],
|
||||
['audio_2dalgo_20library',['AUDIO-ALGO library',['../index.html',1,'']]]
|
||||
];
|
26
search/all_1.html
Normal file
26
search/all_1.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_1.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
24
search/all_1.js
Normal file
24
search/all_1.js
Normal file
@ -0,0 +1,24 @@
|
||||
var searchData=
|
||||
[
|
||||
['build_20lib_20_26_20build_20sample',['Build lib & build sample',['../audio_algo_build.html',1,'']]],
|
||||
['build_20lib_20_26_20build_20sample',['Build lib & build sample',['http://musicdsp.github.io/audio/audio_build.html',1,'']]],
|
||||
['b',['b',['http://atria-soft.github.io/etk/classetk_1_1_color.html#ac6be77ac33983d040a2ede58bc631d94',1,'etk::Color']]],
|
||||
['basenoise',['BaseNoise',['http://atria-soft.github.io/etk/classetk_1_1_base_noise.html',1,'etk']]],
|
||||
['basenoise',['BaseNoise',['http://atria-soft.github.io/etk/classetk_1_1_base_noise.html#ad5cbfcc2d967af185c264744de04cf15',1,'etk::BaseNoise']]],
|
||||
['begin',['begin',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a9b61949e81e838c6e1123ff26614d20d',1,'ejson::Array::begin()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a36fa8883af25afed6025178f95815927',1,'ejson::Array::begin() const'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a06584f41d23a3abc88a474da1e037437',1,'ejson::Object::begin()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a53091d4f1ba52eb463bc51af48597821',1,'ejson::Object::begin() const']]],
|
||||
['beige',['beige',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a68244b2fa52245487cec1154155d0e03',1,'etk::color']]],
|
||||
['bisque',['bisque',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ad03e04b97263a2c64dedfc405ff983ee',1,'etk::color']]],
|
||||
['black',['black',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a4198b330ccb2e9008665733eee338f73',1,'etk::color']]],
|
||||
['blanchedalmond',['blanchedAlmond',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a12e8ba075411585a68aece7d0fead4cc',1,'etk::color']]],
|
||||
['blue',['blue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a50f114c6849684e9984ae1322493572c',1,'etk::color']]],
|
||||
['blueviolet',['blueViolet',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ac91bcec9a0a115d1070397f86cfdee4d',1,'etk::color']]],
|
||||
['boolean',['Boolean',['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#a58e8f164a9e58444b362e3e174d54e56',1,'ejson::Boolean::Boolean(ememory::SharedPtr< ejson::internal::Value > _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#a7672591c1c29e25a18b41cfb5d7dd33b',1,'ejson::Boolean::Boolean(const ejson::Boolean &_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#aa7bd97c43d0d0ceea89a041162203654',1,'ejson::Boolean::Boolean(bool _value=false)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a2fe50827d84a523f9c3a107394389c11',1,'ejson::internal::Boolean::Boolean()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709a84e2c64f38f78ba3ea5c905ab5a2da27',1,'ejson::boolean()']]],
|
||||
['boolean',['Boolean',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html',1,'ejson::internal']]],
|
||||
['boolean',['Boolean',['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html',1,'ejson']]],
|
||||
['boolean_2ehpp',['Boolean.hpp',['http://atria-soft.github.io/ejson/__boolean__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/internal__2__boolean__8hpp.html',1,'(Global Namespace)']]],
|
||||
['brown',['brown',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#af3dff0347662115abb89c6ddb8447227',1,'etk::color']]],
|
||||
['burlywood',['burlyWood',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1920dd335710c842ea4706e2383ef784',1,'etk::color']]],
|
||||
['build_20lib_20_26_20build_20sample',['Build lib & build sample',['http://atria-soft.github.io/ejson/ejson_build.html',1,'']]],
|
||||
['build_20lib_20_26_20build_20sample',['Build lib & build sample',['http://atria-soft.github.io/elog/elog_build.html',1,'']]],
|
||||
['build_20lib_20_26_20build_20sample',['Build lib & build sample',['http://atria-soft.github.io/etk/etk_build.html',1,'']]]
|
||||
];
|
26
search/all_10.html
Normal file
26
search/all_10.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_10.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
86
search/all_10.js
Normal file
86
search/all_10.js
Normal file
@ -0,0 +1,86 @@
|
||||
var searchData=
|
||||
[
|
||||
['saddlebrown',['saddleBrown',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a5407ca00d7f7bf3815a72616e0be95ae',1,'etk::color']]],
|
||||
['safenormalize',['safeNormalize',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a245ccd3b57812316fc1ec98ea5c19434',1,'etk::Vector2D::safeNormalize()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a245ccd3b57812316fc1ec98ea5c19434',1,'Vector2D< int32_t >::safeNormalize()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a245ccd3b57812316fc1ec98ea5c19434',1,'Vector2D< uint32_t >::safeNormalize()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#abee6d22d509043f24a5aedb208ba1019',1,'etk::Vector3D::safeNormalize()']]],
|
||||
['salmon',['salmon',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ad324737686a8c6ec9208a93e727710d8',1,'etk::color']]],
|
||||
['sandybrown',['sandyBrown',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#affd1d87686e7d4fb1a720d4cb5c354cb',1,'etk::color']]],
|
||||
['scale',['scale',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#aacc34d6c0be39b22fed735cd09ffed84',1,'etk::Matrix2::scale(const vec2 &_vect)'],['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#adaa317393ef799d0ab49c3b10cf47231',1,'etk::Matrix2::scale(float _value)'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#aa3121f90430c2e2d80bc967d4b94c114',1,'etk::Matrix4::scale(const vec3 &_vect)'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a41eb56d343978f32caa64dfda50cd6a5',1,'etk::Matrix4::scale(float _sx, float _sy, float _sz)']]],
|
||||
['seagreen',['seaGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a3d3d8140130f2383e7740b4cea443470',1,'etk::color']]],
|
||||
['seashell',['seaShell',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a6b50105504f9be5dcf7ae59cbb115051',1,'etk::color']]],
|
||||
['seeknode',['seekNode',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993e',1,'etk']]],
|
||||
['seeknode_5fcurrent',['seekNode_current',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993ea8da2a40c899dc80a97a96999766d1598',1,'etk']]],
|
||||
['seeknode_5fend',['seekNode_end',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993ea981349cc2910e974472575409d19f0b6',1,'etk']]],
|
||||
['seeknode_5fstart',['seekNode_start',['http://atria-soft.github.io/etk/namespaceetk.html#a4a0133c254ab2433999c1b61fd9d993ea9019d83f9a109a54ab84067c2aa8abcd',1,'etk']]],
|
||||
['select',['select',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a1c8f1bb6f8d14c0fb9d4d39dac67b07b',1,'etk::Matrix']]],
|
||||
['set',['set',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a0955ac7d80e3886afa872d47e0cc1415',1,'etk::Color::set(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b, MY_TYPE _a)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a0f663138f780f134ae07957f5a9fef57',1,'etk::Color::set(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a7de7eef4b78f10829066af98be02f27b',1,'etk::Color::set(MY_TYPE _r, MY_TYPE _g)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a5063a9ee59f18fbeb7172f833617d8eb',1,'etk::Color::set(MY_TYPE _r)'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#af372b733bfbccd0d67f4df1fbfb62ad7',1,'etk::Hash::set()'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#aab7e29c6cf8553d1b396a8b5251df37d',1,'ejson::Boolean::set()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#af666327146a16819bc97b8bd2ef59ac6',1,'ejson::internal::Boolean::set()'],['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#aed1081e2d1f561d566a8cc77b3a90777',1,'ejson::FilePos::set()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#ad8f10de8af236c264bf4989709d347c6',1,'ejson::internal::Number::set(double _value)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a8003c9060afbadb9d7e0e1c7d18a2387',1,'ejson::internal::Number::set(int64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#acabc53b7d1370b35e39a610847fa5b1c',1,'ejson::internal::Number::set(uint64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a428ee4a3b855eb654f39e51426795a98',1,'ejson::Number::set(double _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a3562766c4a35aaf4f4dfc8bc8ae1335c',1,'ejson::Number::set(uint64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a9efe3f43c2dabb2a950a4d817990ac16',1,'ejson::Number::set(int64_t _value)'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#a7ddb0ed5b9ce5591eddd698551cf1ddb',1,'ejson::String::set()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a5ed7163d078e1b44d101451f5b40fb75',1,'ejson::internal::String::set()']]],
|
||||
['seta',['setA',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a1d24c054b6d64d2a73c6cef57d91c31a',1,'etk::Color']]],
|
||||
['setargzero',['setArgZero',['http://atria-soft.github.io/etk/namespaceetk.html#a5eda91763c9f02f0e7e16c099092695d',1,'etk']]],
|
||||
['setb',['setB',['http://atria-soft.github.io/etk/classetk_1_1_color.html#ae8078ca64701dbc1b5080589037743f1',1,'etk::Color']]],
|
||||
['setbacktrace',['setBackTrace',['http://atria-soft.github.io/elog/namespaceelog.html#aae6ff218b5e851513cfc29d030b865fb',1,'elog']]],
|
||||
['setbasefoldercache',['setBaseFolderCache',['http://atria-soft.github.io/etk/namespaceetk.html#a6cdcbe0aeba288278c89a995481b9e6f',1,'etk']]],
|
||||
['setbasefolderdata',['setBaseFolderData',['http://atria-soft.github.io/etk/namespaceetk.html#ab8546560f91d95e2df5f176f5ec0fc99',1,'etk']]],
|
||||
['setbasefolderdatauser',['setBaseFolderDataUser',['http://atria-soft.github.io/etk/namespaceetk.html#a91fb8f53bc0d3ad4ed2061b3f5af7734',1,'etk']]],
|
||||
['setcallbacklog',['setCallbackLog',['http://atria-soft.github.io/elog/namespaceelog.html#a8c02ad11df203c22c7e65c759b43efdd',1,'elog']]],
|
||||
['setcolor',['setColor',['http://atria-soft.github.io/elog/namespaceelog.html#a157a0ce2993c115906b8a2607f6a9133',1,'elog']]],
|
||||
['setdisplayerror',['setDisplayError',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a75cc1ee77adccb81e611a4ed09eaa6a8',1,'ejson::Document::setDisplayError()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a265d3edbd88a85e8d6650d785e599eb2',1,'ejson::internal::Document::setDisplayError()']]],
|
||||
['setfrompoints',['setFromPoints',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a69b4871efd25fa204a3917360bfb8cc9',1,'etk::Plane']]],
|
||||
['setfunction',['setFunction',['http://atria-soft.github.io/elog/namespaceelog.html#aed76a2bba4f8c0f51633fa64ab08362d',1,'elog']]],
|
||||
['setg',['setG',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a724b243ffc1ba471eab6b04f6ca6ecd4',1,'etk::Color']]],
|
||||
['setgroupreadable',['setGroupReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#acca31813653f621d4859d5c837f057a5',1,'etk::FSNodeRight']]],
|
||||
['setgrouprunable',['setGroupRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a5184205ed51108dd9bf3ed4ad141588e',1,'etk::FSNodeRight']]],
|
||||
['setgroupwritable',['setGroupWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#acc834eeef2e84b9e7cceac38b3a59389',1,'etk::FSNodeRight']]],
|
||||
['setintercept',['setIntercept',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a691582e68a6ee38b0c7c9ccf2a6734f3',1,'etk::Plane']]],
|
||||
['setinterpolate3',['setInterpolate3',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a3e59820b3cc3f9138e69d8aee9a448c8',1,'etk::Vector3D']]],
|
||||
['setlevel',['setLevel',['http://atria-soft.github.io/elog/namespaceelog.html#a3afe4089acb36e88d7266c1ce85ddc7b',1,'elog::setLevel(const std::string &_name, enum elog::level _level)'],['http://atria-soft.github.io/elog/namespaceelog.html#a423b95c78b78e98de35c8f176b9efbdc',1,'elog::setLevel(int32_t _id, enum elog::level _level)'],['http://atria-soft.github.io/elog/namespaceelog.html#a600189d0be9885f63d651201ab0c3688',1,'elog::setLevel(enum elog::level _level)']]],
|
||||
['setlibname',['setLibName',['http://atria-soft.github.io/elog/namespaceelog.html#a98f690a8538d4726fa0060331e021a08',1,'elog']]],
|
||||
['setline',['setLine',['http://atria-soft.github.io/elog/namespaceelog.html#a2591d4ba7e3136ff84c0b81289000b79',1,'elog']]],
|
||||
['setloginfile',['setLogInFile',['http://atria-soft.github.io/elog/namespaceelog.html#a78083b9d6ef033e329b788f8fa22f3f3',1,'elog']]],
|
||||
['setmax',['setMax',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a72ae52d19423c46bad955ad1a9f59041',1,'etk::Vector2D::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a72ae52d19423c46bad955ad1a9f59041',1,'Vector2D< int32_t >::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a72ae52d19423c46bad955ad1a9f59041',1,'Vector2D< uint32_t >::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7b9a94f71854f5ad89ef23ef22dcb321',1,'etk::Vector3D::setMax()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a2469c42527ead691f479a9a573709e5f',1,'etk::Vector4D::setMax()']]],
|
||||
['setmin',['setMin',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aa087eeec653b538d166c0d2794737fb1',1,'etk::Vector2D::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aa087eeec653b538d166c0d2794737fb1',1,'Vector2D< int32_t >::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aa087eeec653b538d166c0d2794737fb1',1,'Vector2D< uint32_t >::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7c2e3d0042a62791b1c653d5081577c2',1,'etk::Vector3D::setMin()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#aa647808a65613af0e1e757f27444f0a6',1,'etk::Vector4D::setMin()']]],
|
||||
['setname',['setName',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6e787e7f3148dae0c74139be7b05ab43',1,'etk::FSNode']]],
|
||||
['setnormal',['setNormal',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a202b3335b2b71cc84726a1b57b8e1e70',1,'etk::Plane']]],
|
||||
['setotherreadable',['setOtherReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a6ad46a56d871f5925a826a6fd3071b78',1,'etk::FSNodeRight']]],
|
||||
['setotherrunable',['setOtherRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a290708c849f5b58714dad5a1926cfe1c',1,'etk::FSNodeRight']]],
|
||||
['setotherwritable',['setOtherWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a931050b25db28423f1a2899f8ec188a0',1,'etk::FSNodeRight']]],
|
||||
['setr',['setR',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a96c8b12779776562c2fa0dfdc4d1b242',1,'etk::Color']]],
|
||||
['setright',['setRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a65bce1c8887edad87a90c8c7ffb861d3',1,'etk::FSNode']]],
|
||||
['setthreadid',['setThreadId',['http://atria-soft.github.io/elog/namespaceelog.html#a9b835d4980949026a8883570ea3837af',1,'elog']]],
|
||||
['setthreadnameenable',['setThreadNameEnable',['http://atria-soft.github.io/elog/namespaceelog.html#ae64b5abf2ea03562679668e6242c49a2',1,'elog']]],
|
||||
['settime',['setTime',['http://atria-soft.github.io/elog/namespaceelog.html#a15e30e61e8db5a43e72358d2c02be6a4',1,'elog']]],
|
||||
['setuserreadable',['setUserReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#acadd7b9c2c632f9805569ff4f592bda9',1,'etk::FSNodeRight']]],
|
||||
['setuserrunable',['setUserRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a0ee76ec4897c406ab67ea25659953070',1,'etk::FSNodeRight']]],
|
||||
['setuserwritable',['setUserWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a9e5e2e4c7926c22101e6955b3d8c9139',1,'etk::FSNodeRight']]],
|
||||
['setvalue',['setValue',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ade86675814738c6b7a6a797ee128a2b2',1,'etk::Vector2D::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ade86675814738c6b7a6a797ee128a2b2',1,'Vector2D< int32_t >::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ade86675814738c6b7a6a797ee128a2b2',1,'Vector2D< uint32_t >::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a96d02449aaa2dfeb4e60320da667ab92',1,'etk::Vector3D::setValue()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a9b164290093d948905fab0f56fbe22fc',1,'etk::Vector4D::setValue()']]],
|
||||
['setw',['setW',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a1750c9d1b91d67b8b2bc9d0cce759944',1,'etk::Vector4D']]],
|
||||
['setx',['setX',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ae2acd7c10cdd510ce23ff11839c95c04',1,'etk::Vector2D::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ae2acd7c10cdd510ce23ff11839c95c04',1,'Vector2D< int32_t >::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ae2acd7c10cdd510ce23ff11839c95c04',1,'Vector2D< uint32_t >::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ab7ab9d9ce1138ffafebaff3001bb7d29',1,'etk::Vector3D::setX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a238d966b077394ff118f2088479fb620',1,'etk::Vector4D::setX()']]],
|
||||
['sety',['setY',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a35a3f35ed049b7193ca67ea815efd465',1,'etk::Vector2D::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a35a3f35ed049b7193ca67ea815efd465',1,'Vector2D< int32_t >::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a35a3f35ed049b7193ca67ea815efd465',1,'Vector2D< uint32_t >::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a10c41fb516fb33ef56201f06992462d1',1,'etk::Vector3D::setY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a7489a0c8d592c9464a8e378bbb7e570e',1,'etk::Vector4D::setY()']]],
|
||||
['setz',['setZ',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a9a5c1d69fd9066daae0a759831ba0e30',1,'etk::Vector3D::setZ()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#ae5bbc387ea4199ea535d4d033cfc40d1',1,'etk::Vector4D::setZ()']]],
|
||||
['setzero',['setZero',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab2e921e0009f0e0de78d06d16f6a78e0',1,'etk::Vector2D::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab2e921e0009f0e0de78d06d16f6a78e0',1,'Vector2D< int32_t >::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab2e921e0009f0e0de78d06d16f6a78e0',1,'Vector2D< uint32_t >::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7ddb707a7a1609bcbd8c092186a6db19',1,'etk::Vector3D::setZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a978b0511ade11701ffdbd7974de6932e',1,'etk::Vector4D::setZero()']]],
|
||||
['sharedfromthis',['sharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#ab9c576f893c44cbf8163b1ddf6f86b38',1,'ememory::EnableSharedFromThis::sharedFromThis()'],['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#ad16c98c2383b23adffa8db309bc1ca11',1,'ememory::EnableSharedFromThis::sharedFromThis() const']]],
|
||||
['sharedptr',['SharedPtr',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a7b017780895f0a9d32e753574ae82010',1,'ememory::SharedPtr::SharedPtr(EMEMORY_TYPE2 *_element)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#aef65a1bba18c17a8a13e05aa5d702b1e',1,'ememory::SharedPtr::SharedPtr(std::nullptr_t)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a6b448ecd7740c97551e8afd65acaca6f',1,'ememory::SharedPtr::SharedPtr()'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ab5052506642bddd3aa5e6fb44ec1a173',1,'ememory::SharedPtr::SharedPtr(EMEMORY_TYPE *_obj, ememory::Counter *_counter)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ab91fe50ba210a0545fa41e993df9beea',1,'ememory::SharedPtr::SharedPtr(const SharedPtr< EMEMORY_TYPE > &_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ab46f51a66327265bbc94ee89b603ca71',1,'ememory::SharedPtr::SharedPtr(SharedPtr< EMEMORY_TYPE > &&_obj)']]],
|
||||
['sharedptr',['SharedPtr',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html',1,'ememory']]],
|
||||
['sharedptr_2ehpp',['SharedPtr.hpp',['http://atria-soft.github.io/ememory/__shared__ptr__8hpp.html',1,'']]],
|
||||
['sharedptr_3c_20ejson_3a_3ainternal_3a_3aejson_3a_3avalue_20_3e',['SharedPtr< ejson::internal::ejson::Value >',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html',1,'ememory']]],
|
||||
['sienna',['sienna',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a0a8eaf790795f7b5fc63c81ade8652ce',1,'etk::color']]],
|
||||
['silver',['silver',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aca25e934d9d1ac1538a4a0c7011c6d0c',1,'etk::color']]],
|
||||
['simplifypath',['simplifyPath',['http://atria-soft.github.io/etk/namespaceetk.html#a0087446ff0e9b533ea70b3043ae2addc',1,'etk']]],
|
||||
['size',['size',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a17d06497d98be15f6080cf84010d35a0',1,'etk::Archive::size()'],['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a36dc83c35ebdacdce11e04dbcba4334c',1,'etk::ArchiveContent::size()'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a4d639eb19c25b1ff76d34c225a132deb',1,'etk::Hash::size()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a94267e806e4df82be54a73a7ef591c03',1,'ejson::Array::size()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a56b469d5860feb6d2d73c51b87188051',1,'ejson::internal::Array::size()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a11f6d2ca0e58ebccdbdac6120ea377ab',1,'ejson::internal::Object::size()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a5e33daf982a3bae085b3d8e9d0d48089',1,'ejson::Object::size()']]],
|
||||
['skyblue',['skyBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1576fd8ed2c3fe5ed5a10f8147d0ed1d',1,'etk::color']]],
|
||||
['slateblue',['slateBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a4f605302a82a6173de726e797c3edf0d',1,'etk::color']]],
|
||||
['slategray',['slateGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a5d3c48d14e696bc1b8d9d43158dfa0b2',1,'etk::color']]],
|
||||
['slategrey',['slateGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9cefc035f467790176ba159bb6255c6e',1,'etk::color']]],
|
||||
['snow',['snow',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ae312c38fc6be5178a4ff63921f162723',1,'etk::color']]],
|
||||
['space',['Space',['http://atria-soft.github.io/etk/namespaceu32char.html#a7a114cf0424bb72fd7f3f10c9cd017e8',1,'u32char']]],
|
||||
['springgreen',['springGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab3b6e2028b00791f15ddff7f9a1fe703',1,'etk::color']]],
|
||||
['staticpointercast',['staticPointerCast',['http://atria-soft.github.io/ememory/namespaceememory.html#a9a5a8c52dbbb1cb7121231de10dec3b2',1,'ememory::staticPointerCast(ememory::SharedPtr< EMEMORY_TYPE > &_obj)'],['http://atria-soft.github.io/ememory/namespaceememory.html#ad67a9361b7aa47b38ef5366f9ec2c712',1,'ememory::staticPointerCast(const ememory::SharedPtr< EMEMORY_TYPE > &_obj)']]],
|
||||
['stdtools_2ehpp',['stdTools.hpp',['http://atria-soft.github.io/etk/std__tools__8hpp.html',1,'']]],
|
||||
['steelblue',['steelBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9162b466a59a0bbe420b49c565e9dd6f',1,'etk::color']]],
|
||||
['store',['store',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a2a058bdb1bbd4e151e08e719bbbe2560',1,'ejson::Document::store()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a35d7de9cf4987da51028e3bf7f9edde6',1,'ejson::internal::Document::store()']]],
|
||||
['storesafe',['storeSafe',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a3fb19ca6aefe86a86c43bf6bb8d133c9',1,'ejson::Document']]],
|
||||
['string',['String',['http://atria-soft.github.io/ejson/classejson_1_1_string.html#a2343d871cc75be25eee5381ba34dfd37',1,'ejson::String::String(ememory::SharedPtr< ejson::internal::Value > _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#ac5074aad1b24c1045b27e30aaefe6ebe',1,'ejson::String::String(const ejson::String &_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#afdae63446f3a9fb02245636c352a91e4',1,'ejson::String::String(const std::string &_value="")'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a1ce856e42efbcfe0e76294ae113c0e67',1,'ejson::internal::String::String()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709ab45cffe084dd3d20d928bee85e7b0f21',1,'ejson::string()']]],
|
||||
['string',['String',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html',1,'ejson::internal']]],
|
||||
['string',['String',['http://atria-soft.github.io/ejson/classejson_1_1_string.html',1,'ejson']]],
|
||||
['string_2ehpp',['String.hpp',['http://atria-soft.github.io/ejson/internal__2__string__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/__string__8hpp.html',1,'(Global Namespace)']]],
|
||||
['suppress',['Suppress',['http://atria-soft.github.io/etk/namespaceu32char.html#a9cff086787b8b0321e36251a27c40321',1,'u32char']]],
|
||||
['swap',['swap',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ad7a06dd2042312f6f94da526adddfc48',1,'ememory::SharedPtr::swap()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#ab138aa24ae18beedf25cbbe9d99ba0b4',1,'ememory::WeakPtr::swap()']]]
|
||||
];
|
26
search/all_11.html
Normal file
26
search/all_11.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_11.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
44
search/all_11.js
Normal file
44
search/all_11.js
Normal file
@ -0,0 +1,44 @@
|
||||
var searchData=
|
||||
[
|
||||
['tutorials',['Tutorials',['http://atria-soft.github.io/elog/elog_tutorial.html',1,'']]],
|
||||
['tabulation',['Tabulation',['http://atria-soft.github.io/etk/namespaceu32char.html#ad7a0c42ea443e20bfceb69f863bebc6a',1,'u32char']]],
|
||||
['tan',['tan',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a923b2869775837088eabdb48681f4b1e',1,'etk::color']]],
|
||||
['teal',['teal',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9b28dace6aa8c81c0c59a7343875d2b5',1,'etk::color']]],
|
||||
['theoricfirst',['theoricFirst',['http://atria-soft.github.io/etk/namespaceutf8.html#a52043c6c7cf75da5f8e8812ffb4ffc1c',1,'utf8']]],
|
||||
['theoriclen',['theoricLen',['http://atria-soft.github.io/etk/namespaceutf8.html#ad408da64c12fe3345b9576ab487bd7e3',1,'utf8']]],
|
||||
['thistle',['thistle',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a729d8532a3b7c147fcaa726ce2d887b8',1,'etk::color']]],
|
||||
['time_2ehpp',['Time.hpp',['http://musicdsp.github.io/audio/__time__8hpp.html',1,'']]],
|
||||
['timeaccessed',['timeAccessed',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a43c3b946ef91744dd2991734166c1d87',1,'etk::FSNode']]],
|
||||
['timeaccessedstring',['timeAccessedString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a17022f6598927b1b9f169cbcd99099e6',1,'etk::FSNode']]],
|
||||
['timecreated',['timeCreated',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a46fe9a1916400ca932d31a847dff0f21',1,'etk::FSNode']]],
|
||||
['timecreatedstring',['timeCreatedString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a30a497f2d095469b5846756a1b51a749',1,'etk::FSNode']]],
|
||||
['timemodified',['timeModified',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#afa84341a6764252f5fb70eb48540f496',1,'etk::FSNode']]],
|
||||
['timemodifiedstring',['timeModifiedString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a3cdee551ca80df9597a408b42b4f7210',1,'etk::FSNode']]],
|
||||
['to_5fstring',['to_string',['http://atria-soft.github.io/etk/namespaceetk.html#a48ed31a00f989f5b188d7254e6945a74',1,'etk::to_string(const TYPE &_variable)'],['http://atria-soft.github.io/etk/namespaceetk.html#a17aa4febea213096442bcb8e7ca80805',1,'etk::to_string(const std::vector< TYPE > &_list)']]],
|
||||
['toarray',['toArray',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#abf67a6a98c2fb657cff4290cef39b658',1,'ejson::Value::toArray()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a7bd84110f49d0b4252d3b919e74e3831',1,'ejson::Value::toArray() const']]],
|
||||
['toboolean',['toBoolean',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ab759dc22259f15b487a4437df60baf1a',1,'ejson::Value::toBoolean()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ac7b37ebf5bcabf12feb589968770b3f4',1,'ejson::Value::toBoolean() const']]],
|
||||
['todocument',['toDocument',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a58ec04b1804d2502c0621c9a4108b6c3',1,'ejson::Value::toDocument()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a6b5eed0d3b14a3fc1a75357bda165e33',1,'ejson::Value::toDocument() const']]],
|
||||
['toint',['toInt',['http://atria-soft.github.io/etk/namespaceu32char.html#afc40d527459e3869ea8dc54d3b5ef225',1,'u32char']]],
|
||||
['tomato',['tomato',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9f3fe621ef99b1b452a5a11af1a06ae0',1,'etk::color']]],
|
||||
['tonull',['toNull',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a157597cbc30f00eabc62d8724fccd61f',1,'ejson::Value::toNull()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#aa50ce25748b4164eac425a74aa3a9990',1,'ejson::Value::toNull() const']]],
|
||||
['tonumber',['toNumber',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a40e63375796266399a4297b8d2b96f2c',1,'ejson::Value::toNumber()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a49736f1d74a125b0e9fb3e9a18a793ad',1,'ejson::Value::toNumber() const']]],
|
||||
['toobject',['toObject',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a91236630d37cad7a8d1256835a9448c8',1,'ejson::Value::toObject()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ae27978be6397ed84518ae23eaed23cd5',1,'ejson::Value::toObject() const']]],
|
||||
['tool_2ehpp',['tool.hpp',['http://atria-soft.github.io/etk/tool__8hpp.html',1,'']]],
|
||||
['tostring',['toString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a43a3bf8ff0d02f92e8751ea8a16fcaa1',1,'ejson::Value::toString()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a65587aee04eba5882f306b46e5b3c9ce',1,'ejson::Value::toString() const']]],
|
||||
['touch',['touch',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6fd01aeb7f84399ad99573e0a7e2f8fc',1,'etk::FSNode']]],
|
||||
['transfertin',['transfertIn',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#ad82736867e1bbf1ef9cda98ee22b2215',1,'ejson::internal::Array::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#af30b2342a4c91705dceb2434f2f06d47',1,'ejson::internal::Boolean::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a3e57cb8cf21c84258ed5024a8d40fc23',1,'ejson::internal::Null::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#ab753d1a2d0919737a566b7e3fc06b080',1,'ejson::internal::Number::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aee25bea3065759780a3f63d2f5c0458e',1,'ejson::internal::Object::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a3ee2d34d468baec8d347add7d590e7db',1,'ejson::internal::String::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#ad0d5a680f032ce3d97f87468fdd448df',1,'ejson::internal::Value::transfertIn()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a03ca08ba192ba578df15b6f90cb96970',1,'ejson::Value::transfertIn()']]],
|
||||
['translate',['translate',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#abd22ba1cbe8dc53c0446abcb55d8551a',1,'etk::Matrix2::translate()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#aa6cd07f3a802c5a57bddbf5a6db95c4d',1,'etk::Matrix4::translate()']]],
|
||||
['transpose',['transpose',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#ab05c8b14ec68367d0391c23b77870a3b',1,'etk::Matrix::transpose()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a8214b2300ebdc4b42bde1efe93e84fae',1,'etk::Matrix4::transpose()']]],
|
||||
['triple',['triple',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#af1e591712d4a15bd21ad6fd22d72df97',1,'etk::Vector3D']]],
|
||||
['turquoise',['turquoise',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a8162f21fcdb858a4c5017a20db4c5830',1,'etk::color']]],
|
||||
['typenode',['typeNode',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8',1,'etk']]],
|
||||
['typenode_5fblock',['typeNode_block',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a18f1c41a5c9bc4842a512954af23d630',1,'etk']]],
|
||||
['typenode_5fcharacter',['typeNode_character',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a07f61c5191a0e393871ecf69f4f32eed',1,'etk']]],
|
||||
['typenode_5ffifo',['typeNode_fifo',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8af5a5a8cef27d1c2abf4c6b7b9a893890',1,'etk']]],
|
||||
['typenode_5ffile',['typeNode_file',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a4bb596537f408d12f89da085cac752c6',1,'etk']]],
|
||||
['typenode_5ffolder',['typeNode_folder',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a67fbbfd55ff1568df12ca9719bc73680',1,'etk']]],
|
||||
['typenode_5flink',['typeNode_link',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a73f8fdd1c9f08183be017f372935cf14',1,'etk']]],
|
||||
['typenode_5fsocket',['typeNode_socket',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a9b46f1f9d230b9490b2c17af379c61bc',1,'etk']]],
|
||||
['typenode_5funknow',['typeNode_unknow',['http://atria-soft.github.io/etk/namespaceetk.html#a99c2dd948d6da85ed816fa0c267862e8a4c85a6b7dccfd424a20b383e5dbe63bf',1,'etk']]],
|
||||
['types_2ehpp',['types.hpp',['http://atria-soft.github.io/etk/types__8hpp.html',1,'(Global Namespace)'],['http://musicdsp.github.io/audio/types__8hpp.html',1,'(Global Namespace)']]]
|
||||
];
|
26
search/all_12.html
Normal file
26
search/all_12.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_12.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
8
search/all_12.js
Normal file
8
search/all_12.js
Normal file
@ -0,0 +1,8 @@
|
||||
var searchData=
|
||||
[
|
||||
['u32char',['u32char',['http://atria-soft.github.io/etk/namespaceu32char.html',1,'']]],
|
||||
['unknow',['unknow',['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709a5c940de9c166a32dc1f63d9dafc6822f',1,'ejson']]],
|
||||
['unsetloginfile',['unsetLogInFile',['http://atria-soft.github.io/elog/namespaceelog.html#a496120feb0c59449a46057559c6c8a1a',1,'elog']]],
|
||||
['usecount',['useCount',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a74070b8ebda543021108e0df4b1e825b',1,'ememory::SharedPtr::useCount()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a41fa587a2ee7a4bddd76688b94133af3',1,'ememory::WeakPtr::useCount()']]],
|
||||
['utf8',['utf8',['http://atria-soft.github.io/etk/namespaceutf8.html',1,'']]]
|
||||
];
|
26
search/all_13.html
Normal file
26
search/all_13.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_13.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
22
search/all_13.js
Normal file
22
search/all_13.js
Normal file
@ -0,0 +1,22 @@
|
||||
var searchData=
|
||||
[
|
||||
['value',['Value',['http://atria-soft.github.io/ejson/classejson_1_1_value.html',1,'ejson']]],
|
||||
['value',['Value',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html',1,'ejson::internal']]],
|
||||
['value',['Value',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a57471d92a92936793f1844e36d3b115a',1,'ejson::internal::Value::Value()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a0510ab7719ab2388f447f7b0c2972ff7',1,'ejson::Value::Value(const ememory::SharedPtr< ejson::internal::Value > &_internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ad0eee5841f21b81556e93c28915ffbc1',1,'ejson::Value::Value()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709a2063c1608d6e0baf80249c42e2be5804',1,'ejson::value()']]],
|
||||
['value_2ehpp',['Value.hpp',['http://atria-soft.github.io/ejson/internal__2__value__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/__value__8hpp.html',1,'(Global Namespace)']]],
|
||||
['valueexist',['valueExist',['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a5a8e982824bad7d0a0f28cfb9eff5a07',1,'ejson::Object']]],
|
||||
['valuetype',['valueType',['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709',1,'ejson']]],
|
||||
['valuetype_2ehpp',['valueType.hpp',['http://atria-soft.github.io/ejson/value__type__8hpp.html',1,'']]],
|
||||
['vector2d',['Vector2D',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html',1,'etk']]],
|
||||
['vector2d',['Vector2D',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a09b5e26eacb50a8059d0e0c65405eb82',1,'etk::Vector2D::Vector2D(T _xxx, T _yyy)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aaece962e3caa1d70afe0b1682ce8212e',1,'etk::Vector2D::Vector2D(const Vector2D< double > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#acab36ec2f778107bc89f4e5c9463191b',1,'etk::Vector2D::Vector2D(const Vector2D< float > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab07ef273334d86b96dd13a4ce4c19137',1,'etk::Vector2D::Vector2D(const Vector2D< int32_t > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a187bb96fc68cb5d5dadc99f573674b98',1,'etk::Vector2D::Vector2D(const std::string &_str)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a09b5e26eacb50a8059d0e0c65405eb82',1,'Vector2D< int32_t >::Vector2D(int32_t _xxx, int32_t _yyy)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aaece962e3caa1d70afe0b1682ce8212e',1,'Vector2D< int32_t >::Vector2D(const Vector2D< double > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#acab36ec2f778107bc89f4e5c9463191b',1,'Vector2D< int32_t >::Vector2D(const Vector2D< float > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab07ef273334d86b96dd13a4ce4c19137',1,'Vector2D< int32_t >::Vector2D(const Vector2D< int32_t > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a187bb96fc68cb5d5dadc99f573674b98',1,'Vector2D< int32_t >::Vector2D(const std::string &_str)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a09b5e26eacb50a8059d0e0c65405eb82',1,'Vector2D< uint32_t >::Vector2D(uint32_t _xxx, uint32_t _yyy)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aaece962e3caa1d70afe0b1682ce8212e',1,'Vector2D< uint32_t >::Vector2D(const Vector2D< double > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#acab36ec2f778107bc89f4e5c9463191b',1,'Vector2D< uint32_t >::Vector2D(const Vector2D< float > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab07ef273334d86b96dd13a4ce4c19137',1,'Vector2D< uint32_t >::Vector2D(const Vector2D< int32_t > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a187bb96fc68cb5d5dadc99f573674b98',1,'Vector2D< uint32_t >::Vector2D(const std::string &_str)']]],
|
||||
['vector2d_2ehpp',['Vector2D.hpp',['http://atria-soft.github.io/etk/__vector2__d__8hpp.html',1,'']]],
|
||||
['vector2d_3c_20int32_5ft_20_3e',['Vector2D< int32_t >',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html',1,'']]],
|
||||
['vector2d_3c_20uint32_5ft_20_3e',['Vector2D< uint32_t >',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html',1,'']]],
|
||||
['vector3d',['Vector3D',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a409169c1781cae5220b9f7bd078e05d9',1,'etk::Vector3D::Vector3D()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a7f5d02301a551e7f686092d7b9a5b269',1,'etk::Vector3D::Vector3D(const T &_xxx, const T &_yyy, const T &_zzz)']]],
|
||||
['vector3d',['Vector3D',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html',1,'etk']]],
|
||||
['vector3d_2ehpp',['Vector3D.hpp',['http://atria-soft.github.io/etk/__vector3__d__8hpp.html',1,'']]],
|
||||
['vector4d',['Vector4D',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html',1,'etk']]],
|
||||
['vector4d',['Vector4D',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a0e140dec4eca4f3695f19fb92dc3e1ae',1,'etk::Vector4D::Vector4D()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a7a41fd47b438cc43849a2b2c0f308db2',1,'etk::Vector4D::Vector4D(const T &_xxx, const T &_yyy, const T &_zzz, const T &_www)']]],
|
||||
['vector4d_2ehpp',['Vector4D.hpp',['http://atria-soft.github.io/etk/__vector4__d__8hpp.html',1,'']]],
|
||||
['violet',['violet',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ac86b1f752bb46992b83000f1b48957ec',1,'etk::color']]]
|
||||
];
|
26
search/all_14.html
Normal file
26
search/all_14.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_14.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
13
search/all_14.js
Normal file
13
search/all_14.js
Normal file
@ -0,0 +1,13 @@
|
||||
var searchData=
|
||||
[
|
||||
['write_20an_20json_20content',['Write an JSON content',['http://atria-soft.github.io/ejson/ejson_tutorial_write.html',1,'']]],
|
||||
['w',['w',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a0ede53650faf9183b87a3592e8be142d',1,'etk::Vector4D']]],
|
||||
['wait',['wait',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#a0693f87b2886e553ccdafdac112ebbd5',1,'etk::Fifo::wait(MY_TYPE &_data)'],['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#aa08e5c57d91bc54ea08f377a6e2653e3',1,'etk::Fifo::wait(MY_TYPE &_data, uint32_t _timeOutInUs)']]],
|
||||
['weakfromthis',['weakFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#aa2ce5703d70b211bae31fd40a5514c19',1,'ememory::EnableSharedFromThis::weakFromThis()'],['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#a6be22e13e06d0f679ff03c6ee817386f',1,'ememory::EnableSharedFromThis::weakFromThis() const']]],
|
||||
['weakptr',['WeakPtr',['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html',1,'ememory']]],
|
||||
['weakptr',['WeakPtr',['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a7ca8af1a20e2bce96d5c65ea1fd72ec1',1,'ememory::WeakPtr::WeakPtr()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a1fb089b0b5bd76e33bf54d32cd3bb369',1,'ememory::WeakPtr::WeakPtr(std::nullptr_t)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#adb31ca52a0b8dfe8c876a9fd297eca83',1,'ememory::WeakPtr::WeakPtr(const WeakPtr< EMEMORY_TYPE > &_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#adbfcc73329e43b1e37fd8b19220d752e',1,'ememory::WeakPtr::WeakPtr(WeakPtr &&_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a3a30b756ccdc34bf96a4c7e2e4fb87c4',1,'ememory::WeakPtr::WeakPtr(const SharedPtr< EMEMORY_TYPE > &_obj)'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a9233c621eaf744a4b6d3f53afb77f33f',1,'ememory::WeakPtr::WeakPtr(const SharedPtr< EMEMORY_TYPE2 > &_obj)']]],
|
||||
['weakptr_2ehpp',['WeakPtr.hpp',['http://atria-soft.github.io/ememory/__weak__ptr__8hpp.html',1,'']]],
|
||||
['wheat',['wheat',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a0fee5d2cd67adc3c4a5d820616854cde',1,'etk::color']]],
|
||||
['white',['white',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a6559ba632982f84ab6215281bd431b9c',1,'etk::color']]],
|
||||
['whitesmoke',['whiteSmoke',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1b012cf56fb3a1c63e55aa2d83f7472b',1,'etk::color']]]
|
||||
];
|
26
search/all_15.html
Normal file
26
search/all_15.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_15.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
4
search/all_15.js
Normal file
4
search/all_15.js
Normal file
@ -0,0 +1,4 @@
|
||||
var searchData=
|
||||
[
|
||||
['x',['x',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a8409de5d430e5cdcb7326aee94176873',1,'etk::Vector2D::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a8409de5d430e5cdcb7326aee94176873',1,'Vector2D< int32_t >::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a8409de5d430e5cdcb7326aee94176873',1,'Vector2D< uint32_t >::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#af2bda50fefea08fb49c04b15a61bcb6a',1,'etk::Vector3D::x()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a98cef087b46916c257dc7b7e39230e74',1,'etk::Vector4D::x()']]]
|
||||
];
|
26
search/all_16.html
Normal file
26
search/all_16.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_16.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
6
search/all_16.js
Normal file
6
search/all_16.js
Normal file
@ -0,0 +1,6 @@
|
||||
var searchData=
|
||||
[
|
||||
['y',['y',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#abc8a9a46cb0bf2c32916bfa3a35dfb22',1,'etk::Vector2D::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#abc8a9a46cb0bf2c32916bfa3a35dfb22',1,'Vector2D< int32_t >::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#abc8a9a46cb0bf2c32916bfa3a35dfb22',1,'Vector2D< uint32_t >::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ad949b7843b6212277927f0b973ef502b',1,'etk::Vector3D::y()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a5c604a37b7503594d4b69d286751b12d',1,'etk::Vector4D::y()']]],
|
||||
['yellow',['yellow',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a002d237cb06c35ec373b454af2cbb072',1,'etk::color']]],
|
||||
['yellowgreen',['yellowGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a88244e18c7bcefe71c7f9fbca047125b',1,'etk::color']]]
|
||||
];
|
26
search/all_17.html
Normal file
26
search/all_17.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_17.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
7
search/all_17.js
Normal file
7
search/all_17.js
Normal file
@ -0,0 +1,7 @@
|
||||
var searchData=
|
||||
[
|
||||
['z',['z',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a4d5e3071c66297840c6a857e580aaabd',1,'etk::Vector3D::z()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a5b42d456747b68c7ab1da8cfdbc38dfc',1,'etk::Vector4D::z()']]],
|
||||
['zip',['Zip',['http://atria-soft.github.io/etk/classetk_1_1archive_1_1_zip.html#afb44ec0e03903534beeaa51bd562acda',1,'etk::archive::Zip']]],
|
||||
['zip',['Zip',['http://atria-soft.github.io/etk/classetk_1_1archive_1_1_zip.html',1,'etk::archive']]],
|
||||
['zip_2ehpp',['Zip.hpp',['http://atria-soft.github.io/etk/__zip__8hpp.html',1,'']]]
|
||||
];
|
26
search/all_18.html
Normal file
26
search/all_18.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_18.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
14
search/all_18.js
Normal file
14
search/all_18.js
Normal file
@ -0,0 +1,14 @@
|
||||
var searchData=
|
||||
[
|
||||
['_7earchive',['~Archive',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a712ccb41b94c3d96fa7be82e13d10ee2',1,'etk::Archive']]],
|
||||
['_7ecounter',['~Counter',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a52762694b79f68cfb77022e6e6907d96',1,'ememory::Counter']]],
|
||||
['_7eenablesharedfromthis',['~EnableSharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#ae088de759baf528291c446cc48fd5ed1',1,'ememory::EnableSharedFromThis']]],
|
||||
['_7efifo',['~Fifo',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#ae3aa50d02d2a5099ead2dcd2bda984ec',1,'etk::Fifo']]],
|
||||
['_7efsnode',['~FSNode',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aa15899502c51cbf37ffc6f7284f3535b',1,'etk::FSNode']]],
|
||||
['_7ehash',['~Hash',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#ac2b71e6597e028b28272391e3e951474',1,'etk::Hash']]],
|
||||
['_7eiterator',['~iterator',['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a4de42494301339b944f846b649504f4f',1,'utf8::iterator']]],
|
||||
['_7ematrix',['~Matrix',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a8ae71a3749309ebea595c9619d28878e',1,'etk::Matrix']]],
|
||||
['_7esharedptr',['~SharedPtr',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a11e3f0079bc15778cec63fc378c10c9d',1,'ememory::SharedPtr']]],
|
||||
['_7evalue',['~Value',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#aa2e223aeec554cb43556c2ad088d7283',1,'ejson::internal::Value::~Value()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a60852cacc23fd9b08177da5084ade12e',1,'ejson::Value::~Value()']]],
|
||||
['_7ezip',['~Zip',['http://atria-soft.github.io/etk/classetk_1_1archive_1_1_zip.html#a79fff570b3ccbee5ffe3d0f85b5c7b24',1,'etk::archive::Zip']]]
|
||||
];
|
26
search/all_2.html
Normal file
26
search/all_2.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_2.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
63
search/all_2.js
Normal file
63
search/all_2.js
Normal file
@ -0,0 +1,63 @@
|
||||
var searchData=
|
||||
[
|
||||
['cadetblue',['cadetBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa007b1fd1b17e1872fbc6f41e147f54f',1,'etk::color']]],
|
||||
['calculateintercept',['calculateIntercept',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#a6b0377c24a6b076de9fe112400724523',1,'etk::Plane']]],
|
||||
['callbacklog',['callbackLog',['http://atria-soft.github.io/elog/namespaceelog.html#a2f5d781d79bd79fcda8b94a212bcbbde',1,'elog']]],
|
||||
['carrierreturn',['CarrierReturn',['http://atria-soft.github.io/etk/namespaceu32char.html#a65eaeefb77c1b694f336eedda60c30af',1,'u32char']]],
|
||||
['changeorder',['changeOrder',['http://atria-soft.github.io/etk/namespaceu32char.html#a7d8866bc81b174c81df61536be36e7ef',1,'u32char']]],
|
||||
['channel',['channel',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108',1,'audio']]],
|
||||
['channel_2ehpp',['channel.hpp',['http://musicdsp.github.io/audio/channel__8hpp.html',1,'']]],
|
||||
['channel_5fcenterleft',['channel_centerLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ae268066b280a3086d8c2294f61275a96',1,'audio']]],
|
||||
['channel_5fcenterright',['channel_centerRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a5918371320b774bc6aa860bc2b12fd16',1,'audio']]],
|
||||
['channel_5ffrontcenter',['channel_frontCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108aea18fbc48b38ab10669dc5bda9bf9491',1,'audio']]],
|
||||
['channel_5ffrontleft',['channel_frontLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a6562e2a8f82d1ba9811d8140b7e414e4',1,'audio']]],
|
||||
['channel_5ffrontright',['channel_frontRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a35dd902be5e44a1a221a88b69a0d8146',1,'audio']]],
|
||||
['channel_5flfe',['channel_lfe',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a69071f352585328311ec72dd2fe379e0',1,'audio']]],
|
||||
['channel_5frearcenter',['channel_rearCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ab7d27550b8b9b45759efb9be53ea29f1',1,'audio']]],
|
||||
['channel_5frearleft',['channel_rearLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a38a7b80a5a501832db551e4c125c02e2',1,'audio']]],
|
||||
['channel_5frearright',['channel_rearRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a190721a0d06efba2b2652432a6579304',1,'audio']]],
|
||||
['channel_5ftopcenterleft',['channel_topCenterLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a1e15abcd1506642715fb22e782d42144',1,'audio']]],
|
||||
['channel_5ftopcenterright',['channel_topCenterRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a34576a9879009550465c2e1f1b31424a',1,'audio']]],
|
||||
['channel_5ftopfrontcenter',['channel_topFrontCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a2fe081b16bc2d60a37c69710726e0dab',1,'audio']]],
|
||||
['channel_5ftopfrontleft',['channel_topFrontLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ada5c652fe67eff25745be19bc93e5291',1,'audio']]],
|
||||
['channel_5ftopfrontright',['channel_topFrontRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a3339393250b6745aa5632fb9835a2df0',1,'audio']]],
|
||||
['channel_5ftoprearcenter',['channel_topRearCenter',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108abb811e1091bf90b7cc3659bd374a3b6d',1,'audio']]],
|
||||
['channel_5ftoprearleft',['channel_topRearLeft',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108ad368a68e8c79d7627889887d03463e48',1,'audio']]],
|
||||
['channel_5ftoprearright',['channel_topRearRight',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108af3c37db7a8b58063dd6d8eb9be9664d2',1,'audio']]],
|
||||
['channel_5funknow',['channel_unknow',['http://musicdsp.github.io/audio/namespaceaudio.html#adbb926ec8e7386ccca84761c81dee108a66f6bf970a8dce2cb06bb1cebc89877c',1,'audio']]],
|
||||
['chartreuse',['chartreuse',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a2dd91ed503e594efb3fbfef33e358066',1,'etk::color']]],
|
||||
['check',['check',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#aff7c1fe351fa4470ed728855cc475876',1,'ejson::FilePos']]],
|
||||
['checknumber',['checkNumber',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a02d9bd053052d3fbf4584cfbf1f3c6af',1,'ejson::internal::Value']]],
|
||||
['checkstring',['checkString',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a77c5482f290628b7ed94ffcc683cb86f',1,'ejson::internal::Value']]],
|
||||
['chocolate',['chocolate',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a7c01526863636486a43270680bc60002',1,'etk::color']]],
|
||||
['clean',['clean',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#af8d5cb46bcba3868e9e858a79d3e22cc',1,'etk::Fifo']]],
|
||||
['clear',['clear',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#ac09674009a8d2895eee2ead5d93e94db',1,'etk::FSNodeRight::clear()'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a4e8eb6f69743a44f53aa483acb770dbc',1,'etk::Hash::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a27831faf9d5097224f3c3772d6ea7051',1,'ejson::internal::Array::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#a835d7c2e94175a6a8d3de5a40ffacf8a',1,'ejson::FilePos::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aa8ac667f4da778fd7a71ca9a46f1a6c7',1,'ejson::internal::Object::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a823694a1d241579fc77fc86f46ae303f',1,'ejson::internal::Value::clear()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a3ce2ef5d17d859a51d4146f8ec097fcb',1,'ejson::Value::clear()']]],
|
||||
['clearlowertriangle',['clearLowerTriangle',['http://atria-soft.github.io/etk/namespaceetk.html#a80d4500245f02806cf3397656ed18bb8',1,'etk']]],
|
||||
['clearuppertriangle',['clearUpperTriangle',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a56e65b58426a503e0f55274d813fc307',1,'etk::Matrix']]],
|
||||
['clone',['clone',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a50162f4a4f6d101360fe8820953b4e9c',1,'ejson::internal::Array::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a63b20c27665d74103bdb423c2eeeb6ef',1,'ejson::internal::Boolean::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a2cbb1f91f4017a9d9c14b1f8eef16fd9',1,'ejson::internal::Null::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a46f841d68d34ef99e4b7052fee1e252d',1,'ejson::internal::Number::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0d19856586aec3d128b8101f1492f5d8',1,'ejson::internal::Object::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a904e38c735f77b7b1e04fe9a4f002ce7',1,'ejson::internal::String::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a8932ef5494a96537ec16e1b5768786a3',1,'ejson::internal::Value::clone()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#af66856fee747c1ee0522c4ddc4a1cb6c',1,'ejson::Value::clone()']]],
|
||||
['clonein',['cloneIn',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#af95fec9bdbf1bcb64c11dcdd52789723',1,'ejson::internal::Object']]],
|
||||
['cloneobj',['cloneObj',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a713d7172fb0d1aa0285362345203de0d',1,'ejson::internal::Object']]],
|
||||
['close',['close',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#abda6becefeae5944d4001900d3231475',1,'etk::Archive']]],
|
||||
['closestaxis',['closestAxis',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a4dba6f746de3907deb78b25c4f2d95c5',1,'etk::Vector2D::closestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a4dba6f746de3907deb78b25c4f2d95c5',1,'Vector2D< int32_t >::closestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a4dba6f746de3907deb78b25c4f2d95c5',1,'Vector2D< uint32_t >::closestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a2ea56b698bff0a7286783a170bdd9557',1,'etk::Vector3D::closestAxis()']]],
|
||||
['cofactor',['coFactor',['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a0679dea1b04a02692629b6f4476dc2d9',1,'etk::Matrix4']]],
|
||||
['color',['Color',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a8acf9a5b142e45e8af4ac04b4d5f6212',1,'etk::Color::Color()'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#af6331b1c9e5bf9c3360dfd37abf9aeaa',1,'etk::Color::Color(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b, MY_TYPE _a)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a1859a0fad4cfa6c16c1847b0c33ecadc',1,'etk::Color::Color(MY_TYPE _r, MY_TYPE _g, MY_TYPE _b)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#ae6dfc8f1d5c36d13dbd718786064d59d',1,'etk::Color::Color(MY_TYPE _r, MY_TYPE _g)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#af4af55e64692adf0d54c21cc01fdf41d',1,'etk::Color::Color(MY_TYPE _r)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a9ec115f5d92b4266e44ef22640aa7961',1,'etk::Color::Color(const etk::Color< MY_TYPE_2, MY_TYPE_SIZE_2 > &_obj)'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a76b3a50c125dd0f64632ec33790a7506',1,'etk::Color::Color(const std::string &_input)']]],
|
||||
['color',['Color',['http://atria-soft.github.io/etk/classetk_1_1_color.html',1,'etk']]],
|
||||
['color_2ehpp',['Color.hpp',['http://atria-soft.github.io/etk/__color__8hpp.html',1,'']]],
|
||||
['constpointercast',['constPointerCast',['http://atria-soft.github.io/ememory/namespaceememory.html#aef6978a02a7c6c83cf5913c45271ae16',1,'ememory']]],
|
||||
['convertchar32',['convertChar32',['http://atria-soft.github.io/etk/namespaceutf8.html#ab857b45e0371b7d83a4de8d9e86133fd',1,'utf8']]],
|
||||
['convertutf8',['convertUtf8',['http://atria-soft.github.io/etk/namespaceu32char.html#a9eca2aab7a201251a465410688226a81',1,'u32char']]],
|
||||
['convolution',['convolution',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a1c77336ae8faf6fd48c7573d46a74533',1,'etk::Matrix']]],
|
||||
['coral',['coral',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a36f2cec268c7c0e30723ac23f9b3f277',1,'etk::color']]],
|
||||
['cornflowerblue',['cornflowerBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a90a5242512b4e294b4a660317609f80a',1,'etk::color']]],
|
||||
['cornsilk',['cornsilk',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a253d987094e83f3d979dd8fe216297be',1,'etk::color']]],
|
||||
['count',['count',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#a7d43270207b6da91d535a520e18f49c7',1,'etk::Fifo']]],
|
||||
['counter',['counter',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a1614d672880eb19b18a98ea9babe723ea886bb73b3156b0aa24aac99d2de0b238',1,'ememory::Counter::counter()'],['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a7424b792a2e2b05b228f8e02a10eb9d6',1,'ememory::Counter::Counter(bool _fromWeak=false)']]],
|
||||
['counter',['Counter',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html',1,'ememory']]],
|
||||
['counter_2ehpp',['Counter.hpp',['http://atria-soft.github.io/ememory/__counter__8hpp.html',1,'']]],
|
||||
['countwhitechar',['countWhiteChar',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#aea1b708581f9055dec94efb2a4c243aa',1,'ejson::internal::Value']]],
|
||||
['create',['create',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a53c2f62e0e6cf35b596e9df8074078cf',1,'ejson::internal::Array::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#aa30ca46b99ee7f5fc8ecfceb11ed1480',1,'ejson::internal::Boolean::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a362dc43908dc7e5845b72b24fc392518',1,'ejson::internal::Document::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a120ccdf92ea62f42d8b220404b210636',1,'ejson::internal::Null::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a70e44c0fc76f6e1e56480f289cdeffca',1,'ejson::internal::Number::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aa104cd6df456659f510286d5eecce2ad',1,'ejson::internal::Object::create()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#ad9efead49cb8fcd0fac291c12b39ae3d',1,'ejson::internal::Object::create(const std::string &_data)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a602817bbc7e8c1ade7d5064447203202',1,'ejson::internal::String::create()']]],
|
||||
['createerror',['createError',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a243fe9b55b31a483edb28630d38a1530',1,'ejson::internal::Document']]],
|
||||
['crimson',['crimson',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa29d7ec12725a55399cfbee0fab1d74e',1,'etk::color']]],
|
||||
['cross',['cross',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a06e32e1abb9d69f3338302254eab61dc',1,'etk::Vector2D::cross()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a06e32e1abb9d69f3338302254eab61dc',1,'Vector2D< int32_t >::cross()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a06e32e1abb9d69f3338302254eab61dc',1,'Vector2D< uint32_t >::cross()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a0ac0f11a99ebb6b45605da1d373c4bbd',1,'etk::Vector3D::cross()']]],
|
||||
['cyan',['cyan',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#acc0367018e04ae83f0282525443f2c39',1,'etk::color']]]
|
||||
];
|
26
search/all_3.html
Normal file
26
search/all_3.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_3.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
50
search/all_3.js
Normal file
50
search/all_3.js
Normal file
@ -0,0 +1,50 @@
|
||||
var searchData=
|
||||
[
|
||||
['darkblue',['darkBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a222350bf918f872c4e5ff2c44ab0d948',1,'etk::color']]],
|
||||
['darkcyan',['darkCyan',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1e2298ea2e2329a2eec98014ad2f62f3',1,'etk::color']]],
|
||||
['darkgoldenrod',['darkGoldenRod',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa8fc1bb410a59107158dc78cbff58637',1,'etk::color']]],
|
||||
['darkgray',['darkGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a443370c666ff111e46fd69af0fc8c6f1',1,'etk::color']]],
|
||||
['darkgreen',['darkGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab2c305fa2794088b6518e7d41b5a66cf',1,'etk::color']]],
|
||||
['darkgrey',['darkGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#acc4d6ece51b12c4d71944c7cfa62df3d',1,'etk::color']]],
|
||||
['darkkhaki',['darkKhaki',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a41b7e12409c7c23d2efd5b2002ff8a38',1,'etk::color']]],
|
||||
['darkmagenta',['darkMagenta',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a5967702d70d066cc22d0582816506960',1,'etk::color']]],
|
||||
['darkolivegreen',['darkOliveGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#af8658803a964bae9b55b136f17349fb9',1,'etk::color']]],
|
||||
['darkorange',['darkorange',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a7064c68a6a6025e00ce163a1ae89f1ea',1,'etk::color']]],
|
||||
['darkorchid',['darkOrchid',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1d7683e234cce9679495ba626cdbd63b',1,'etk::color']]],
|
||||
['darkred',['darkRed',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aff3a3b7299b13dfb18983bf5590ba95a',1,'etk::color']]],
|
||||
['darksalmon',['darkSalmon',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a907915b5995bce96b1edce13c9e2fdf7',1,'etk::color']]],
|
||||
['darkseagreen',['darkSeaGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a59822524863f5783ee051ad10375892f',1,'etk::color']]],
|
||||
['darkslateblue',['darkSlateBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a26484af8b6c58f221f1849b87f3bee74',1,'etk::color']]],
|
||||
['darkslategray',['darkSlateGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a349b3fd1e93f89e01bd862981d02196b',1,'etk::color']]],
|
||||
['darkslategrey',['darkSlateGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a50f19e66e3c3a0af908b5c1efd2abc84',1,'etk::color']]],
|
||||
['darkturquoise',['darkTurquoise',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a05e713dcb0b2f4febdbcf35450b841fd',1,'etk::color']]],
|
||||
['darkviolet',['darkViolet',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9e56b9239824d0b5936d5cff3b60231b',1,'etk::color']]],
|
||||
['data',['data',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a1d1dd0c1c1956fad8ab3884bb85723c4',1,'etk::ArchiveContent::data()'],['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a1614d672880eb19b18a98ea9babe723ea8d777f385d3dfec8815d20f7496026dc',1,'ememory::Counter::data()']]],
|
||||
['decreaseref',['decreaseRef',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a3835539a563d971425a4dfe3beb06e05',1,'etk::ArchiveContent']]],
|
||||
['decrementshared',['decrementShared',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#aa28cf4efdddded41d259fa7d3233bf00',1,'ememory::Counter']]],
|
||||
['decrementweak',['decrementWeak',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a7b73b5b5d15ffe2494ff84beca813bd4',1,'ememory::Counter']]],
|
||||
['deeppink',['deepPink',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aad22e4d8159516802b60b3993b35310d',1,'etk::color']]],
|
||||
['deepskyblue',['deepSkyBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a20b4f50841f1edc88b8ebd09764d22ec',1,'etk::color']]],
|
||||
['defaultalpha',['defaultAlpha',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a07823a4af1948cc0c2a80947c634100b',1,'etk::Color']]],
|
||||
['degreetoradian',['degreeToRadian',['http://atria-soft.github.io/etk/namespaceetk.html#aae0bc3aae3180e4cc444264c2b39a9bd',1,'etk']]],
|
||||
['delete',['Delete',['http://atria-soft.github.io/etk/namespaceu32char.html#a55bf46c0555440472df720e2e3b553bf',1,'u32char']]],
|
||||
['determinant',['determinant',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#a6fa058e133e38985460b0a269a9e125e',1,'etk::Matrix2::determinant()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#a17e00a9267a06fca1f68e3782fb07477',1,'etk::Matrix4::determinant()']]],
|
||||
['dimgray',['dimGray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9c3f19c27817d52a7dce663597809673',1,'etk::color']]],
|
||||
['dimgrey',['dimGrey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a1b9159ca54b27a2eb3aef2787cc3f8a4',1,'etk::color']]],
|
||||
['display',['display',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a8bc198e2fda3b1bfe3176ec315e22441',1,'etk::Archive::display()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#adc50a4545b76e6e6401b6d214dd4bf56',1,'ejson::internal::Value::display()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#af897c339ede19f822dac984575d4db50',1,'ejson::Value::display()']]],
|
||||
['displaybacktrace',['displayBacktrace',['http://atria-soft.github.io/elog/namespaceelog.html#aaa54d31e61733c3ed433fe18b7be4dfa',1,'elog']]],
|
||||
['displayerror',['displayError',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a711c39506be33863700750cf3bd08f13',1,'ejson::Document::displayError()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a7cc17fd00e2c685320e30c25be47632c',1,'ejson::internal::Document::displayError()']]],
|
||||
['distance',['distance',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a5bd1fcc61cc48bc939ba3c05df4b1ab6',1,'etk::Vector2D::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a5bd1fcc61cc48bc939ba3c05df4b1ab6',1,'Vector2D< int32_t >::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a5bd1fcc61cc48bc939ba3c05df4b1ab6',1,'Vector2D< uint32_t >::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ad99c7c9a49d1c31b52208147ebcf282e',1,'etk::Vector3D::distance()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#af68bc268b306c2ac6f4f7ad39667dfda',1,'etk::Vector4D::distance()']]],
|
||||
['distance2',['distance2',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ada692f4964568b552ab915cac0c76253',1,'etk::Vector2D::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ada692f4964568b552ab915cac0c76253',1,'Vector2D< int32_t >::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ada692f4964568b552ab915cac0c76253',1,'Vector2D< uint32_t >::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#acddb633c1793ef7b937ce466cae0e6aa',1,'etk::Vector3D::distance2()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a2fad2e152362f4d34ea6aa732af1aa5b',1,'etk::Vector4D::distance2()']]],
|
||||
['document',['Document',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#ad0a4d50152a6001fccac6135c8748802',1,'ejson::Document::Document(ememory::SharedPtr< ejson::internal::Value > _internalValue)'],['http://atria-soft.github.io/ejson/classejson_1_1_document.html#ad4759d3d24556cbb214d59d93ca17b69',1,'ejson::Document::Document(const ejson::Document &_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a67b503c2bfdf8d55a14932976ec4bc32',1,'ejson::Document::Document()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a82822eeeee309ae90e52ebc6bba99d58',1,'ejson::internal::Document::Document()'],['http://atria-soft.github.io/ejson/namespaceejson.html#a6a37b3ae20a2b7bc207b268ab1439709afdc3bdefb79cec8eb8211d2499e04704',1,'ejson::document()']]],
|
||||
['document',['Document',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html',1,'ejson::internal']]],
|
||||
['document',['Document',['http://atria-soft.github.io/ejson/classejson_1_1_document.html',1,'ejson']]],
|
||||
['document_2ehpp',['Document.hpp',['http://atria-soft.github.io/ejson/__document__8hpp.html',1,'(Global Namespace)'],['http://atria-soft.github.io/ejson/internal__2__document__8hpp.html',1,'(Global Namespace)']]],
|
||||
['dodgerblue',['dodgerBlue',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#abded21fe482e526e290b0699c55c1d8d',1,'etk::color']]],
|
||||
['dot',['dot',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aeeac6eb537be0d5017ded4a62cc33b34',1,'etk::Vector2D::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aeeac6eb537be0d5017ded4a62cc33b34',1,'Vector2D< int32_t >::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#aeeac6eb537be0d5017ded4a62cc33b34',1,'Vector2D< uint32_t >::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#ae24ac042b5e2878119cfb6e321daf3bc',1,'etk::Vector3D::dot()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#a54f86ba2bdb634b1c5d6fe1f3cd4846d',1,'etk::Vector4D::dot()']]],
|
||||
['double_5ft',['double_t',['http://musicdsp.github.io/audio/classaudio_1_1double__t.html',1,'audio']]],
|
||||
['double_5ft_2ehpp',['double_t.hpp',['http://musicdsp.github.io/audio/double____t__8hpp.html',1,'']]],
|
||||
['drawelementparsed',['drawElementParsed',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a29acde0ca78e97c8b12d6e9e74c5e168',1,'ejson::internal::Value']]],
|
||||
['duration_2ehpp',['Duration.hpp',['http://musicdsp.github.io/audio/__duration__8hpp.html',1,'']]],
|
||||
['dynamicpointercast',['dynamicPointerCast',['http://atria-soft.github.io/ememory/namespaceememory.html#a0bfb664a1fcc7defd9aa5c8534d33af7',1,'ememory::dynamicPointerCast(ememory::SharedPtr< EMEMORY_TYPE > &_obj)'],['http://atria-soft.github.io/ememory/namespaceememory.html#a5bce20cf9275c6e3f29e6bdb72f1ad97',1,'ememory::dynamicPointerCast(const ememory::SharedPtr< EMEMORY_TYPE > &_obj)']]]
|
||||
];
|
26
search/all_4.html
Normal file
26
search/all_4.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_4.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
27
search/all_4.js
Normal file
27
search/all_4.js
Normal file
@ -0,0 +1,27 @@
|
||||
var searchData=
|
||||
[
|
||||
['archive',['archive',['http://atria-soft.github.io/etk/namespaceetk_1_1archive.html',1,'etk']]],
|
||||
['color',['color',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html',1,'etk']]],
|
||||
['ejson',['ejson',['http://atria-soft.github.io/ejson/namespaceejson.html',1,'']]],
|
||||
['ejson_2ehpp',['ejson.hpp',['http://atria-soft.github.io/ejson/ejson__8hpp.html',1,'']]],
|
||||
['elog',['elog',['http://atria-soft.github.io/elog/namespaceelog.html',1,'']]],
|
||||
['elog_2ehpp',['elog.hpp',['http://atria-soft.github.io/elog/elog__8hpp.html',1,'']]],
|
||||
['elog_20tutorial_3a_20add_20some_20log_20_28using_29',['Elog Tutorial: Add some Log (using)',['http://atria-soft.github.io/elog/elog_tutorial_01.html',1,'']]],
|
||||
['elog_20tutorial_3a_20runtime_20use',['Elog Tutorial: Runtime use',['http://atria-soft.github.io/elog/elog_tutorial_02.html',1,'']]],
|
||||
['elog_20tutorial_3a_20optionnal_20dependency',['Elog Tutorial: Optionnal dependency',['http://atria-soft.github.io/elog/elog_tutorial_03.html',1,'']]],
|
||||
['ememory',['ememory',['http://atria-soft.github.io/ememory/namespaceememory.html',1,'']]],
|
||||
['empty',['empty',['http://atria-soft.github.io/ejson/namespaceejson.html#ab64b51ff08fe0f8b8dd6d83b0a92c9bc',1,'ejson']]],
|
||||
['emptycolor',['emptyColor',['http://atria-soft.github.io/etk/classetk_1_1_color.html#aa0a719b099664934ab1025ecd9a727e0',1,'etk::Color']]],
|
||||
['enablesharedfromthis',['EnableSharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html#aa2c6f76ad44a25cd2c839853a308d5b1',1,'ememory::EnableSharedFromThis']]],
|
||||
['enablesharedfromthis',['EnableSharedFromThis',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this.html',1,'ememory']]],
|
||||
['enablesharedfromthis_2ehpp',['EnableSharedFromThis.hpp',['http://atria-soft.github.io/ememory/__enable__shared__from__this__8hpp.html',1,'']]],
|
||||
['enablesharedfromthisbase',['EnableSharedFromThisBase',['http://atria-soft.github.io/ememory/classememory_1_1_enable_shared_from_this_base.html',1,'ememory']]],
|
||||
['end',['end',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a28d8b49315832357cd8ed69355c23b08',1,'ejson::Array::end()'],['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a8d65e9fb1d84bccad76b81d09962a445',1,'ejson::Array::end() const'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a6efe7ce49560807f6c45aed82beb282f',1,'ejson::Object::end()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a25cb2d48d238e573a3b36ef77d80a2ed',1,'ejson::Object::end() const']]],
|
||||
['escape',['Escape',['http://atria-soft.github.io/etk/namespaceu32char.html#aabc11b96eac4f8821aabf1e8c9b4e68b',1,'u32char']]],
|
||||
['etk',['etk',['http://atria-soft.github.io/etk/namespaceetk.html',1,'']]],
|
||||
['etk_2ehpp',['etk.hpp',['http://atria-soft.github.io/etk/etk__8hpp.html',1,'']]],
|
||||
['exist',['exist',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#aa1fd3f3a8733968d6babe29e5295f439',1,'etk::Archive::exist()'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#adbdbfccfea72e09573ef9fdeec20d0f7',1,'etk::FSNode::exist()'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a159e9cd496432089fccb73e7eaea376f',1,'etk::Hash::exist()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a62b94307e4a86534e2ef879a5dfc3eff',1,'ejson::internal::Object::exist()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a1395a9a11600c8d9d4c0025916d3cb2a',1,'ejson::Value::exist()']]],
|
||||
['expired',['expired',['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a821cf7802a0d9e3b1574e920b8fdefeb',1,'ememory::WeakPtr']]],
|
||||
['internal',['internal',['http://atria-soft.github.io/ejson/namespaceejson_1_1internal.html',1,'ejson']]],
|
||||
['tool',['tool',['http://atria-soft.github.io/etk/namespaceetk_1_1tool.html',1,'etk']]]
|
||||
];
|
26
search/all_5.html
Normal file
26
search/all_5.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_5.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
96
search/all_5.js
Normal file
96
search/all_5.js
Normal file
@ -0,0 +1,96 @@
|
||||
var searchData=
|
||||
[
|
||||
['fifo',['Fifo',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html',1,'etk']]],
|
||||
['fifo',['Fifo',['http://atria-soft.github.io/etk/classetk_1_1_fifo.html#a37abc79759bdbfe9e28b273e600c59f0',1,'etk::Fifo']]],
|
||||
['fifo_2ehpp',['Fifo.hpp',['http://atria-soft.github.io/etk/__fifo__8hpp.html',1,'']]],
|
||||
['fileclose',['fileClose',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a5e9146d1e8984f05221d4dbaa1bcf9b7',1,'etk::FSNode']]],
|
||||
['fileflush',['fileFlush',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a137d6ce15b480ae93926452ed9fdb970',1,'etk::FSNode']]],
|
||||
['fileget',['fileGet',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6c1977929df9d1a8c108de087c3ae876',1,'etk::FSNode']]],
|
||||
['filegetextention',['fileGetExtention',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a468e51069edcaeb8fcc649610f0e4445',1,'etk::FSNode']]],
|
||||
['filegets',['fileGets',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a39af4e62b1edb91776c9c60f5f6b1357',1,'etk::FSNode::fileGets(char *_elementLine, int64_t _maxData)'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a161b49d3946a503212753359211255f2',1,'etk::FSNode::fileGets(std::string &_output)']]],
|
||||
['filehasextention',['fileHasExtention',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6f65abf3d418ab2144c18b3d3f620aba',1,'etk::FSNode']]],
|
||||
['fileisopen',['fileIsOpen',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a66f7d8975d3f6a4c954681dd6ae3e02a',1,'etk::FSNode']]],
|
||||
['fileopenappend',['fileOpenAppend',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a76e77058e7e2a031b57a0662d9333401',1,'etk::FSNode']]],
|
||||
['fileopenread',['fileOpenRead',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ac09fb616871d73603e419aa44bf9eacf',1,'etk::FSNode']]],
|
||||
['fileopenwrite',['fileOpenWrite',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a68cf71c003e9ba37cace50e23870feaa',1,'etk::FSNode']]],
|
||||
['filepos',['FilePos',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html',1,'ejson']]],
|
||||
['filepos',['FilePos',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#ad654116d07a6a29f49bcc6a42be5f718',1,'ejson::FilePos::FilePos()'],['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#afd31dde1dedaa5f5590b944b32a15750',1,'ejson::FilePos::FilePos(size_t _line, size_t _col)']]],
|
||||
['filepos_2ehpp',['FilePos.hpp',['http://atria-soft.github.io/ejson/__file__pos__8hpp.html',1,'']]],
|
||||
['fileput',['filePut',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a4c7e5278cf6b163a1c8ec59c94dbe4db',1,'etk::FSNode']]],
|
||||
['fileputs',['filePuts',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a0bc82fb7cb089dfbe4ed213b64fc64ab',1,'etk::FSNode']]],
|
||||
['fileread',['fileRead',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a72bb0d5702cb0b43de5133cf238704d4',1,'etk::FSNode']]],
|
||||
['filereadall',['fileReadAll',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aab0646087feb6c821cf2756ce79f8702',1,'etk::FSNode']]],
|
||||
['filereadallstring',['fileReadAllString',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a5e8940857bed1b5268cb77c48595168f',1,'etk::FSNode']]],
|
||||
['fileseek',['fileSeek',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6e1033278c99f839709175a77eeebeb5',1,'etk::FSNode']]],
|
||||
['filesize',['fileSize',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a61e074f418b83b53c1b8ee5afd0cce61',1,'etk::FSNode']]],
|
||||
['filetell',['fileTell',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a7bb2d304bc95da4a1016d61cd850cc5a',1,'etk::FSNode']]],
|
||||
['filewrite',['fileWrite',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aa3473eebff7ce59fc5bb5024b035d3e5',1,'etk::FSNode']]],
|
||||
['filewriteall',['fileWriteAll',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ab7861ffd14859cc39fb0b12ceebbcd10',1,'etk::FSNode::fileWriteAll(const std::vector< T > &_value)'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#aa89ddb8a015833889bb9c1943647acad',1,'etk::FSNode::fileWriteAll(const std::string &_value)']]],
|
||||
['firebrick',['fireBrick',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ad6967e9c5889d20d52ba7f02ce1a4344',1,'etk::color']]],
|
||||
['fix',['fix',['http://atria-soft.github.io/etk/classetk_1_1_matrix.html#a2b08925854b289bb5bbbe390a7df2ec5',1,'etk::Matrix']]],
|
||||
['flipx',['flipX',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#ab9d9362f988bd8a1098ab7592d88e5de',1,'etk::Matrix2']]],
|
||||
['flipy',['flipY',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#a6c61fb68ee69bb448ef1829b98b94dce',1,'etk::Matrix2']]],
|
||||
['float_5ft',['float_t',['http://musicdsp.github.io/audio/classaudio_1_1float__t.html',1,'audio']]],
|
||||
['float_5ft_2ehpp',['float_t.hpp',['http://musicdsp.github.io/audio/float____t__8hpp.html',1,'']]],
|
||||
['floralwhite',['floralWhite',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa194136648518d6622f0648b1be32886',1,'etk::color']]],
|
||||
['foldercount',['folderCount',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ad1343533b97b6ced90b9319864db0d5a',1,'etk::FSNode']]],
|
||||
['foldergetparent',['folderGetParent',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a49da9a7c76bf4ccea34c9b82519cdca4',1,'etk::FSNode']]],
|
||||
['foldergetrecursivefiles',['folderGetRecursiveFiles',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a81cf89d3d642aeaf9b4f5aee6bef88ad',1,'etk::FSNode']]],
|
||||
['foldergetsub',['folderGetSub',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ae496271c3d69970b4b0af2539ee535f0',1,'etk::FSNode']]],
|
||||
['foldergetsublist',['folderGetSubList',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a6118d019b41ab1f5d7d95ab5a7bb0101',1,'etk::FSNode::folderGetSubList(bool _showHidenFile=true, bool _getFolderAndOther=true, bool _getFile=true, bool _temporaryFile=true)'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a4f572a50530850032a1a1c289e09379c',1,'etk::FSNode::folderGetSubList(bool _showHidenFile=true, bool _getFolderAndOther=true, bool _getFile=true, const std::string &_filter=".*")']]],
|
||||
['forestgreen',['forestGreen',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ae828702f8dde36254656074f1539cf27',1,'etk::color']]],
|
||||
['format',['format',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cb',1,'audio']]],
|
||||
['format_2ehpp',['format.hpp',['http://musicdsp.github.io/audio/format__8hpp.html',1,'']]],
|
||||
['format_5fdouble',['format_double',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba7349a31609a817e9dce9f131762237bf',1,'audio']]],
|
||||
['format_5ffloat',['format_float',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbad325d82420c80bc087f46a12edfa617a',1,'audio']]],
|
||||
['format_5fint16',['format_int16',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba7ed7669dfdfed5d7ec2626caafbad9d7',1,'audio']]],
|
||||
['format_5fint16_5fon_5fint32',['format_int16_on_int32',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbab679591260a845a089829deb33337636',1,'audio']]],
|
||||
['format_5fint24',['format_int24',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba2dcbf35df01bf028c6edf9ae519bc2d4',1,'audio']]],
|
||||
['format_5fint24_5fon_5fint32',['format_int24_on_int32',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbad3566320cecb817d2b1157c95187fa02',1,'audio']]],
|
||||
['format_5fint32',['format_int32',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbacdb112aff61a792d380f17c8a85123e4',1,'audio']]],
|
||||
['format_5fint32_5fon_5fint64',['format_int32_on_int64',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbaae846080b3a77a320c3e31451422315a',1,'audio']]],
|
||||
['format_5fint64',['format_int64',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cbaf096e0efb61d058a7dc3723c569d41e2',1,'audio']]],
|
||||
['format_5fint8',['format_int8',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba5744831ec66821b80935b78728e09343',1,'audio']]],
|
||||
['format_5fint8_5fon_5fint16',['format_int8_on_int16',['http://musicdsp.github.io/audio/namespaceaudio.html#a2e69fde0e376bc9b0b6fa91fb93105cba32edd87795fa1123c3ffe6b36bd1b6b2',1,'audio']]],
|
||||
['frand',['frand',['http://atria-soft.github.io/etk/namespaceetk_1_1tool.html#a3acc4fd6faa76439bd1651ec86bccd03',1,'etk::tool']]],
|
||||
['from_5fstring',['from_string',['http://atria-soft.github.io/etk/namespaceetk.html#aec3aaa1c735552d02f4eec1fb72c1616',1,'etk']]],
|
||||
['fsnode',['FSNode',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html',1,'etk']]],
|
||||
['fsnode',['FSNode',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a9bd5c806953db1a55e1b0653a5111c7b',1,'etk::FSNode']]],
|
||||
['fsnode_2ehpp',['FSNode.hpp',['http://atria-soft.github.io/etk/__f__s__node__8hpp.html',1,'']]],
|
||||
['fsnodecreate',['FSNodeCreate',['http://atria-soft.github.io/etk/namespaceetk.html#af4adf742ba1e1aaaabce3c26c94405d2',1,'etk']]],
|
||||
['fsnodeecho',['FSNodeEcho',['http://atria-soft.github.io/etk/namespaceetk.html#a95a89a04f30fed73e5656b26b6d3e55b',1,'etk']]],
|
||||
['fsnodeechoadd',['FSNodeEchoAdd',['http://atria-soft.github.io/etk/namespaceetk.html#a014ce8a7311896847cd4978d96410d24',1,'etk']]],
|
||||
['fsnodeexist',['FSNodeExist',['http://atria-soft.github.io/etk/namespaceetk.html#aa5f8ddf464f42564ece7edd83b3e6aa9',1,'etk']]],
|
||||
['fsnodeexplodemultiplepath',['FSNodeExplodeMultiplePath',['http://atria-soft.github.io/etk/namespaceetk.html#a757318b34e8a012b84d49dd291286076',1,'etk']]],
|
||||
['fsnodegetapplicationname',['FSNodeGetApplicationName',['http://atria-soft.github.io/etk/namespaceetk.html#a878a614b55bdc9e5730905dcbf1e7da1',1,'etk']]],
|
||||
['fsnodegetcount',['FSNodeGetCount',['http://atria-soft.github.io/etk/namespaceetk.html#a4da725251cd89ff3e797d4017198ef67',1,'etk']]],
|
||||
['fsnodegetrealname',['FSNodeGetRealName',['http://atria-soft.github.io/etk/namespaceetk.html#a4ef89557d910726f6b5253f11257fc0c',1,'etk']]],
|
||||
['fsnodegetright',['FSNodeGetRight',['http://atria-soft.github.io/etk/namespaceetk.html#a104daf9dd822c992b4e91d219529c0d4',1,'etk']]],
|
||||
['fsnodegettimeaccessed',['FSNodeGetTimeAccessed',['http://atria-soft.github.io/etk/namespaceetk.html#a7a7c80620d52319f98c370913ad6116b',1,'etk']]],
|
||||
['fsnodegettimecreated',['FSNodeGetTimeCreated',['http://atria-soft.github.io/etk/namespaceetk.html#ada8865e7710783f51f2caf3c55727d6a',1,'etk']]],
|
||||
['fsnodegettimemodified',['FSNodeGetTimeModified',['http://atria-soft.github.io/etk/namespaceetk.html#a15a33fbd48325bbee3cc362b1bbd25d0',1,'etk']]],
|
||||
['fsnodegettype',['FSNodeGetType',['http://atria-soft.github.io/etk/namespaceetk.html#aeaa76db5b02d5275ee6faa9240688730',1,'etk']]],
|
||||
['fsnodehistory',['FSNodeHistory',['http://atria-soft.github.io/etk/namespaceetk.html#a2f856fe66d99e595a01861f651194f47',1,'etk']]],
|
||||
['fsnodemove',['FSNodeMove',['http://atria-soft.github.io/etk/namespaceetk.html#adc8c7d89695b20bde7c16279578df6d8',1,'etk']]],
|
||||
['fsnodereadalldata',['FSNodeReadAllData',['http://atria-soft.github.io/etk/namespaceetk.html#acec1246a208ad95518c76ca3de513f40',1,'etk']]],
|
||||
['fsnodereadalldatatype',['FSNodeReadAllDataType',['http://atria-soft.github.io/etk/namespaceetk.html#afc051561490776f836b7da5b81eba290',1,'etk']]],
|
||||
['fsnoderemove',['FSNodeRemove',['http://atria-soft.github.io/etk/namespaceetk.html#ada11ec07c70d723eead76332e040a8e3',1,'etk']]],
|
||||
['fsnoderight',['FSNodeRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a3c12a6fc00f52912713183507c1a3e98',1,'etk::FSNodeRight']]],
|
||||
['fsnoderight',['FSNodeRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html',1,'etk']]],
|
||||
['fsnoderight_2ehpp',['FSNodeRight.hpp',['http://atria-soft.github.io/etk/__f__s__node__right__8hpp.html',1,'']]],
|
||||
['fsnodetouch',['FSNodeTouch',['http://atria-soft.github.io/etk/namespaceetk.html#af86474607a59dd8492c978ec48c015c5',1,'etk']]],
|
||||
['fsnodewritealldata',['FSNodeWriteAllData',['http://atria-soft.github.io/etk/namespaceetk.html#ac9318ff052b5d458ee66c0aaf4021fc2',1,'etk']]],
|
||||
['fsnodewritealldatatype',['FSNodeWriteAllDataType',['http://atria-soft.github.io/etk/namespaceetk.html#ae6e9afde0376252114884445cab1382e',1,'etk']]],
|
||||
['fsntype',['FSNType',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86',1,'etk']]],
|
||||
['fsntype_5fcache',['FSNType_cache',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86a11b6d9f004dfe2dbb0f0936295d96fab',1,'etk']]],
|
||||
['fsntype_5fdata',['FSNType_data',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86a85e888743bc92e15e92cb038180658a8',1,'etk']]],
|
||||
['fsntype_5fdirect',['FSNType_direct',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ab90cc866be4fcb2e6006ec816b2683da',1,'etk']]],
|
||||
['fsntype_5fhome',['FSNType_home',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86aafe2d7ca46505000342694c4526209b6',1,'etk']]],
|
||||
['fsntype_5frelatif',['FSNType_relatif',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ae6596d8a97ab0bdd4775f66089ad894b',1,'etk']]],
|
||||
['fsntype_5ftheme',['FSNType_theme',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ac430963593558fcb3de198c74fc9a63c',1,'etk']]],
|
||||
['fsntype_5fthemedata',['FSNType_themeData',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86ae2fc2115dae24e08f7025f4ac4671dea',1,'etk']]],
|
||||
['fsntype_5funknow',['FSNType_unknow',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86a263b4ecc93b26982d222fd87c3cf12a1',1,'etk']]],
|
||||
['fsntype_5fuserdata',['FSNType_userData',['http://atria-soft.github.io/etk/namespaceetk.html#a661ec570d3bddcc050a21b1c4a421d86aff5b33005b2a7937bec1d9e426e1d9d2',1,'etk']]],
|
||||
['fuchsia',['fuchsia',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#add8be07f05dd9acb1021cd813d5d09f5',1,'etk::color']]],
|
||||
['furthestaxis',['furthestAxis',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a741170b7eeb26c44c932023ce20e6a32',1,'etk::Vector2D::furthestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a741170b7eeb26c44c932023ce20e6a32',1,'Vector2D< int32_t >::furthestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a741170b7eeb26c44c932023ce20e6a32',1,'Vector2D< uint32_t >::furthestAxis()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a22acd16dde9aef7a81555f34f16804d5',1,'etk::Vector3D::furthestAxis()']]]
|
||||
];
|
26
search/all_6.html
Normal file
26
search/all_6.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_6.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
60
search/all_6.js
Normal file
60
search/all_6.js
Normal file
@ -0,0 +1,60 @@
|
||||
var searchData=
|
||||
[
|
||||
['g',['g',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a86e26d2a589c9f714c4cc3871b333be7',1,'etk::Color']]],
|
||||
['gainsboro',['gainsboro',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a9f3802248416e94cbe57301269bb4597',1,'etk::color']]],
|
||||
['generate',['generate',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a81af42d7adbfd3dbc80b3e7ce5ca8f0f',1,'ejson::Document::generate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#aff8f1f1c6923310ed1d877f342a42ceb',1,'ejson::internal::Document::generate()']]],
|
||||
['generatehumanstring',['generateHumanString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a32b6f57d2285fd48302ddd5769e8a86c',1,'ejson::Value']]],
|
||||
['generatemachinestring',['generateMachineString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a6e6ca6afd5d6c9c74817316ef363034c',1,'ejson::Value']]],
|
||||
['get',['get',['http://atria-soft.github.io/etk/classetk_1_1_base_noise.html#aa405241a4a458be6dc3bc331a0cef516',1,'etk::BaseNoise::get()'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a5061b354436f6ef5fc193715ce4d5dab',1,'etk::Color::get() const'],['http://atria-soft.github.io/etk/classetk_1_1_color.html#a04925092def38969bc10afe95bd08f75',1,'etk::Color::get() const'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#ae9f1d4cebc9fc8d6222d7e98829380d4',1,'etk::Hash::get()'],['http://atria-soft.github.io/etk/classetk_1_1_noise.html#a8f3cdb6dfce36df0751cc8e1a50e2456',1,'etk::Noise::get()'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ad4b7eb0326a1d4aac87d2699eb6902cb',1,'ememory::SharedPtr::get() const'],['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#ad0fb9399753ec0125f8456d716203d08',1,'ememory::SharedPtr::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a819f53a44c40f5cfef8dbff666543181',1,'ejson::internal::Array::get(size_t _id)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#afaf7b753a2b219465c179355d5c8e5a6',1,'ejson::internal::Array::get(size_t _id) const'],['http://atria-soft.github.io/ejson/classejson_1_1_boolean.html#a4df842959a4ef730174efdd38e21b55f',1,'ejson::Boolean::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a3480b86ec52e077e65c7bd64390939df',1,'ejson::internal::Boolean::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a6ca533ef245b35a0577e2671d11e340d',1,'ejson::internal::Number::get()'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#afe98a17bc93666be54da54bb5bf1d871',1,'ejson::Number::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a55f787a15c01daa9aee6b549dec328dd',1,'ejson::internal::Object::get(const std::string &_name)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0601ed2ca045dfca2fafe79f1f2e58c7',1,'ejson::internal::Object::get(const std::string &_name) const'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a61f51317cbe74218a660345b03766909',1,'ejson::internal::Object::get(size_t _id)'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#aa0ed760c502bc04bc92507a28b653015',1,'ejson::internal::Object::get(size_t _id) const'],['http://atria-soft.github.io/ejson/classejson_1_1_string.html#ad8fa78302b225c6228ee8d971489726a',1,'ejson::String::get()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a2a4a2b732415499063458a3d1bf7f8b5',1,'ejson::internal::String::get()']]],
|
||||
['getapplicationname',['getApplicationName',['http://atria-soft.github.io/etk/namespaceetk.html#a8cf9a84c6f3effdf8ae0886a8317f85b',1,'etk']]],
|
||||
['getcol',['getCol',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#aac363a503c41bf048cddeb3637d6ffdb',1,'ejson::FilePos']]],
|
||||
['getcontent',['getContent',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a496024ba396746e78ccd6872b633138f',1,'etk::Archive::getContent(size_t _id) const'],['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a2a32911fe1aa9945eac8478924c6ba17',1,'etk::Archive::getContent(const std::string &_key) const']]],
|
||||
['getcount',['getCount',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#ab57beaaee59c31438823a29fb24d4707',1,'ememory::Counter']]],
|
||||
['getcounter',['getCounter',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#af3de746aec06d5e39d14b32085d37a8b',1,'ememory::SharedPtr::getCounter()'],['http://atria-soft.github.io/ememory/classememory_1_1_weak_ptr.html#a49bd7ef3006354416097d9d741ad8bdd',1,'ememory::WeakPtr::getCounter()']]],
|
||||
['getcountshared',['getCountShared',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a819fefc93965f5da013dd5f809471288',1,'ememory::Counter']]],
|
||||
['getcountweak',['getCountWeak',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#ab059494abe4d8600369dd10ca8cf0f66',1,'ememory::Counter']]],
|
||||
['getdatavector',['getDataVector',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#aee51637347bcb52ea8ce0c7233db928d',1,'etk::ArchiveContent']]],
|
||||
['getdeleter',['getDeleter',['http://atria-soft.github.io/ememory/classememory_1_1_shared_ptr.html#a20c3bc26755a4917c2ce1641aa2e1925',1,'ememory::SharedPtr']]],
|
||||
['getdisplayerror',['getDisplayError',['http://atria-soft.github.io/ejson/classejson_1_1_document.html#a83b22672e2723fa1dd6fa8dfa3104382',1,'ejson::Document::getDisplayError()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#a1631cb019d5a45ff124d83b54c7a9679',1,'ejson::internal::Document::getDisplayError()']]],
|
||||
['getdistance',['getDistance',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#aa63645925f576389fc111737c1f6af30',1,'etk::Plane']]],
|
||||
['getfilename',['getFileName',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#abcd2958b8df98c6f3841dc20b934a26b',1,'etk::Archive']]],
|
||||
['getfilesystemname',['getFileSystemName',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ad3e7ec360ef0d80feed64edd1e43429b',1,'etk::FSNode']]],
|
||||
['gethexstring',['getHexString',['http://atria-soft.github.io/etk/classetk_1_1_color.html#a1d7163026eda896df01c92924c19641d',1,'etk::Color']]],
|
||||
['geti64',['getI64',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a3a8e9d49dab452986af331f0115f16f3',1,'ejson::internal::Number::getI64()'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a59dafdcafd077fa203646c44ed95dc5a',1,'ejson::Number::getI64()']]],
|
||||
['getid',['getId',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#adb138427203bbe63b6ab41e19ed33a6b',1,'etk::Hash::getId()'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#a5a388a51dd8123064f7390fcf9c75969',1,'ejson::iterator::getId()']]],
|
||||
['getintercept',['getIntercept',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#ac701a8e4aae7df5874e1e97658703c7f',1,'etk::Plane']]],
|
||||
['getkey',['getKey',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#af2068c84a2a91241eb8a59402724a7b6',1,'etk::Hash::getKey()'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#a8cc474c5f856eb2b67a2a6756767a745',1,'ejson::iterator::getKey()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a2baac0d0e67e8f3e65896e9769aedb85',1,'ejson::internal::Object::getKey()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#a4b50dca7a6821017f1f87392cfc20d10',1,'ejson::Object::getKey()']]],
|
||||
['getkeys',['getKeys',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a31119d35657cb2e0798f58917b51d5c1',1,'etk::Hash::getKeys()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a0d1a7d19470b497aa89d0d63b1d18a38',1,'ejson::internal::Object::getKeys()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#ab8b6dc5982584d46780b454b521427f5',1,'ejson::Object::getKeys()']]],
|
||||
['getlevel',['getLevel',['http://atria-soft.github.io/elog/namespaceelog.html#a31cfb5b0fcaba634b18b0c886e728b44',1,'elog']]],
|
||||
['getline',['getLine',['http://atria-soft.github.io/ejson/classejson_1_1_file_pos.html#a7ced45d7ccbfc3d2349025ba871e1e66',1,'ejson::FilePos']]],
|
||||
['getlistinstance',['getListInstance',['http://atria-soft.github.io/elog/namespaceelog.html#a08110480947e6d682ad69b5b4a4d18d5',1,'elog']]],
|
||||
['getname',['getName',['http://atria-soft.github.io/etk/classetk_1_1_archive.html#a9da33ff502b21d05d6217963fe3246d4',1,'etk::Archive::getName()'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a0cd7ffd53fa3bc5e3654109509da15f7',1,'etk::FSNode::getName()']]],
|
||||
['getnamefile',['getNameFile',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a047391b0333908c886ee0c53e12dec82',1,'etk::FSNode']]],
|
||||
['getnamefolder',['getNameFolder',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a0c51598f0293cc347ed44d062f7374e1',1,'etk::FSNode']]],
|
||||
['getnodetype',['getNodeType',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a86038b56fd2349317459c1ce4a58a788',1,'etk::FSNode']]],
|
||||
['getnormal',['getNormal',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#ab17849e22fddbc55964ef2990818e2a6',1,'etk::Plane']]],
|
||||
['getnumberofref',['getNumberOfRef',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#ae36e16fc3d90ee3b996f88b21770b7c3',1,'etk::ArchiveContent']]],
|
||||
['getpos',['getPos',['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a491dfde52d1bb01bd284ddda702fac61',1,'utf8::iterator']]],
|
||||
['getrelativefolder',['getRelativeFolder',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a596be9f5161b36379271158623e7f0f8',1,'etk::FSNode']]],
|
||||
['getright',['getRight',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#ab757b8663591a87ae61ddbb0b69eff89',1,'etk::FSNode::getRight()'],['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#ab3efc8325268838bb13695592804df2e',1,'etk::FSNodeRight::getRight()']]],
|
||||
['getskewsymmetricmatrix',['getSkewSymmetricMatrix',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#afccc043ebc6b0ebfbfaba8b5bc339a63',1,'etk::Vector3D']]],
|
||||
['getstring',['getString',['http://atria-soft.github.io/etk/classetk_1_1_color.html#aa26efcdf5bb7dacc02d211b6fea63d4d',1,'etk::Color']]],
|
||||
['gettheoricsize',['getTheoricSize',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#a3073080dc08423e6801bce2767a6c6b8',1,'etk::ArchiveContent']]],
|
||||
['gettype',['getType',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#abf21ef5171078e53637f6b708c96aa07',1,'ejson::internal::Value::getType()'],['http://atria-soft.github.io/ejson/classejson_1_1_value.html#abc2ff4ed6b3178ecbb771c0ad26f7ae4',1,'ejson::Value::getType()']]],
|
||||
['gettypeaccess',['getTypeAccess',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node.html#a5f0c2f85b19d025bd113c62884230784',1,'etk::FSNode']]],
|
||||
['getu64',['getU64',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#af31797173219ea00db28476ddbf43fc6',1,'ejson::internal::Number::getU64()'],['http://atria-soft.github.io/ejson/classejson_1_1_number.html#a8d9d2a95d2b6d29f1c8e4ab8f717f768',1,'ejson::Number::getU64()']]],
|
||||
['getuserhomefolder',['getUserHomeFolder',['http://atria-soft.github.io/etk/namespaceetk.html#afa745063a5cc6f651f1245a1ff7ca3c1',1,'etk']]],
|
||||
['getuserrunfolder',['getUserRunFolder',['http://atria-soft.github.io/etk/namespaceetk.html#a7a3491e777d456c9ddd6871e0f7ffdfc',1,'etk']]],
|
||||
['getvalue',['getValue',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a650bf5f92fe0580e9d79793816adc3eb',1,'etk::Hash::getValue(size_t _pos) const'],['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a041e5ec334a0ff90fc4f3590e5ab7c81',1,'etk::Hash::getValue(size_t _pos)']]],
|
||||
['getw',['getW',['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#acb9970685f257e57eae8271a07301d62',1,'etk::Vector4D']]],
|
||||
['getx',['getX',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a34206a690fdbfd8bcfabb4096dd1aa49',1,'etk::Vector2D::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a34206a690fdbfd8bcfabb4096dd1aa49',1,'Vector2D< int32_t >::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a34206a690fdbfd8bcfabb4096dd1aa49',1,'Vector2D< uint32_t >::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a942d2907bf18905524de5a76d2bf3552',1,'etk::Vector3D::getX()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#acf3e239c49dba1a92083568187e6fefa',1,'etk::Vector4D::getX()']]],
|
||||
['gety',['getY',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a581d4dc0c67a2c029d20eac1d41c357f',1,'etk::Vector2D::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a581d4dc0c67a2c029d20eac1d41c357f',1,'Vector2D< int32_t >::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#a581d4dc0c67a2c029d20eac1d41c357f',1,'Vector2D< uint32_t >::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a17e7b662cee12b1d508dbba297ee6485',1,'etk::Vector3D::getY()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#aca1a2ad671bed213e0d02161e157ee5b',1,'etk::Vector4D::getY()']]],
|
||||
['getz',['getZ',['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a53d7e035a9a16535cd1b6f4a669550d5',1,'etk::Vector3D::getZ()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#aef2107e67a6470570b5138c41ac057f0',1,'etk::Vector4D::getZ()']]],
|
||||
['ghostwhite',['ghostWhite',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a15bfc067a56f04e3c95ccc1e08e30582',1,'etk::color']]],
|
||||
['gold',['gold',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa87df42bc06ea637f36058ded83172b8',1,'etk::color']]],
|
||||
['goldenrod',['goldenRod',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab3e32a2d70fbe57ccbd45b490b32dfc0',1,'etk::color']]],
|
||||
['gray',['gray',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a319c23dcc37291f96f330abe15b16f89',1,'etk::color']]],
|
||||
['green',['green',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a6fc96147de6d001202802bca7bcf2ba9',1,'etk::color']]],
|
||||
['greenyellow',['greenYellow',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a218efa62696750857b5ce07171c34cbd',1,'etk::color']]],
|
||||
['grey',['grey',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a21d8358e48a38d1d701d2165e9ff7ef3',1,'etk::color']]]
|
||||
];
|
26
search/all_7.html
Normal file
26
search/all_7.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_7.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
11
search/all_7.js
Normal file
11
search/all_7.js
Normal file
@ -0,0 +1,11 @@
|
||||
var searchData=
|
||||
[
|
||||
['hash',['Hash',['http://atria-soft.github.io/etk/classetk_1_1_hash.html',1,'etk']]],
|
||||
['hash',['Hash',['http://atria-soft.github.io/etk/classetk_1_1_hash.html#a2a2399e884a1a61be01ee702d90514db',1,'etk::Hash']]],
|
||||
['hash_2ehpp',['Hash.hpp',['http://atria-soft.github.io/etk/__hash__8hpp.html',1,'']]],
|
||||
['hash_3c_20ememory_3a_3asharedptr_3c_20ejson_3a_3ainternal_3a_3aejson_3a_3ainternal_3a_3avalue_20_3e_20_3e',['Hash< ememory::SharedPtr< ejson::internal::ejson::internal::Value > >',['http://atria-soft.github.io/etk/classetk_1_1_hash.html',1,'etk']]],
|
||||
['hashdata',['HashData',['http://atria-soft.github.io/etk/classetk_1_1_hash_data.html#a37d8c4248a9d4d6f8df173d0f87469ee',1,'etk::HashData']]],
|
||||
['hashdata',['HashData',['http://atria-soft.github.io/etk/classetk_1_1_hash_data.html',1,'etk']]],
|
||||
['honeydew',['honeyDew',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#aa3411f95075bfc9977619fcea76266de',1,'etk::color']]],
|
||||
['hotpink',['hotPink',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a03118a731faf900b1bec48f3b001a8dd',1,'etk::color']]]
|
||||
];
|
26
search/all_8.html
Normal file
26
search/all_8.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_8.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
59
search/all_8.js
Normal file
59
search/all_8.js
Normal file
@ -0,0 +1,59 @@
|
||||
var searchData=
|
||||
[
|
||||
['identity',['identity',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#af472afddc7b5574eea3f6a4f9b0524f5',1,'etk::Matrix2::identity()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#af2b709691e4d6dd41ed54572794ab2a2',1,'etk::Matrix4::identity()']]],
|
||||
['igenerate',['iGenerate',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#af7a3f104edaf3c204b5d4bb0351f3091',1,'ejson::internal::Array::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a6f3017156677066edd1dd16e116f847e',1,'ejson::internal::Boolean::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#aa4e1d9131daa8f8d31f2158c28533f42',1,'ejson::internal::Document::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#af15e9a549981dcd6c6ef8f2533270831',1,'ejson::internal::Null::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a695f6d4c2cd6784d208bb122e7c66e3d',1,'ejson::internal::Number::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a321803d73333a459417c3885c082371c',1,'ejson::internal::Object::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#aa00abbe02b10d73793fdc65cce230f2e',1,'ejson::internal::String::iGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a9b3c575fa6012346ea95c9205c0e2a2a',1,'ejson::internal::Value::iGenerate()']]],
|
||||
['imachinegenerate',['iMachineGenerate',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a63b1e6dcbd879e53149e8011636c16d7',1,'ejson::internal::Array::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a572fc850496130c8b37e906fbc2cd551',1,'ejson::internal::Boolean::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a414f4acc6280835fc4c061a2b1636cf9',1,'ejson::internal::Null::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#ad267b2c9ae75979ba33940578fcc537e',1,'ejson::internal::Number::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a8c354d4901c0682190ef1e420b688da0',1,'ejson::internal::Object::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#aa58fa0a547c601df0fc6e02b34a78ed0',1,'ejson::internal::String::iMachineGenerate()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a50009da862f5e689463843d4dced4350',1,'ejson::internal::Value::iMachineGenerate()']]],
|
||||
['increaseref',['increaseRef',['http://atria-soft.github.io/etk/classetk_1_1_archive_content.html#abe8b416a3f6e5631e16560253ad4191b',1,'etk::ArchiveContent']]],
|
||||
['incrementshared',['incrementShared',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a99aef3a1f476e47bc9e2ccaed0cd0f7b',1,'ememory::Counter']]],
|
||||
['incrementweak',['incrementWeak',['http://atria-soft.github.io/ememory/classememory_1_1_counter.html#a93aa2424f0ce29942ec95f486166ee46',1,'ememory::Counter']]],
|
||||
['indianred',['indianRed',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a13e4d0783eb7e8c10ca87631e5385dcb',1,'etk::color']]],
|
||||
['indigo',['indigo',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#a3a93b5498bb8c81d57e7a759d1418579',1,'etk::color']]],
|
||||
['init',['init',['http://atria-soft.github.io/elog/namespaceelog.html#a1005ac82c94e09b499d29b70a98cd5cc',1,'elog::init()'],['http://atria-soft.github.io/etk/namespaceetk.html#aa87d94d7a27bd41c9982fe0ba83d6f88',1,'etk::init()']]],
|
||||
['initdefaultfolder',['initDefaultFolder',['http://atria-soft.github.io/etk/namespaceetk.html#af5156cd13050789ca79157400805b04e',1,'etk']]],
|
||||
['int16_5f16_5ft',['int16_16_t',['http://musicdsp.github.io/audio/classaudio_1_1int16__16__t.html',1,'audio']]],
|
||||
['int16_5f16_5ft_2ehpp',['int16_16_t.hpp',['http://musicdsp.github.io/audio/int16____16____t__8hpp.html',1,'']]],
|
||||
['int16_5f32_5ft',['int16_32_t',['http://musicdsp.github.io/audio/classaudio_1_1int16__32__t.html',1,'audio']]],
|
||||
['int16_5f32_5ft_2ehpp',['int16_32_t.hpp',['http://musicdsp.github.io/audio/int16____32____t__8hpp.html',1,'']]],
|
||||
['int24_5f24_5ft',['int24_24_t',['http://musicdsp.github.io/audio/classaudio_1_1int24__24__t.html',1,'audio']]],
|
||||
['int24_5f24_5ft_2ehpp',['int24_24_t.hpp',['http://musicdsp.github.io/audio/int24____24____t__8hpp.html',1,'']]],
|
||||
['int24_5f32_5ft',['int24_32_t',['http://musicdsp.github.io/audio/classaudio_1_1int24__32__t.html',1,'audio']]],
|
||||
['int24_5f32_5ft_2ehpp',['int24_32_t.hpp',['http://musicdsp.github.io/audio/int24____32____t__8hpp.html',1,'']]],
|
||||
['int32_5f32_5ft',['int32_32_t',['http://musicdsp.github.io/audio/classaudio_1_1int32__32__t.html',1,'audio']]],
|
||||
['int32_5f32_5ft_2ehpp',['int32_32_t.hpp',['http://musicdsp.github.io/audio/int32____32____t__8hpp.html',1,'']]],
|
||||
['int32_5f64_5ft',['int32_64_t',['http://musicdsp.github.io/audio/classaudio_1_1int32__64__t.html',1,'audio']]],
|
||||
['int32_5f64_5ft_2ehpp',['int32_64_t.hpp',['http://musicdsp.github.io/audio/int32____64____t__8hpp.html',1,'']]],
|
||||
['int64_5f64_5ft',['int64_64_t',['http://musicdsp.github.io/audio/classaudio_1_1int64__64__t.html',1,'audio']]],
|
||||
['int64_5f64_5ft_2ehpp',['int64_64_t.hpp',['http://musicdsp.github.io/audio/int64____64____t__8hpp.html',1,'']]],
|
||||
['int8_5f16_5ft',['int8_16_t',['http://musicdsp.github.io/audio/classaudio_1_1int8__16__t.html',1,'audio']]],
|
||||
['int8_5f16_5ft_2ehpp',['int8_16_t.hpp',['http://musicdsp.github.io/audio/int8____16____t__8hpp.html',1,'']]],
|
||||
['int8_5f8_5ft',['int8_8_t',['http://musicdsp.github.io/audio/classaudio_1_1int8__8__t.html',1,'audio']]],
|
||||
['int8_5f8_5ft_2ehpp',['int8_8_t.hpp',['http://musicdsp.github.io/audio/int8____8____t__8hpp.html',1,'']]],
|
||||
['intersect3',['intersect3',['http://atria-soft.github.io/etk/classetk_1_1_plane.html#abc2a4dffb33f88c073d03799a81a902e',1,'etk::Plane']]],
|
||||
['invert',['invert',['http://atria-soft.github.io/etk/classetk_1_1_matrix2.html#ae03bbf1ff6f750e3ecd5ad556b771c4e',1,'etk::Matrix2::invert()'],['http://atria-soft.github.io/etk/classetk_1_1_matrix4.html#adfc631d9817a7ac82d12c243fe52fb93',1,'etk::Matrix4::invert()']]],
|
||||
['iparse',['iParse',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_array.html#a7fb8c36221de05354e6a292e68c87032',1,'ejson::internal::Array::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_boolean.html#a5369a1555b6d67c0f1ffa359755c4d76',1,'ejson::internal::Boolean::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_document.html#ab2f6be19864c8054e21cf201c619a132',1,'ejson::internal::Document::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_null.html#a2f42e4d809bb43ef1c0ab6dc20474bda',1,'ejson::internal::Null::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_number.html#a6515a25cc751732ee51b6967a26079af',1,'ejson::internal::Number::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_object.html#a618760d6e0abc4a8f2977d8688cdd127',1,'ejson::internal::Object::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_string.html#a15b9755e6a3599d449af196d2596164f',1,'ejson::internal::String::iParse()'],['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a77c4f471e2c584870cffbf230fdbb60e',1,'ejson::internal::Value::iParse()']]],
|
||||
['irand',['irand',['http://atria-soft.github.io/etk/namespaceetk_1_1tool.html#a50bc6947ba9add861cd3096d9034effa',1,'etk::tool']]],
|
||||
['isarray',['isArray',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ac768fc4eca4b99d889f755ce06f4ad79',1,'ejson::Value']]],
|
||||
['isboolean',['isBoolean',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ac04e5417c337d52be790689f33e4d81c',1,'ejson::Value']]],
|
||||
['isdocument',['isDocument',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a34e2e48b1ea92a22497d05a65a1e9e40',1,'ejson::Value']]],
|
||||
['isgroupreadable',['isGroupReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a453329fabaebc6c6cce4eadc0a2e49b7',1,'etk::FSNodeRight']]],
|
||||
['isgrouprunable',['isGroupRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a7a76ff5576933a63d759b326a74933a7',1,'etk::FSNodeRight']]],
|
||||
['isgroupwritable',['isGroupWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a4a275b98275492aa30a909b1a6f9e325',1,'etk::FSNodeRight']]],
|
||||
['isnull',['isNull',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a282219883a584c153c4fcbdf783d8846',1,'ejson::Value']]],
|
||||
['isnumber',['isNumber',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a0b39e6b79a9a7b4b9a0e608ff7fefc71',1,'ejson::Value']]],
|
||||
['isobject',['isObject',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#ab35590bc759b959b03582b0d107b5cd7',1,'ejson::Value']]],
|
||||
['isotherreadable',['isOtherReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#af7fbdac5122f7ebf65a32651b9cf620e',1,'etk::FSNodeRight']]],
|
||||
['isotherrunable',['isOtherRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a0553403781de313a3a60cb08a917263c',1,'etk::FSNodeRight']]],
|
||||
['isotherwritable',['isOtherWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a5edec7678e987c70177a60097d762981',1,'etk::FSNodeRight']]],
|
||||
['isspecialchar',['isSpecialChar',['http://atria-soft.github.io/etk/namespaceu32char.html#a408c8318f6077bfeeb94efa12d48e60f',1,'u32char']]],
|
||||
['isstring',['isString',['http://atria-soft.github.io/ejson/classejson_1_1_value.html#a59e1df205a555e6486faeedee593813a',1,'ejson::Value']]],
|
||||
['isuserreadable',['isUserReadable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#a6798f0adb3c79d279c8dfefdbeae0531',1,'etk::FSNodeRight']]],
|
||||
['isuserrunable',['isUserRunable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#aa660aeb3b884f571b06019e02a5ba438',1,'etk::FSNodeRight']]],
|
||||
['isuserwritable',['isUserWritable',['http://atria-soft.github.io/etk/classetk_1_1_f_s_node_right.html#aa0ca67ebdf5fb0ca97836df70180f8da',1,'etk::FSNodeRight']]],
|
||||
['iswhitechar',['isWhiteChar',['http://atria-soft.github.io/ejson/classejson_1_1internal_1_1_value.html#a5028f3c0c9cf5645e2ec870394450640',1,'ejson::internal::Value::isWhiteChar()'],['http://atria-soft.github.io/etk/namespaceu32char.html#a7ffdd433efbedf5bed193e9d9df7eb6d',1,'u32char::isWhiteChar()']]],
|
||||
['iszero',['isZero',['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab36e9267a66745c77199482284bb8a40',1,'etk::Vector2D::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab36e9267a66745c77199482284bb8a40',1,'Vector2D< int32_t >::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector2_d.html#ab36e9267a66745c77199482284bb8a40',1,'Vector2D< uint32_t >::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector3_d.html#a5a2d0c1a587adb016eaf70aa3458c10d',1,'etk::Vector3D::isZero()'],['http://atria-soft.github.io/etk/classetk_1_1_vector4_d.html#ad5ed6c2d0564a9a165147006d891e3d6',1,'etk::Vector4D::isZero()']]],
|
||||
['iterator',['iterator',['http://atria-soft.github.io/ejson/classejson_1_1iterator.html',1,'ejson']]],
|
||||
['iterator',['iterator',['http://atria-soft.github.io/ejson/classejson_1_1_array.html#a8e0a515f9678646817a420e22f2f9f98',1,'ejson::Array::iterator()'],['http://atria-soft.github.io/ejson/classejson_1_1_object.html#ac4d2852ae98791af26abe9471a7743a3',1,'ejson::Object::iterator()'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#aebb30cce96db460dffdb275170a979cb',1,'utf8::iterator::iterator()'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#ad640e78bef39d56b5282e8a9011c0d59',1,'utf8::iterator::iterator(std::string &_str)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a2676d3eba675ecfa0f789ba15e7335d7',1,'utf8::iterator::iterator(std::string &_str, const std::string::iterator &_pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a7f0ab43734e7324ad6c01c143d35a26a',1,'utf8::iterator::iterator(std::string &_str, size_t _pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a627ca7ef0ee43bf15445b4b29a775d2e',1,'utf8::iterator::iterator(std::string *_str, const std::string::iterator &_pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#a92e5ead9e0b57f889a635306c7e7b6fe',1,'utf8::iterator::iterator(std::string *_str, size_t _pos)'],['http://atria-soft.github.io/etk/classutf8_1_1iterator.html#af9610f601ab0d2729b235f0ec4204ff1',1,'utf8::iterator::iterator(const iterator &_obj)'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#a67eda9f172a4402672c4d3e5b77499dc',1,'ejson::iterator::iterator(EJSON_BASE_T &_obj, size_t _pos)'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#ab9f2e2ac7424683b4df07ce2b2c68ee2',1,'ejson::iterator::iterator(const EJSON_BASE_T &_obj, size_t _pos)'],['http://atria-soft.github.io/ejson/classejson_1_1iterator.html#adc41c1d4e113d4a4482a9e7c39e86ddb',1,'ejson::iterator::iterator(const iterator &_obj)']]],
|
||||
['iterator',['iterator',['http://atria-soft.github.io/etk/classutf8_1_1iterator.html',1,'utf8']]],
|
||||
['iterator_2ehpp',['iterator.hpp',['http://atria-soft.github.io/ejson/iterator__8hpp.html',1,'']]],
|
||||
['ivory',['ivory',['http://atria-soft.github.io/etk/namespaceetk_1_1color.html#ab44bec9b6c9231236729f749df94c7ba',1,'etk::color']]]
|
||||
];
|
26
search/all_9.html
Normal file
26
search/all_9.html
Normal file
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html><head><title></title>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta name="generator" content="Doxygen 1.8.12"/>
|
||||
<link rel="stylesheet" type="text/css" href="search.css"/>
|
||||
<script type="text/javascript" src="all_9.js"></script>
|
||||
<script type="text/javascript" src="search.js"></script>
|
||||
</head>
|
||||
<body class="SRPage">
|
||||
<div id="SRIndex">
|
||||
<div class="SRStatus" id="Loading">Loading...</div>
|
||||
<div id="SRResults"></div>
|
||||
<script type="text/javascript"><!--
|
||||
createResults();
|
||||
--></script>
|
||||
<div class="SRStatus" id="Searching">Searching...</div>
|
||||
<div class="SRStatus" id="NoMatches">No Matches</div>
|
||||
<script type="text/javascript"><!--
|
||||
document.getElementById("Loading").style.display="none";
|
||||
document.getElementById("NoMatches").style.display="none";
|
||||
var searchResults = new SearchResults("searchResults");
|
||||
searchResults.Search();
|
||||
--></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user