123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748 |
- /*
- * Copyright (c) 2018 Actions Semiconductor Co., Ltd
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- /**
- * @file Media player interface
- */
- #ifndef __MEDIA_PLAYER_H__
- #define __MEDIA_PLAYER_H__
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include <media_type.h>
- #include <stream.h>
- #include <media_service.h>
- /**
- * @defgroup media_player_apis Media Player APIs
- * @ingroup media_system_apis
- * @{
- */
- /** media player type */
- typedef enum {
- /** media player type: only support playback */
- MEDIA_PLAYER_TYPE_PLAYBACK = 0x01,
- /** media player type: only support capture */
- MEDIA_PLAYER_TYPE_CAPTURE = 0x02,
- /** media player type: only support capture and playback */
- MEDIA_PLAYER_TYPE_CAPTURE_AND_PLAYBACK = 0x03,
- } media_player_type_e;
- /**media event type*/
- typedef enum {
- PLAYBACK_EVENT_OPEN,
- PLAYBACK_EVENT_DATA_INDICATE,
- PLAYBACK_EVENT_PAUSE,
- PLAYBACK_EVENT_RESUME,
- PLAYBACK_EVENT_SEEK,
- PLAYBACK_EVENT_STOP_INTERUPT,
- PLAYBACK_EVENT_STOP_COMPLETE,
- PLAYBACK_EVENT_STOP_ERROR,
- PLAYBACK_EVENT_CLOSE,
- CAPTURE_EVENT_OPEN,
- CAPTURE_EVENT_DATA_INDICATE,
- CAPTURE_EVENT_PAUSE,
- CAPTURE_EVENT_RESUME,
- CAPTURE_EVENT_STOP_INTERUPT,
- CAPTURE_EVENT_STOP_COMPLETE,
- CAPTURE_EVENT_STOP_ERROR,
- CAPTURE_EVENT_CLOSE,
- CAPTURE_EVENT_ASR,
- CAPTURE_EVENT_VAD,
- CAPTURE_EVENT_PP, /* audio processor event */
- PARSER_EVENT_OPEN,
- PARSER_EVENT_SEEK,
- PARSER_EVENT_STOP_COMPLETE,
- PARSER_EVENT_STOP_ERROR,
- PARSER_EVENT_CLOSE,
- /* player lifecycle event */
- PLAYER_EVENT_OPEN,
- PLAYER_EVENT_PLAY,
- PLAYER_EVENT_PAUSE,
- PLAYER_EVENT_RESUNE,
- PLAYER_EVENT_STOP,
- PLAYER_EVENT_CLOSE,
- } media_event_type_e;
- /** media capture mode */
- typedef enum {
- PLAYBACK_MODE_MASK = 0xf,
- CAPTURE_MODE_ENCODE = 0x1 << 4,
- CAPTURE_MODE_ASR = 0x2 << 4,
- CAPTURE_MODE_MASK = 0xf << 4,
- } media_mode_e;
- typedef enum {
- PLAYER_STATE,
- PLAYER_DECODE_ERROR,
- PLAYER_DECODE_SAMPLES,
- PLAYER_DECODE_DATALOST,
- PLAYER_DECODE_RAW,
- } media_player_state_e;
- /** media player structure */
- typedef struct {
- /** type of media player @see media_player_type_e */
- uint8_t type;
- /** flag of media player */
- uint8_t flag;
- /** tws flag of media player */
- uint8_t is_tws;
- /** dvfs level */
- uint8_t dvfs_level;
- /** handle of media service*/
- void *media_srv_handle;
- } media_player_t;
- /** media voice effect mode */
- typedef enum {
- VOICE_DOWNLOAD_EFFECT,
- VOICE_UPLOAD_EFFECT,
- } voice_effect_mode;
- /**
- * @brief open new media player
- *
- * This routine provides to open new media player,
- * support three type of media player &media_player_type_e
- *
- * @param init_param init param for open media player
- * @details init_param.format play back format &media_type_e;
- * init_param.sample_rate play back sample rate
- * init_param.input_indicator input stream indicator, if set input stream ,indicator may set 0;
- * init_param.input_stream input stream for playback, if set input indicator, input stream may create by service;
- * init_param.input_stream_size input stream max size
- * init_param.input_start_threshold input stream start threshold;
- * init_param.input_stop_threshold input stream stop threshold;
- * init_param.event_notify_handle playback event notify handle;
- * init_param.output_indicator output stream indicator, if set output stream ,indicator may set 0;
- * init_param.output_stream output stream for playback, if set output indicator, output stream may create by service;
- * init_param.capture_format capture encode format;
- * init_param.capture_sample_rate_input capture input sample rate;
- * init_param.capture_sample_rate_output capture out sample rate;
- * init_param.capture_input_indicator = AUDIO_STREAM_VOICE;
- * init_param.capture_input_stream = NULL;
- * init_param.capture_output_indicator = 0;
- * init_param.capture_output_stream = upload_stream;
- * init_param.capture_event_notify_handle capture event notify handle;
- * init_param.dumpable indicate support dump data;
- * init_param.support_tws indicate support tws;
- * init_param.support_csb indicate support csb;
- * init_param.aec_enable indicate support aec;
- *
- * @return handle of new media player
- */
- media_player_t *media_player_open(media_init_param_t *init_param);
- /**
- * @brief start play for media player
- *
- * This routine provides to start meida player play
- *
- * @param handle handle of media player
- *
- * @return 0 excute successed , others failed
- */
- int media_player_play(media_player_t *handle);
- /**
- * @brief pause for media player
- *
- * This routine provides to pause meida player
- *
- * @param handle handle of media player
- *
- * @return 0 excute successed , others failed
- */
- int media_player_pause(media_player_t *handle);
- /**
- * @brief resume for media player
- *
- * This routine provides to resume meida player
- *
- * @param handle handle of media player
- *
- * @return 0 excute successed , others failed
- */
- int media_player_resume(media_player_t *handle);
- /**
- * @brief seek for media player
- *
- * This routine provides to seek meida player.
- * only supported when local music play or net music play.
- *
- * @param handle handle of media player
- * @param info media seek info @see media_seek_info_t
- *
- * @return 0 excute successed , others failed
- */
- int media_player_seek(media_player_t *handle, media_seek_info_t *info);
- /**
- * @brief stop for media player
- *
- * This routine provides to stop meida player
- *
- * @param handle handle of media player
- *
- * @return 0 excute successed , others failed
- */
- int media_player_stop(media_player_t *handle);
- /**
- * @brief close for media player
- *
- * This routine provides to close meida player
- *
- * @param handle handle of media player
- *
- * @return 0 excute successed , others failed
- */
- int media_player_close(media_player_t *handle);
- /**
- * @brief Query media player parameter
- *
- * This routine provides to query meida player parameter
- *
- * @param handle handle of media player
- * @param pname query parameter name
- * @param param address of parameter to store query result
- * @param psize size of parameter buffer
- *
- * @return 0 excute successed , others failed
- */
- int media_player_get_parameter(media_player_t *handle, int pname, void *param, unsigned int psize);
- /**
- * @brief Configure media player parameter
- *
- * This routine provides to configure meida player parameter
- *
- * @param handle handle of media player
- * @param pname parameter name
- * @param param address of parameter buffer
- * @param psize size of parameter buffer
- *
- * @return 0 excute successed , others failed
- */
- int media_player_set_parameter(media_player_t *handle, int pname, void *param, unsigned int psize);
- /**
- * @brief Query media service global parameter
- *
- * This routine provides to query media service global parameter
- *
- * @param handle handle of media player, can be NULL
- * @param pname query parameter name
- * @param param address of parameter to store query result
- * @param psize size of parameter buffer
- *
- * @return 0 excute successed , others failed
- */
- int media_player_get_global_parameter(media_player_t *handle, int pname, void *param, unsigned int psize);
- /**
- * @brief Configure media service global parameter
- *
- * This routine provides to configure media service global parameter
- *
- * @param handle handle of media player, can be NULL
- * @param pname parameter name
- * @param param address of parameter buffer
- * @param psize size of parameter buffer
- *
- * @return 0 excute successed , others failed
- */
- int media_player_set_global_parameter(media_player_t *handle, int pname, void *param, unsigned int psize);
- /**
- * @brief Get media player media info
- *
- * This routine provides to get meida player media info
- *
- * Special case of media_player_get_parameter
- *
- * @param handle handle of media player
- * @param info address to store media info
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_get_mediainfo(media_player_t *handle, media_info_t *info)
- {
- return media_player_get_parameter(handle, MEDIA_PARAM_MEDIAINFO, info, sizeof(*info));
- }
- /**
- * @brief Get media player playing breakpoint
- *
- * This routine provides to get meida player breakpoint
- *
- * Special case of media_player_get_parameter
- *
- * @param handle handle of media player
- * @param info address to store breakpoint info
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_get_breakpoint(media_player_t *handle, media_breakpoint_info_t *info)
- {
- return media_player_get_parameter(handle, MEDIA_PARAM_BREAKPOINT, info, sizeof(*info));
- }
- /**
- * @brief Get media player output mode
- *
- * This routine provides to get meida player output mode. This output mode is
- * on the upper data stream of effect output mode.
- *
- * Special case of media_player_get_parameter
- *
- * @param handle handle of media player
- * @param mode address to store output mode, see media_output_mode_e
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_get_output_mode(media_player_t *handle, int *mode)
- {
- return media_player_get_parameter(handle, MEDIA_PARAM_OUTPUT_MODE, mode, sizeof(*mode));
- }
- /**
- * @brief Set media player energy filter param.
- *
- * This routine provides to set media player energy filter param.
- *
- * @param handle handle of media player
- * @param info address of energy filter structure
- *
- * @return 0 excute successed, others failed
- */
- #if 0
- static inline int media_player_set_energy_filter(media_player_t *handle, energy_filter_t *info)
- {
- return media_player_set_parameter(handle, MEDIA_PARAM_ENERGY_FILTER, (void *)info, sizeof(*info));
- }
- #endif
- /**
- * @brief get effect output mode for media player
- *
- * This routine provides to get effect output mode for meida player
- *
- * @param handle handle of media player
- * @param mode output mode, see media_effect_output_mode_e
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_get_effect_output_mode(media_player_t *handle, int *mode)
- {
- return media_player_get_parameter(handle, MEDIA_EFFECT_EXT_GET_DAE_OUTPUT_MODE, mode, sizeof(*mode));
- }
- /**
- * @brief Get media player freq point energy.
- *
- * This routine provides to get media player freq point energy.
- *
- * Special case of media_player_get_parameter
- *
- * @param handle handle of media player
- * @param info store the freq point energy, including the number of points and energy values.
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_get_freqpoint_energy(media_player_t *handle, media_freqpoint_energy_info_t *info)
- {
- return media_player_get_parameter(handle, MEDIA_EFFECT_EXT_GET_FREQPOINT_ENERGY, info, sizeof(*info));
- }
- /**
- * @brief Set media player energy freq point.
- *
- * This routine provides to set media player energy freq point.
- *
- * Special case of media_player_get_parameter
- *
- * @param handle handle of media player
- * @param info set the energy freq points, including the number of points and freq values.
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_energy_freqpoint(media_player_t *handle, media_freqpoint_energy_info_t *info)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_ENERGY_FREQPOINT, info, sizeof(*info));
- }
- /**
- * @brief Set media player output mode
- *
- * This routine provides to set meida player output mode. This output mode is
- * on the upper data stream of effect output mode.
- *
- * Special case of media_player_set_parameter
- *
- * @param handle handle of media player
- * @param mode output mode, see media_output_mode_e
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_set_output_mode(media_player_t *handle, int mode)
- {
- return media_player_set_parameter(handle, MEDIA_PARAM_OUTPUT_MODE, (void *)mode, 0);
- }
- /**
- * @brief Set media player max audio lantency
- *
- * This routine provides to set meida player max audio lantency.
- *
- * Special case of media_player_set_parameter
- *
- * @param handle handle of media player
- * @param latency max audio lantency in ms
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_set_audio_latency(media_player_t *handle, int latency)
- {
- return media_player_set_parameter(handle, MEDIA_PARAM_AUDIO_LATENCY, (void *)latency, 0);
- }
- /**
- * @brief Set media player sync play time
- *
- * This routine provides to set meida player sync play time.
- *
- * Special case of media_player_set_parameter
- *
- * @param handle handle of media player
- * @param bt_clk bluetooth clock time in us
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_set_sync_play_time(media_player_t *handle, uint64_t bt_clk)
- {
- return media_player_set_parameter(handle, MEDIA_PARAM_SET_PLAY_TIME, (void *)&bt_clk, sizeof(bt_clk));
- }
- /**
- * @brief Get media record time
- *
- * This routine provides to get media record time in ms.
- *
- * @param handle handle of media player
- * @param record_time_ms record time in ms
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_get_record_time(media_player_t *handle, uint32_t *record_time_ms)
- {
- return media_player_get_parameter(handle, MEDIA_PARAM_GET_RECORD_TIME, (void *)record_time_ms, sizeof(*record_time_ms));
- }
- /**
- * @brief set volume for media player
- *
- * This routine provides to set volume of meida player
- *
- * @param handle handle of media player
- * @param vol_l da volume level of left channel
- * @param vol_r da volume level of right channel
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_volume(media_player_t *handle, int vol_l, int vol_r)
- {
- unsigned int volume;
- if(vol_l < 0) vol_l = 0;
- if(vol_l > 0xff) vol_l = 0xff;
- if(vol_r < 0) vol_r = 0;
- if(vol_r > 0xff) vol_r = 0xff;
- volume = ((vol_r & 0xff) << 8) | (vol_l & 0xff);
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_VOLUME, (void *)volume, 0);
- }
- /**
- * @brief set mic mute for media player
- *
- * This routine provides to set mic mute for meida player
- *
- * @param handle handle of media player
- * @param mute bool for mute or unmute
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_mic_mute(media_player_t *handle, bool mute)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_MIC_MUTE, (void *)mute, 0);
- }
- /**
- * @brief set hfp connected flag for media player
- *
- * This routine provides to set hfp connected flag for meida player
- *
- * @param handle handle of media player
- * @param connected bool for connected or unconnected
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_hfp_connected(media_player_t *handle, bool connected)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_HFP_CONNECTED, (void *)connected, 0);
- }
- /**
- * @brief set effect enable for media player
- *
- * This routine provides to enable or disable audio effects for meida player
- *
- * @param handle handle of media player
- * @param enable enable or disable audio effect
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_effect_enable(media_player_t *handle, bool enable)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_DAE_ENABLE, (void *)enable, 0);
- }
- /**
- * @brief set bt call upstream effect enable or no
- *
- * This routine provides to enable or disable upstream effect.
- * Default is enabled.
- *
- * @param handle handle of media player
- * @param enable enable or disable upstream effect
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_upstream_dae_enable(media_player_t *handle, bool enable)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_UPSTREAM_DAE_ENABLE, (void *)enable, 0);
- }
- /**
- * @brief set effect bypass for media player
- *
- * This routine provides to bybpass audio effects for meida player, only
- * retain fade in/out and output mode config.
- *
- * @param handle handle of media player
- * @param bypass bypass audio effect or not
- *
- * @return 0 excute successed , others failed
- */
- int media_player_set_effect_bypass(bool bypass);
- static inline int _media_player_set_effect_bypass(media_player_t *handle, bool bypass)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_DAE_BYPASS, (void *)bypass, 0);
- }
- /**
- * @brief set voice effect bypass for media player
- *
- * This routine provides to bybpass audio voice effects for meida player.
- *
- * @param type handle of media player
- * @param bypass bypass audio effect or not
- *
- * @return 0 excute successed , others failed
- */
- int media_player_set_voice_effect_bypass(int type, bool bypass);
- static inline int _media_player_set_voice_effect_bypass(media_player_t *handle, uint8_t type, bool bypass)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_EFFECT_BYPASS, (void *)(type << 8 | bypass), 0);
- }
- /**
- * @brief set effect output mode for media player
- *
- * This routine provides to set effect output mode for meida player
- *
- * @param handle handle of media player
- * @param mode output mode, see media_effect_output_mode_e
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_set_effect_output_mode(media_player_t *handle, int mode)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_SET_DAE_OUTPUT_MODE, (void *)mode, 0);
- }
- /**
- * @brief update effect param for media player
- *
- * This routine provides to update effect param for media player
- *
- * @param handle handle of media player
- * @param param Address of effect param
- * @param size Size of effect param
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_update_effect_param(media_player_t *handle, void *param, unsigned int size)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_UPDATE_PARAM, param, size);
- }
- /**
- * @brief update aec param for media player
- *
- * This routine provides to update aec param for media player
- *
- * @param handle handle of media player
- * @param param Address of aec param
- * @param size Size of aec param
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_update_aec_param(media_player_t *handle, void *param, unsigned int size)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_UPDATE_AEC_PARAM, param, size);
- }
- /**
- * @brief fade in for media player
- *
- * This routine provides to fade in for media player
- *
- * @param handle handle of media player
- * @param fade_time_ms fadein time in ms
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_fade_in(media_player_t *handle, int fade_time_ms)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_FADEIN, (void *)fade_time_ms, 0);
- }
- /**
- * @brief fade out for media player
- *
- * This routine provides to fade out for media player
- *
- * @param handle handle of media player
- * @param fade_time_ms fadeout time in ms
- *
- * @return 0 excute successed , others failed
- */
- static inline int media_player_fade_out(media_player_t *handle, int fade_time_ms)
- {
- return media_player_set_parameter(handle, MEDIA_EFFECT_EXT_FADEOUT, (void *)fade_time_ms, 0);
- }
- /**
- * @brief dump data for media player
- *
- * This routine provides to dump data for media player
- *
- * @param handle handle of media player
- * @param num number of tags to dump
- * @param tags data tag array for dumpable data
- * @param bufs ring buf array to store dump data, set NULL to stop dumping
- *
- * @return 0 excute successed , others failed
- */
- int media_player_dump_data(media_player_t *handle, int num, const uint8_t tags[], struct acts_ringbuf *bufs[]);
- /**
- * @brief get current dumpable media player
- *
- * This routine provides to get current dumpable media player
- *
- * @return handle of media player @see media_player_t
- */
- media_player_t *media_player_get_current_dumpable_player(void);
- /**
- * @brief get current main media player
- *
- * This routine provides to get current main media player
- *
- * @return handle of media player @see media_player_t
- */
- media_player_t *media_player_get_current_main_player(void);
- /**
- * @brief start recording
- *
- * This routine provides start recording.
- *
- * @param handle of media player, can be NULL
- * @info record info
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_start_record(media_player_t *handle, media_record_info_t *info)
- {
- return media_player_set_global_parameter(handle, MEDIA_PARAM_SET_RECORD, info, sizeof(*info));
- }
- /**
- * @brief stop background recording
- *
- * This routine provides start background recording.
- *
- * @param handle of media player, can be NULL
- *
- * @return 0 excute successed, others failed
- */
- static inline int media_player_stop_record(media_player_t *handle)
- {
- return media_player_set_global_parameter(handle, MEDIA_PARAM_SET_RECORD, NULL, 0);
- }
- /**
- * @brief Set media player lifecycle notifier
- *
- * This routine provides set lifecycle notifier, like player open/close.
- *
- *@param notify lifecycle event notify.
- *
- * @return 0 excute successed, others failed
- */
- int media_player_set_lifecycle_notifier(media_srv_event_notify_t notify);
- /**
- * @brief force stop for media player, @only test
- *
- * This routine provides to stop meida player
- */
- void media_player_force_stop(void);
- int media_player_set_mix_stream(media_player_t *handle, mix_service_param_t *init_param);
- int media_mix_pcm_stream_open(const char *url, int inrate, int outrate);
- int media_mix_pcm_stream_close(void);
- #ifdef __cplusplus
- }
- #endif
- /**
- * INTERNAL_HIDDEN @endcond
- */
- /**
- * @} end defgroup media_player_apis
- */
- #endif /* __MEDIA_PLAYER_H__ */
|