1回答

1收藏

移植speex

GD32 GD32 4944 人阅读 | 1 人回复 | 2017-06-16

speex是一个语言压缩的库,压缩率还是比较高,而且占用资源很少,很适gd32这样子的MCU。具体的可以参考官网。
ST官网上面有一个移植好的方案,我根据这个方案做些修改,将它移到GD32F450上,由于我外部晶振还没焊接,所以只能先用内部晶振,这样子压缩的速率就慢了好多。
大概的一个示例
  1. #ifdef HAVE_CONFIG_H
  2. #include "config.h"
  3. #endif

  4. #include <speex/speex.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <speex/speex_callbacks.h>

  8. #ifdef FIXED_DEBUG
  9. extern long long spx_mips;
  10. #endif

  11. #define FRAME_SIZE 160
  12. #include <math.h>

  13. int main(int argc, char **argv)
  14. {
  15.     void * enc;
  16.     void * dec;
  17.     SpeexBits bits;
  18.     int nbBytes;
  19.     spx_int16_t input[FRAME_SIZE];
  20.     int quality = 0, complexity=1, vbr=0, enh=1;/* SPEEX PARAMETERS, MUST REMAINED UNCHANGED */
  21.     unsigned char output[200];


  22.     speex_bits_init(&bits);
  23.     enc = speex_encoder_init(&speex_nb_mode);
  24.     dec = speex_decoder_init(&speex_nb_mode);

  25.     speex_encoder_ctl(enc, SPEEX_SET_VBR, &vbr);
  26.     speex_encoder_ctl(enc, SPEEX_SET_QUALITY,&quality);
  27.     speex_encoder_ctl(enc, SPEEX_SET_COMPLEXITY, &complexity);
  28.     speex_encoder_ctl(enc,SPEEX_GET_BITRATE,&complexity);
  29.     speex_encoder_ctl(enc,SPEEX_GET_SAMPLING_RATE,&complexity);
  30.     while (1) {
  31.         speex_bits_reset(&bits);
  32.         speex_encode_int(enc, input, &bits);
  33.         nbBytes = speex_bits_write(&bits, output, sizeof(output));
  34.         //speex_bits_read_from(&bits, output, nbBytes);
  35.         //speex_decode_int(dec,&bits,input);
  36.     }
  37.     speex_bits_destroy(&bits);
  38.     speex_encoder_destroy(enc);

  39.    return 0;
  40. }
复制代码

speex-1.2beta3.rar

1.49 MB, 下载次数: 26

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

kingpower2019

发表于 2020-6-9 14:29:13 | 只看该作者

正在处理speex的算法问题,先看看研究一下,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条