AudioDeal.h 3.6 KB
/**
 ********************************************************************
 * @file   AudioDeal.h
 *         AudioDeal的头文件
 *
 *********************************************************************
 */

/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef AUDIO_DEAL_H
#define AUDIO_DEAL_H

/* Includes ------------------------------------------------------------------*/
#include "JZsdk_Base/JZsdk_Code/JZsdk_Code.h"
#include "libavutil/channel_layout.h"
#include "libavutil/frame.h"
#ifdef __cplusplus
extern "C" {
#endif

/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/

/* Exported types ------------------------------------------------------------*/
/*******
 * 
 *  音频库信息结构体
 * 
 * ********/
struct AudioDealInfo
{

    int Flag_AudioPlayStatus; //播放状态线程 用于标识当前的播放状态
    int Flag_AudioSwicthStatus; //音频切换状态标志位 用于是否是播放中切换播放中
    int Flag_AudioDataGeneration; //音频数据产生的标志位 用于判断是否是
    int Flag_AlsaPlay; //alsa库的播放标志位,用于标志alsa库是否处于播放中

    int Flag_AudioDataGenerationImplement;  //数据产生线程执行中   
    int Flag_AudioDataGenerationFinsh;  //数据产生线程执行完毕

    int AudioDeal_ResampleAndFilter_Execute_Flag; //音频库的滤波及重采样的执行标志位,用于进行管理音频库的线程使用
    int AudioDeal_ResampleAndFilterAndPlay_Finish_Flag; //音频库的滤波及重采样的执行完成的函数

    //用于管理alsa部分的内容
    int AudioDeal_Alsa_Execute_Flag;
    int AudioDeal_Alsa_Finish_Flag;

    int FilterMode; //滤波模式

//输出的pcm部分
       void *PcmPoolIndex;

    unsigned int Target_SampleRate;         //目标采样率
    unsigned int Target_SampleFormat;   //目标采样深度
    //unsigned int Target_ChannelLayout;  //目标频道数
    AVChannelLayout Target_ChannelLayout;  //目标通道布局

//alsa部分
    void *AlsaInfo;

//重采样
    void *ResampleInfo;

//滤波
    void *FilterInfo;

//原始数据信息
    unsigned int Raw_SampleRate;
    unsigned int Raw_SampleFormat;   //原始数据信息采样深度
    //unsigned int Raw_ChannelLayout;  //原始数据信息频道数
    AVChannelLayout Raw_ChannelLayout;  //原始数据通道布局

}AudioDealInfo;

/*******
 * 
 *  音频库播放类型枚举
 * 
 * ********/
enum AudioDealPlayType
{
    AUDIO_TYPE_IDLE = 0x00, //空闲状态
    AUDIO_TYPE_FILE = 0x01, //文件播放状态
    AUDIO_TYPE_MP3_STREAM = 0x02, //mp3流播放状态
    AUDIO_TYPE_PCM_STREAM = 0x03, //pcm流播放状态

}AudioDealPlayType;


/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode AudioDeal_Init();
T_JZsdkReturnCode AudioDeal_PcmDataInput(int In_Bitrate, unsigned char *buffer, int bytesRead);
T_JZsdkReturnCode AudioDeal_StopDeal();

T_JZsdkReturnCode AudioDeal_FilePlayInput(unsigned char *FilePath);
T_JZsdkReturnCode AudioDeal_ResampleRest(unsigned int in_sampleRate, AVChannelLayout in_ch_layout, enum AVSampleFormat in_format);
T_JZsdkReturnCode AudioFile_Stream_DataInput(AVFrame *frame);
T_JZsdkReturnCode AudioDeal_Mp3DataInput(int In_Bitrate, unsigned char *buffer, int bytesRead);

T_JZsdkReturnCode AudioDeal_PauseAndContinuePlay(int status);
int AudioDeal_GetPauseAndContinuePlayStatus();

T_JZsdkReturnCode Get_AudioDealStatus();
T_JZsdkReturnCode AudioDeal_SetFilterMode(int mode);
T_JZsdkReturnCode AudioDeal_Mp3DataStop();

#ifdef __cplusplus
}
#endif

#endif