complex.c
上传用户:csczyc
上传日期:2021-02-19
资源大小:1051k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. /* Complexity counting functions */
  2. #include <stdio.h>
  3. #include "spbstd.h"
  4. extern int complexity, saturation;
  5. #define MAX_CMPLX 50
  6. int cm_max[MAX_CMPLX];//mark
  7. int max_complexity;//mark
  8. int prev_complexity;//mark
  9. int sat_cnt[MAX_CMPLX];//mark
  10. int prev_saturation = 0;//mark
  11. static int frame = 0;//mark
  12. int cm_index;
  13. /* Complexity_count: update max counter for current index */
  14. int complexity_count()
  15. {
  16.     int temp;//mark
  17.     /* Check maximum complexity for current index */
  18.     temp = complexity - prev_complexity;
  19.     if (temp > cm_max[cm_index])
  20. cm_max[cm_index] = temp;
  21.     /* Check for saturations */
  22.     temp = saturation - prev_saturation;
  23.     if (temp > 0) {
  24. sat_cnt[cm_index] += temp;
  25. printf("%d saturations in frame %d, index %dn",
  26.        (int) temp, (int) frame, (int) cm_index);
  27.     }
  28.     /* Increment index and previous value */
  29.     cm_index++;
  30.     prev_complexity = complexity;
  31.     prev_saturation = saturation;
  32.     /* Check overall total complexity */
  33.     if (complexity > max_complexity)
  34. max_complexity = complexity;
  35.     return(0);
  36. }
  37. /* Complexity_reset: reset counters */
  38. int complexity_reset()
  39. {
  40.     cm_index = 0;
  41.     complexity = 0;
  42.     prev_complexity = 0;
  43.     frame++;
  44.     return(0);
  45. }
  46. /* Complexity_print: print final complexity */
  47. #define C_MOPS ((1.0/1000000)*8000/180) /* convert complexity to WMOPS */
  48. int complexity_print()
  49. {
  50.     int i;
  51.     int cm_total = 0;//mark
  52.     printf("Worst case total WMOPS = %6.2f, saturations = %dn",
  53.    max_complexity*C_MOPS, saturation);
  54.     printf("Individual cases:n");
  55.     for (i = 0; i < MAX_CMPLX; i++) {
  56. if (cm_max[i] == 0) {
  57.     printf("Sum of worst cases = %6.2fn",cm_total*C_MOPS);
  58.     break;
  59. }
  60. else 
  61.     printf("%6.2f  %dn",cm_max[i]*C_MOPS,(int) sat_cnt[i]);
  62. cm_total += cm_max[i];
  63.     }
  64.     return(0);
  65. }
  66.