#ifndef WH_MP4_H_c5e559d9_ #define WH_MP4_H_c5e559d9_ /* This file is in the public domain. */ typedef enum { MP4_TT_NONE = 1, MP4_TT_AUDIO, MP4_TT_VIDEO, } MP4TRKTYPE; typedef enum { MP4_AFMT_EOF = 1, MP4_AFMT_SLIN16N, } MP4_AFMT; typedef struct mp4 MP4; typedef struct mp4trk MP4TRK; typedef struct mp4adesc MP4ADESC; struct mp4adesc { unsigned int rate; unsigned int samples; unsigned int channels; MP4_AFMT format; const unsigned char *data; double when; } ; typedef struct mp4vdesc MP4VDESC; struct mp4vdesc { unsigned int w; unsigned int h; const unsigned char (*data)[4]; double when; } ; /* extra args to mp4_open appear in increasing flag-bit order */ extern MP4 *mp4_open(const char *, unsigned int flags, ...); // Enable verbosity. Extra: one FILE * (where to send verbosity). #define MP4F_VERBOSE 0x00000001 // On error, return error instead of exiting. Extra: const char ** // to store error message through. #define MP4F_ERRMSG 0x00000002 extern const char *mp4_scan(MP4 *); extern void mp4_close(MP4 *); extern int mp4_ntracks(MP4 *); extern MP4TRKTYPE mp4_track_type(MP4 *, int); extern MP4TRK *mp4_open_audio(MP4 *, int); extern MP4TRK *mp4_open_video(MP4 *, int); extern const MP4ADESC *mp4_get_audio(MP4TRK *); extern const MP4VDESC *mp4_get_video(MP4TRK *); extern int mp4_max_index(MP4TRK *); extern double mp4_index_time(MP4TRK *, int); extern int mp4_max_seekx(MP4TRK *); extern double mp4_seekx_time(MP4TRK *, int); extern void mp4_seek(MP4TRK *, int); extern void mp4_close_track(MP4TRK *); #endif