audiofile.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "precompile.h"
  2. #include "audiofile.h"
  3. #include "audiolog.h"
  4. apr_status_t audiofile_init(apr_pool_t *pool,
  5. audioengine_t *engine,
  6. const char *file,
  7. int opt,
  8. audiofile_t *audiofile)
  9. {
  10. audiofile->file = apr_pstrdup(pool, file);
  11. audiostream_init(engine, NULL, &audiofile->base);
  12. audiofile->base.direction = (opt & AUDIO_FILE_OPT_PLAY) ? STREAM_DIR_READ: STREAM_DIR_WRITE;
  13. audiofile->opt = opt;
  14. if (opt & AUDIO_FILE_OPT_RECORD) {
  15. audiofile->file_handle = CreateFileA(file, GENERIC_WRITE, FILE_SHARE_READ,
  16. NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  17. if (audiofile->file_handle)
  18. SetEndOfFile(audiofile->file_handle);
  19. } else if (opt & AUDIO_FILE_OPT_PLAY) {
  20. audiofile->file_handle = CreateFileA(file, GENERIC_READ, FILE_SHARE_READ,
  21. NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  22. } else {
  23. return APR_EGENERAL;
  24. }
  25. if (audiofile->file_handle == INVALID_HANDLE_VALUE) {
  26. audio_log_v(AUDIO_LOG_LEVEL_ERROR,"create file %s failed", file);
  27. return apr_get_os_error();
  28. }
  29. return APR_SUCCESS;
  30. }
  31. void audiofile_term(audiofile_t *audiofile)
  32. {
  33. if (audiofile->file_handle != INVALID_HANDLE_VALUE) {
  34. CloseHandle(audiofile->file_handle);
  35. audiofile->file_handle = INVALID_HANDLE_VALUE;
  36. }
  37. }