164 lines
7.8 KiB
C
Executable File
164 lines
7.8 KiB
C
Executable File
/**
|
|
@brief Header file of audio output module.\n
|
|
This file contains the functions which is related to audio output in the chip.
|
|
|
|
@file hd_audioout.h
|
|
|
|
@ingroup mhdal
|
|
|
|
@note Nothing.
|
|
|
|
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _HD_AUDIOOUT_H_
|
|
#define _HD_AUDIOOUT_H_
|
|
|
|
/********************************************************************
|
|
INCLUDE FILES
|
|
********************************************************************/
|
|
#include "hd_type.h"
|
|
#include "hd_util.h"
|
|
|
|
/********************************************************************
|
|
MACRO CONSTANT DEFINITIONS
|
|
********************************************************************/
|
|
|
|
/********************************************************************
|
|
MACRO FUNCTION DEFINITIONS
|
|
********************************************************************/
|
|
|
|
/********************************************************************
|
|
DRIVER RELATED TYPE DEFINITION
|
|
********************************************************************/
|
|
|
|
typedef enum _HD_AUDIOOUT_OUTPUT {
|
|
HD_AUDIOOUT_OUTPUT_SPK = 0, ///< speaker
|
|
HD_AUDIOOUT_OUTPUT_LINE = 1, ///< lineout
|
|
HD_AUDIOOUT_OUTPUT_ALL = 2, ///< speaker and lineout
|
|
HD_AUDIOOUT_OUTPUT_I2S = 3, ///< I2S
|
|
HD_AUDIOOUT_OUTPUT_MAX_CNT = 4, ///< maximum count
|
|
ENUM_DUMMY4WORD(HD_AUDIOOUT_OUTPUT)
|
|
} HD_AUDIOOUT_OUTPUT;
|
|
|
|
#define AUDIOOUT_MAX_DEVICE_NUM 4
|
|
typedef struct _HD_AUDIOOUT_SSP_CONFIG {
|
|
INT enable[AUDIOOUT_MAX_DEVICE_NUM]; ///< playout enable for each ssp interface
|
|
INT resample_ratio[AUDIOOUT_MAX_DEVICE_NUM]; ///< resample ratio of for each ssp interface
|
|
INT playback_chmap[AUDIOOUT_MAX_DEVICE_NUM]; ///< channel map of playbach ch
|
|
} HD_AUDIOOUT_SSP_CONFIG;
|
|
|
|
typedef struct _HD_AUDIOOUT_DRV_CONFIG {
|
|
HD_AUDIO_MONO mono; ///< audio mono channel
|
|
HD_AUDIOOUT_OUTPUT output; ///< audio output path
|
|
HD_AUDIOOUT_SSP_CONFIG ssp_config; ///< audio ssp config
|
|
} HD_AUDIOOUT_DRV_CONFIG;
|
|
|
|
/********************************************************************
|
|
TYPE DEFINITION
|
|
********************************************************************/
|
|
|
|
#define HD_AUDIOOUT_MAX_IN 2 ///< max count of input of this device (interface)
|
|
#define HD_AUDIOOUT_MAX_OUT 1 ///< max count of output of this device (interface)
|
|
|
|
/**
|
|
@name HD_AUDIOOUT capability
|
|
*/
|
|
typedef enum _HD_AUDIOOUT_DEVCAPS {
|
|
HD_AUDIOOUT_DEVCAPS_SPK = 0x00000100, ///< support speaker out
|
|
HD_AUDIOOUT_DEVCAPS_LINEOUT = 0x00000200, ///< support line out
|
|
HD_AUDIOOUT_DEVCAPS_DIFF_SR = 0x00000400, ///< support different in/out sampling rate
|
|
HD_AUDIOOUT_DEVCAPS_VOLUME = 0x00000800, ///< support volume setting
|
|
HD_AUDIOOUT_DEVCAPS_SSP_CONFIG = 0x00001000, ///< support ssp config
|
|
HD_AUDIOOUT_DEVCAPS_CLEAR_BUF = 0x00002000, ///< support clear buffer
|
|
ENUM_DUMMY4WORD(HD_AUDIOOUT_DEVCAPS)
|
|
} HD_AUDIOOUT_DEVCAPS;
|
|
|
|
typedef enum _HD_AUDIOOUT_SRCAPS {
|
|
HD_AUDIOOUT_SRCAPS_8000 = 0x00000001, ///< support HD_AUDIO_SR_8000
|
|
HD_AUDIOOUT_SRCAPS_11025 = 0x00000002, ///< support HD_AUDIO_SR_11025
|
|
HD_AUDIOOUT_SRCAPS_12000 = 0x00000004, ///< support HD_AUDIO_SR_12000
|
|
HD_AUDIOOUT_SRCAPS_16000 = 0x00000008, ///< support HD_AUDIO_SR_16000
|
|
HD_AUDIOOUT_SRCAPS_22050 = 0x00000010, ///< support HD_AUDIO_SR_22050
|
|
HD_AUDIOOUT_SRCAPS_24000 = 0x00000020, ///< support HD_AUDIO_SR_24000
|
|
HD_AUDIOOUT_SRCAPS_32000 = 0x00000040, ///< support HD_AUDIO_SR_32000
|
|
HD_AUDIOOUT_SRCAPS_44100 = 0x00000080, ///< support HD_AUDIO_SR_44100
|
|
HD_AUDIOOUT_SRCAPS_48000 = 0x00000100, ///< support HD_AUDIO_SR_48000
|
|
ENUM_DUMMY4WORD(HD_AUDIOOUT_SRCAPS)
|
|
} HD_AUDIOOUT_SRCAPS;
|
|
|
|
typedef struct _HD_AUDIOOUT_SYSINFO {
|
|
HD_DAL dev_id; ///< device id
|
|
HD_AUDIO_SR cur_out_sample_rate; ///< output sample rate
|
|
HD_AUDIO_BIT_WIDTH cur_sample_bit; ///< sample bit width
|
|
HD_AUDIO_SOUND_MODE cur_mode; ///< sound mode
|
|
HD_AUDIO_SR cur_in_sample_rate[HD_AUDIOOUT_MAX_IN]; ///< input sample rate
|
|
} HD_AUDIOOUT_SYSINFO;
|
|
|
|
typedef struct _HD_AUDIOOUT_OUT {
|
|
HD_AUDIO_SR sample_rate; ///< sample rate
|
|
HD_AUDIO_BIT_WIDTH sample_bit; ///< sample bit width
|
|
HD_AUDIO_SOUND_MODE mode; ///< sound mode
|
|
} HD_AUDIOOUT_OUT;
|
|
|
|
typedef struct _HD_AUDIOOUT_IN {
|
|
HD_AUDIO_SR sample_rate; ///< input sample rate. For resampling.
|
|
} HD_AUDIOOUT_IN;
|
|
|
|
typedef struct _HD_AUDIOOUT_DEV_CONFIG {
|
|
HD_AUDIOOUT_OUT out_max; ///< maximum output setting.
|
|
UINT32 frame_sample_max; ///< maximum sample count of each frame.
|
|
UINT32 frame_num_max; ///< maximum frame number in buffer.
|
|
HD_AUDIOOUT_IN in_max; ///< maximum input setting. For resampling.
|
|
} HD_AUDIOOUT_DEV_CONFIG;
|
|
|
|
typedef struct _HD_AUDIOOUT_SYSCAPS {
|
|
HD_DAL dev_id; ///< device id
|
|
UINT32 chip_id; ///< chip id of this device
|
|
UINT32 max_in_count; ///< max count of input of this device
|
|
UINT32 max_out_count; ///< max count of output of this device
|
|
HD_DEVICE_CAPS dev_caps; ///< capability of device
|
|
HD_AUDIO_CAPS in_caps[HD_AUDIOOUT_MAX_IN]; ///< capability of input
|
|
HD_AUDIO_CAPS out_caps[HD_AUDIOOUT_MAX_OUT]; ///< capability of output
|
|
HD_AUDIOOUT_SRCAPS support_in_sr[HD_AUDIOOUT_MAX_IN]; ///< supported input resampling sample rate
|
|
HD_AUDIOOUT_SRCAPS support_out_sr[HD_AUDIOOUT_MAX_OUT]; ///< supported output sample rate
|
|
} HD_AUDIOOUT_SYSCAPS;
|
|
|
|
typedef struct _HD_AUDIOOUT_VOLUME {
|
|
UINT32 volume; ///< audio output volume
|
|
} HD_AUDIOOUT_VOLUME;
|
|
|
|
typedef enum _HD_AUDIOOUT_PARAM_ID {
|
|
HD_AUDIOOUT_PARAM_DEVCOUNT, ///< support get with ctrl path, using HD_DEVCOUNT struct (device id max count)
|
|
HD_AUDIOOUT_PARAM_SYSCAPS, ///< support get with ctrl path, using HD_AUDIOOUT_SYSCAPS struct (system capabilitiy)
|
|
HD_AUDIOOUT_PARAM_SYSINFO, ///< support get with ctrl path, using HD_AUDIOOUT_SYSINFO struct
|
|
HD_AUDIOOUT_PARAM_DEV_CONFIG, ///< support get/set with ctrl path, using HD_AUDIOOUT_DEV_CONFIG struct
|
|
HD_AUDIOOUT_PARAM_DRV_CONFIG, ///< support get/set with ctrl path, using HD_AUDIOOUT_DRV_CONFIG struct
|
|
HD_AUDIOOUT_PARAM_OUT, ///< support get/set with i/o path, using HD_AUDIOOUT_OUT struct
|
|
HD_AUDIOOUT_PARAM_IN, ///< support get/set with i/o path, using HD_AUDIOOUT_IN struct
|
|
HD_AUDIOOUT_PARAM_VOLUME, ///< support get/set with ctrl path, using HD_AUDIOOUT_VOLUME struct
|
|
HD_AUDIOOUT_PARAM_CLEAR_BUF, ///< support set with i/o path, no parameter
|
|
HD_AUDIOOUT_PARAM_MAX,
|
|
ENUM_DUMMY4WORD(HD_AUDIOOUT_PARAM_ID)
|
|
} HD_AUDIOOUT_PARAM_ID;
|
|
|
|
/********************************************************************
|
|
EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
|
|
********************************************************************/
|
|
|
|
HD_RESULT hd_audioout_init(VOID);
|
|
HD_RESULT hd_audioout_open(HD_IN_ID in_id, HD_OUT_ID out_id, HD_PATH_ID *p_path_id);
|
|
|
|
HD_RESULT hd_audioout_start(HD_PATH_ID path_id);
|
|
HD_RESULT hd_audioout_stop(HD_PATH_ID path_id);
|
|
HD_RESULT hd_audioout_start_list(HD_PATH_ID *path_id, UINT num);
|
|
HD_RESULT hd_audioout_stop_list(HD_PATH_ID *path_id, UINT num);
|
|
HD_RESULT hd_audioout_set(HD_PATH_ID path_id, HD_AUDIOOUT_PARAM_ID id, VOID *p_param);
|
|
HD_RESULT hd_audioout_get(HD_PATH_ID path_id, HD_AUDIOOUT_PARAM_ID id, VOID *p_param);
|
|
HD_RESULT hd_audioout_push_in_buf(HD_PATH_ID path_id, HD_AUDIO_FRAME *p_in_audio_frame, INT32 wait_ms);
|
|
HD_RESULT hd_audioout_close(HD_PATH_ID path_id);
|
|
HD_RESULT hd_audioout_uninit(VOID);
|
|
|
|
#endif
|
|
|