113 lines
2.8 KiB
C
113 lines
2.8 KiB
C
/*
|
||
* Copyright (c) 2025, LISTENAI
|
||
*
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
|
||
#ifndef APP_PLAYER_FOCUS_H
|
||
#define APP_PLAYER_FOCUS_H
|
||
|
||
#include "app_player.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/**
|
||
* @brief 焦点管理层接口
|
||
*
|
||
* 本模块负责处理音频焦点相关的所有逻辑:
|
||
* - 焦点申请和释放
|
||
* - 焦点策略执行(暂停、停止、忽略等)
|
||
* - 焦点变化回调处理
|
||
* - 焦点状态管理
|
||
*/
|
||
|
||
/**
|
||
* @brief 初始化焦点管理器
|
||
* @param focus_configs 焦点配置数组
|
||
* @param focus_config_count 焦点配置数量
|
||
* @return 0 成功,负数失败
|
||
*/
|
||
int app_player_focus_init(const app_player_focus_channel_config_t *focus_configs, int focus_config_count);
|
||
|
||
/**
|
||
* @brief 反初始化焦点管理器
|
||
*/
|
||
void app_player_focus_deinit(void);
|
||
|
||
/**
|
||
* @brief 为播放器注册焦点通道
|
||
* @param player 播放器实例
|
||
* @param name 播放器名称(用于匹配焦点配置)
|
||
* @return 0 成功,负数失败
|
||
*/
|
||
int app_player_focus_register(app_player_t *player, const char *name);
|
||
|
||
/**
|
||
* @brief 注销播放器的焦点通道
|
||
* @param player 播放器实例
|
||
* @return 0 成功,负数失败
|
||
*/
|
||
int app_player_focus_unregister(app_player_t *player);
|
||
|
||
/**
|
||
* @brief 申请音频焦点
|
||
* @param player 播放器实例
|
||
* @return 0 成功,负数失败
|
||
*/
|
||
int app_player_focus_acquire(app_player_t *player);
|
||
|
||
/**
|
||
* @brief 释放音频焦点
|
||
* @param player 播放器实例
|
||
* @param is_user_initiated 是否是用户主动操作(影响是否清除 user_initiated_stop 标志)
|
||
* @return 0 成功,负数失败
|
||
*/
|
||
int app_player_focus_release(app_player_t *player, bool is_user_initiated);
|
||
|
||
/**
|
||
* @brief 注册焦点变化回调
|
||
* @param player 播放器实例
|
||
* @param callback 焦点变化回调函数
|
||
* @param user_data 用户数据
|
||
* @return 0 成功,负数失败
|
||
*/
|
||
int app_player_focus_register_callback(app_player_t *player,
|
||
app_player_focus_change_cb_t callback,
|
||
void *user_data);
|
||
|
||
/**
|
||
* @brief 设置用户主动操作标志
|
||
* @param player 播放器实例
|
||
* @param initiated 是否是用户主动操作
|
||
*/
|
||
void app_player_focus_set_user_initiated(app_player_t *player, bool initiated);
|
||
|
||
/**
|
||
* @brief 获取用户主动操作标志
|
||
* @param player 播放器实例
|
||
* @return true 用户主动操作,false 否
|
||
*/
|
||
bool app_player_focus_is_user_initiated(const app_player_t *player);
|
||
|
||
/**
|
||
* @brief 设置焦点暂停标志
|
||
* @param player 播放器实例
|
||
* @param paused 是否因焦点而暂停
|
||
*/
|
||
void app_player_focus_set_paused_by_focus(app_player_t *player, bool paused);
|
||
|
||
/**
|
||
* @brief 获取焦点暂停标志
|
||
* @param player 播放器实例
|
||
* @return true 因焦点而暂停,false 否
|
||
*/
|
||
bool app_player_focus_is_paused_by_focus(app_player_t *player);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* APP_PLAYER_FOCUS_H */
|