LUMIERA.clone/src/backend/engine/engine-config.h

108 lines
3.4 KiB
C++

/*
ENGINE-CONFIG.h - access point to any kind of engine configuration parameters
Copyright (C) Lumiera.org
2013, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef BACKEND_ENGINE_ENGINE_CONFIG_H
#define BACKEND_ENGINE_ENGINE_CONFIG_H
#include "lib/time.h"
#ifdef __cplusplus /* ============== C++ Interface ================= */
#include "lib/time/timevalue.hpp"
#include "lib/singleton.hpp"
namespace backend{
namespace engine {
using lib::time::Duration;
/**
* Point of access for any kind of engine configuration, setup and performance tweaks.
* Most of these parameters are derived from static system configuration or more focused
* configuration settings within the session, but some values will be updated \em live
* as a result of engine self monitoring. The user of this interface remains unaware
* of this distinction. There is a sub interface (TODO planned 1/2013) for publishing
* statistics changes and monitoring information.
*
* @note while this interface \em exposes configuration, it is decoupled from
* any concerns regarding session and configuration representation.
*
* @todo WIP-WIP as of 1/2013
* @todo anything regarding configuration and session storage
* @todo find out about the degree of locking required. Right now (1/13), there
* is no locking and all values are hard coded. It is conceivable to implement
* the \em access in a lock-free manner (by loosening any guarantee regarding
* the actual time point when a changed setting becomes visible)
*/
class EngineConfig
{
EngineConfig();
~EngineConfig();
friend class lib::singleton::StaticCreate<EngineConfig>;
public:
/** access point to the Engine Interface.
* @internal this is an facade interface for internal use
* by the player. Client code should use the Player.
*/
static lib::Singleton<EngineConfig> get;
//////////////////////////////////////////////////////////////////// TODO: find out about required configuration and tweaking values
/** reasonable guess of the current engine working delay.
* This is the latency to expect when requesting the calculation
* of a typical and average data frame, based on self observation
* in the recent past
* @todo hard wired value as of 1/2013
*/
Duration currentEngineLatency() const;
};
}} // namespace backend::engine
extern "C" {
#endif /* =========================== CL Interface ===================== */
/** guess of the current effective engine calculation delay */
gavl_time_t lumiera_engine_get_latency ();
#ifdef __cplusplus
}
#endif
#endif/*BACKEND_ENGINE_ENGINE_CONFIG_H*/