/* Simple Plugin API */
/* SPDX-FileCopyrightText: Copyright © 2018 Wim Taymans */
/* SPDX-License-Identifier: MIT */

#ifndef SPA_PARAM_PROPS_H
#define SPA_PARAM_PROPS_H

#include <spa/param/param.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * \addtogroup spa_param
 * \{
 */

/** properties of SPA_TYPE_OBJECT_PropInfo */
enum spa_prop_info {
	SPA_PROP_INFO_START,
	SPA_PROP_INFO_id,		/**< associated id of the property */
	SPA_PROP_INFO_name,		/**< name of the property */
	SPA_PROP_INFO_type,		/**< type and range/enums of property */
	SPA_PROP_INFO_labels,		/**< labels of property if any, this is a
					  *  struct with pairs of values, the first one
					  *  is of the type of the property, the second
					  *  one is a string with a user readable label
					  *  for the value. */
	SPA_PROP_INFO_container,	/**< type of container if any (Id) */
	SPA_PROP_INFO_params,		/**< is part of params property (Bool) */
	SPA_PROP_INFO_description,	/**< User readable description */
};

/** predefined properties for SPA_TYPE_OBJECT_Props */
enum spa_prop {
	SPA_PROP_START,

	SPA_PROP_unknown,		/**< an unknown property */

	SPA_PROP_START_Device	= 0x100,	/**< device related properties */
	SPA_PROP_device,
	SPA_PROP_deviceName,
	SPA_PROP_deviceFd,
	SPA_PROP_card,
	SPA_PROP_cardName,

	SPA_PROP_minLatency,
	SPA_PROP_maxLatency,
	SPA_PROP_periods,
	SPA_PROP_periodSize,
	SPA_PROP_periodEvent,
	SPA_PROP_live,
	SPA_PROP_rate,
	SPA_PROP_quality,
	SPA_PROP_bluetoothAudioCodec,
	SPA_PROP_bluetoothOffloadActive,
	SPA_PROP_clockId,
	SPA_PROP_clockDevice,
	SPA_PROP_clockInterface,

	SPA_PROP_START_Audio	= 0x10000,	/**< audio related properties */
	SPA_PROP_waveType,
	SPA_PROP_frequency,
	SPA_PROP_volume,			/**< a volume (Float), 0.0 silence, 1.0 no attenutation */
	SPA_PROP_mute,				/**< mute (Bool) */
	SPA_PROP_patternType,
	SPA_PROP_ditherType,
	SPA_PROP_truncate,
	SPA_PROP_channelVolumes,		/**< a volume array, one (linear) volume per channel
						  * (Array of Float). 0.0 is silence, 1.0 is
						  *  without attenuation. This is the effective
						  *  volume that is applied. It can result
						  *  in a hardware volume and software volume
						  *  (see softVolumes) */
	SPA_PROP_volumeBase,			/**< a volume base (Float) */
	SPA_PROP_volumeStep,			/**< a volume step (Float) */
	SPA_PROP_channelMap,			/**< a channelmap array
						  * (Array (Id enum spa_audio_channel)) */
	SPA_PROP_monitorMute,			/**< mute (Bool) */
	SPA_PROP_monitorVolumes,		/**< a volume array, one (linear) volume per
						  *  channel (Array of Float) */
	SPA_PROP_latencyOffsetNsec,		/**< delay adjustment */
	SPA_PROP_softMute,			/**< mute (Bool) applied in software */
	SPA_PROP_softVolumes,			/**< a volume array, one (linear) volume per channel
						  * (Array of Float). 0.0 is silence, 1.0 is without
						  * attenuation. This is the volume applied in
						  * software, there might be a part applied in
						  * hardware. */

	SPA_PROP_iec958Codecs,			/**< enabled IEC958 (S/PDIF) codecs,
						  *  (Array (Id enum spa_audio_iec958_codec) */
	SPA_PROP_volumeRampSamples,		/**< Samples to ramp the volume over */
	SPA_PROP_volumeRampStepSamples,		/**< Step or incremental Samples to ramp
						  *  the volume over */
	SPA_PROP_volumeRampTime,		/**< Time in millisec to ramp the volume over */
	SPA_PROP_volumeRampStepTime,		/**< Step or incremental Time in nano seconds
						  *  to ramp the */
	SPA_PROP_volumeRampScale,		/**< the scale or graph to used to ramp the
						  *  volume */

	SPA_PROP_START_Video	= 0x20000,	/**< video related properties */
	SPA_PROP_brightness,
	SPA_PROP_contrast,
	SPA_PROP_saturation,
	SPA_PROP_hue,
	SPA_PROP_gamma,
	SPA_PROP_exposure,
	SPA_PROP_gain,
	SPA_PROP_sharpness,

	SPA_PROP_START_Other	= 0x80000,	/**< other properties */
	SPA_PROP_params,			/**< simple control params
						  *    (Struct(
						  *	  (String : key,
						  *	   Pod    : value)*)) */


	SPA_PROP_START_CUSTOM	= 0x1000000,
};

/**
 * \}
 */

#ifdef __cplusplus
}  /* extern "C" */
#endif

#endif /* SPA_PARAM_PROPS_H */
