adpcm_plugin.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "vp_engine.h"
  4. #include "adpcm.h"
  5. #include "video_player_defs.h"
  6. #include "video_mem.h"
  7. /**
  8. ** open wav decoder module for video
  9. **/
  10. static void *open(void *arg)
  11. {
  12. wave_dec_t *wave_dec;
  13. wave_dec = (wave_dec_t *)video_mem_malloc(sizeof(wave_dec_t));
  14. return wave_dec;
  15. }
  16. /**
  17. ** adpcm decode and output
  18. **/
  19. static int decode(void *dhandle, av_buf_t *av_buf)
  20. {
  21. //int rt = 0;
  22. unsigned char *datain = 0;
  23. wave_dec_t *wave_dec = 0;
  24. int SampleNumber = 0;
  25. //int waveheadlen = 0;
  26. if ((dhandle == NULL)||(av_buf == NULL))
  27. {
  28. return EN_MEMERR;
  29. }
  30. wave_dec = (wave_dec_t *)dhandle;
  31. datain = av_buf->data;
  32. memcpy((char *)&wave_dec->wave_h, (const char*)datain, sizeof(wave_head_t));
  33. datain += sizeof(wave_head_t);
  34. memcpy((char *)&wave_dec->state, (const char*)datain, sizeof(wave_dec->state));
  35. datain += sizeof(wave_dec->state);
  36. memcpy((char *)&SampleNumber, (const char*)datain, sizeof(int));
  37. datain += sizeof(int);
  38. //printf("wav SR: %d\n", wave_dec->wave_h.dwSamples_per_sec);
  39. //printf("wav CHN: %d\n", wave_dec->wave_h.wChannels);
  40. //printf("wav samples: %d\n", SampleNumber);
  41. if (SampleNumber > ADPCM_MAX_FRAME_SIZE)
  42. {
  43. return EN_MEMERR;
  44. }
  45. adpcm_decoder(((char*)datain),av_buf->outbuf, SampleNumber, &wave_dec->state, 1);
  46. return SampleNumber * 2;
  47. }
  48. static int dispose(void *dhandle)
  49. {
  50. if (dhandle)
  51. {
  52. video_mem_free(dhandle);
  53. }
  54. return 0;
  55. }
  56. static dec_plugin_t adpcm_plugin = {
  57. "wave",
  58. open,
  59. decode,
  60. dispose
  61. };
  62. dec_plugin_t *adpcm_api(void)
  63. {
  64. return &adpcm_plugin;
  65. }