Files
2025-12-03 11:12:34 +08:00

72 lines
2.6 KiB
C

#ifndef FILE_DECODER_H
#define FILE_DECODER_H
#include "media/includes.h"
enum {
FILE_DEC_STATUS_STOP = 0, // 解码停止
FILE_DEC_STATUS_PLAY, // 正在解码
FILE_DEC_STATUS_PAUSE, // 解码暂停
FILE_DEC_STATUS_WAIT_PAUSE,
FILE_DEC_STATUS_WAIT_PLAY,
FILE_DEC_STATUS_PAUSE_SUCCESS,
};
struct file_decoder {
u8 ch_num; // 声道数
u8 output_ch_num; // 输出声道数
u8 status; // 解码状态
u8 dec_no_out_sound; // 解码不直接输出声音(用于TWS转发)
u8 tmp_pause; // 被其他解码打断,临时暂停
u32 wait_pause;
u8 remain;
u16 resume_tmr_id;
u16 sample_rate;
u32 coding_type;
u32 dec_total_time; // 总共能播放多长时间
u32 dec_cur_time; // 当前播放时间
u32 once_out_cnt; // 解码一次的输出统计
enum audio_channel ch_type; // 输出类型
struct audio_decoder decoder; // 解码句柄
int (*output_handler)(struct file_decoder *dec, s16 *data, int len);
void *tws_sync;
s16 fade_step;
s16 fade_value;
};
int file_decoder_open(struct file_decoder *dec,
const struct audio_dec_input *input,
struct audio_decoder_task *decode_task,
struct audio_dec_breakpoint *bp,
u8 pick);
int frame_decoder_open(struct file_decoder *dec,
const struct audio_dec_input *input,
struct audio_decoder_task *decode_task);
void file_decoder_close(struct file_decoder *dec);
void file_decoder_set_output_channel(struct file_decoder *dec);
void file_decoder_set_event_handler(struct file_decoder *dec,
void (*handler)(struct audio_decoder *, int, int *), u32 maigc);
bool file_decoder_is_stop(struct file_decoder *file_dec);
bool file_decoder_is_play(struct file_decoder *file_dec);
bool file_decoder_is_pause(struct file_decoder *file_dec);
int file_decoder_pp(struct file_decoder *file_dec);
int file_decoder_FF(struct file_decoder *file_dec, int step);
int file_decoder_FR(struct file_decoder *file_dec, int step);
int file_decoder_get_breakpoint(struct file_decoder *file_dec, struct audio_dec_breakpoint *bp);
int file_decoder_get_total_time(struct file_decoder *file_dec);
int file_decoder_get_cur_time(struct file_decoder *file_dec);
int file_decoder_get_decoder_type(struct file_decoder *file_dec);
void file_decoder_set_tws_sync_enable(struct file_decoder *dec, void *sync);
void file_decoder_mark_tws_sync_data(struct file_decoder *dec, u16 seqn);
void file_decoder_tws_sync_restart(struct file_decoder *dec);
#endif /*FILE_DECODER_H*/