aboutsummaryrefslogtreecommitdiff
path: root/common/fmplayer_file.h
blob: fd7c53efafdf6d762b80956836db4a44e8419b4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#ifndef MYON_FMPLAYER_FILE_H_INCLUDED
#define MYON_FMPLAYER_FILE_H_INCLUDED

#include <stddef.h>
#include "fmdriver/fmdriver.h"
#include "fmdriver/fmdriver_pmd.h"
#include "fmdriver/fmdriver_fmp.h"

enum fmplayer_file_type {
  FMPLAYER_FILE_TYPE_PMD,
  FMPLAYER_FILE_TYPE_FMP
};

enum fmplayer_file_error {
  FMPLAYER_FILE_ERR_OK,
  FMPLAYER_FILE_ERR_NOMEM,
  FMPLAYER_FILE_ERR_FILEIO,
  FMPLAYER_FILE_ERR_BADFILE_SIZE,
  FMPLAYER_FILE_ERR_BADFILE,
  FMPLAYER_FILE_ERR_COUNT
};

struct fmplayer_file {
  void *path;
  enum fmplayer_file_type type;
  union {
    struct driver_pmd pmd;
    struct driver_fmp fmp;
  } driver;
  bool pmd_ppc_err;
  bool pmd_ppz_err;
  bool fmp_pvi_err;
  bool fmp_ppz_err;
  void *buf;
  void *ppzbuf[2];
};
struct fmplayer_file *fmplayer_file_alloc(const void *path, enum fmplayer_file_error *error);
void fmplayer_file_free(const struct fmplayer_file *fmfile);
void fmplayer_file_load(struct fmdriver_work *work, struct fmplayer_file *fmfile);

const char *fmplayer_file_strerror(enum fmplayer_file_error error);
const wchar_t *fmplayer_file_strerror_w(enum fmplayer_file_error error);

// path: wchar_t* on windows, else char*
// examples:
//   fmplayer_fileread("/home/foo/bar.mz", 0, 0, &filesize); 
//   fmplayer_fileread("/home/foo/bar.mz", "BAZ", ".PVI", &filesize);
void *fmplayer_fileread(const void *path, const char *pcmname, const char *extension, size_t maxsize, size_t *filesize, enum fmplayer_file_error *error);

void *fmplayer_path_dup(const void *path);

#endif // MYON_FMPLAYER_FILE_H_INCLUDED