luat_multimedia_codec.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /******************************************************************************
  2. * multimedia 编解码抽象层
  3. *****************************************************************************/
  4. #ifndef __LUAT_MULTIMEDIA_CODEC_H__
  5. #define __LUAT_MULTIMEDIA_CODEC_H__
  6. #include "luat_base.h"
  7. #ifdef __LUATOS__
  8. #include "luat_zbuff.h"
  9. #define LUAT_M_CODE_TYPE "MCODER*"
  10. #endif
  11. #define MP3_FRAME_LEN 4 * 1152
  12. #define MP3_MAX_CODED_FRAME_SIZE 1792
  13. #define G711_PCM_SAMPLES 160
  14. enum{
  15. LUAT_MULTIMEDIA_DATA_TYPE_NONE,
  16. LUAT_MULTIMEDIA_DATA_TYPE_PCM,
  17. LUAT_MULTIMEDIA_DATA_TYPE_MP3,
  18. LUAT_MULTIMEDIA_DATA_TYPE_WAV,
  19. LUAT_MULTIMEDIA_DATA_TYPE_AMR_NB,
  20. LUAT_MULTIMEDIA_DATA_TYPE_AMR_WB,
  21. LUAT_MULTIMEDIA_DATA_TYPE_ULAW,
  22. LUAT_MULTIMEDIA_DATA_TYPE_ALAW
  23. };
  24. enum{
  25. LUAT_MULTIMEDIA_CB_AUDIO_DECODE_START, //开始解码文件
  26. LUAT_MULTIMEDIA_CB_AUDIO_OUTPUT_START, //开始输出解码后的音数据
  27. LUAT_MULTIMEDIA_CB_AUDIO_NEED_DATA, //底层驱动播放播放完一部分数据,需要更多数据
  28. LUAT_MULTIMEDIA_CB_AUDIO_DONE, //底层驱动播放完全部数据了
  29. LUAT_MULTIMEDIA_CB_DECODE_DONE, //音频解码完成
  30. LUAT_MULTIMEDIA_CB_TTS_INIT, //TTS做完了必要的初始化,用户可以通过audio_play_tts_set_param做个性化配置
  31. LUAT_MULTIMEDIA_CB_TTS_DONE, //TTS编码完成了。注意不是播放完成
  32. LUAT_MULTIMEDIA_CB_RECORD_DATA, //录音数据
  33. LUAT_MULTIMEDIA_CB_RECORD_DONE, //录音完成
  34. };
  35. enum{
  36. LUAT_CODEC_VDDA_3V3,
  37. LUAT_CODEC_VDDA_1V8,
  38. };
  39. #include <stddef.h>
  40. #include <stdio.h>
  41. #ifndef __BSP_COMMON_H__
  42. #include "c_common.h"
  43. #endif
  44. typedef struct{
  45. union{
  46. void *mp3_decoder;
  47. uint32_t read_len;
  48. void *amr_coder;
  49. void *g711_codec;
  50. };
  51. FILE* fd;
  52. #ifdef __LUATOS__
  53. luat_zbuff_t buff;
  54. #endif
  55. Buffer_Struct file_data_buffer;
  56. Buffer_Struct audio_data_buffer;
  57. uint8_t type;
  58. uint8_t is_decoder;
  59. }luat_multimedia_codec_t;
  60. typedef struct luat_multimedia_cb {
  61. int function_ref;
  62. } luat_multimedia_cb_t;
  63. void *mp3_decoder_create(void);
  64. void mp3_decoder_init(void *decoder);
  65. void mp3_decoder_set_debug(void *decoder, uint8_t onoff);
  66. int mp3_decoder_get_info(void *decoder, const uint8_t *input, uint32_t len, uint32_t *hz, uint8_t *channel);
  67. int mp3_decoder_get_data(void *decoder, const uint8_t *input, uint32_t len, int16_t *pcm, uint32_t *out_len, uint32_t *hz, uint32_t *used);
  68. void* g711_decoder_create(uint8_t type);
  69. void g711_decoder_destroy(void* decoder);
  70. int g711_decoder_get_data(void* decoder, const uint8_t* input, uint32_t len,
  71. int16_t* pcm, uint32_t* out_len, uint32_t* used);
  72. void* g711_encoder_create(uint8_t type);
  73. void g711_encoder_destroy(void* encoder);
  74. int g711_encoder_get_data(void* encoder, const int16_t* pcm, uint32_t len,
  75. uint8_t* output, uint32_t* out_len);
  76. void g711_get_stats(void* codec, uint32_t* sample_rate, uint32_t* frame_count);
  77. void g711_reset_stats(void* codec);
  78. void g711_set_sample_rate(void* codec, uint32_t sample_rate);
  79. #ifdef __LUATOS__
  80. int l_multimedia_raw_handler(lua_State *L, void* ptr);
  81. #endif
  82. #endif