avilib.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:7k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef AVILIB_H
  2. #define AVILIB_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. typedef struct
  7. {
  8.    long pos;
  9.    long len;
  10. } video_index_entry;
  11. typedef struct
  12. {
  13.    long pos;
  14.    long len;
  15.    long tot;
  16. } audio_index_entry;
  17. typedef struct
  18. {
  19.    long   fdes;              /* File descriptor of AVI file */
  20.    long   mode;              /* 0 for reading, 1 for writing */
  21.    long   width;             /* Width  of a video frame */
  22.    long   height;            /* Height of a video frame */
  23.    double fps;               /* Frames per second */
  24.    char   compressor[8];     /* Type of compressor, 4 bytes + padding for 0 byte */
  25.    long   video_strn;        /* Video stream number */
  26.    long   video_frames;      /* Number of video frames */
  27.    char   video_tag[4];      /* Tag of video data */
  28.    long   video_pos;         /* Number of next frame to be read
  29.                                 (if index present) */
  30.    long   a_fmt;             /* Audio format, see #defines below */
  31.    long   a_chans;           /* Audio channels, 0 for no audio */
  32.    long   a_rate;            /* Rate in Hz */
  33.    long   a_bits;            /* bits per audio sample */
  34.    long   audio_strn;        /* Audio stream number */
  35.    long   audio_bytes;       /* Total number of bytes of audio data */
  36.    long   audio_chunks;      /* Chunks of audio data in the file */
  37.    char   audio_tag[4];      /* Tag of audio data */
  38.    long   audio_posc;        /* Audio position: chunk */
  39.    long   audio_posb;        /* Audio position: byte within chunk */
  40.    long   pos;               /* position in file */
  41.    long   n_idx;             /* number of index entries actually filled */
  42.    long   max_idx;           /* number of index entries actually allocated */
  43.    unsigned char (*idx)[16]; /* index entries (AVI idx1 tag) */
  44.    video_index_entry * video_index;
  45.    audio_index_entry * audio_index;
  46.    long   last_pos;          /* Position of last frame written */
  47.    long   last_len;          /* Length of last frame written */
  48.    int    must_use_index;    /* Flag if frames are duplicated */
  49.    long   movi_start;
  50. } avi_t;
  51. #define AVI_MODE_WRITE  0
  52. #define AVI_MODE_READ   1
  53. /* The error codes delivered by avi_open_input_file */
  54. #define AVI_ERR_SIZELIM      1     /* The write of the data would exceed
  55.                                       the maximum size of the AVI file.
  56.                                       This is more a warning than an error
  57.                                       since the file may be closed safely */
  58. #define AVI_ERR_OPEN         2     /* Error opening the AVI file - wrong path
  59.                                       name or file nor readable/writable */
  60. #define AVI_ERR_READ         3     /* Error reading from AVI File */
  61. #define AVI_ERR_WRITE        4     /* Error writing to AVI File,
  62.                                       disk full ??? */
  63. #define AVI_ERR_WRITE_INDEX  5     /* Could not write index to AVI file
  64.                                       during close, file may still be
  65.                                       usable */
  66. #define AVI_ERR_CLOSE        6     /* Could not write header to AVI file
  67.                                       or not truncate the file during close,
  68.                                       file is most probably corrupted */
  69. #define AVI_ERR_NOT_PERM     7     /* Operation not permitted:
  70.                                       trying to read from a file open
  71.                                       for writing or vice versa */
  72. #define AVI_ERR_NO_MEM       8     /* malloc failed */
  73. #define AVI_ERR_NO_AVI       9     /* Not an AVI file */
  74. #define AVI_ERR_NO_HDRL     10     /* AVI file has no has no header list,
  75.                                       corrupted ??? */
  76. #define AVI_ERR_NO_MOVI     11     /* AVI file has no has no MOVI list,
  77.                                       corrupted ??? */
  78. #define AVI_ERR_NO_VIDS     12     /* AVI file contains no video data */
  79. #define AVI_ERR_NO_IDX      13     /* The file has been opened with
  80.                                       getIndex==0, but an operation has been
  81.                                       performed that needs an index */
  82. /* Possible Audio formats */
  83. #ifndef WAVE_FORMAT_UNKNOWN
  84. /* Most of these are defined by Microsoft - don't redefine them */
  85. #define WAVE_FORMAT_UNKNOWN             (0x0000)
  86. #define WAVE_FORMAT_PCM                 (0x0001)
  87. #define WAVE_FORMAT_ADPCM               (0x0002)
  88. #define WAVE_FORMAT_IBM_CVSD            (0x0005)
  89. #define WAVE_FORMAT_ALAW                (0x0006)
  90. #define WAVE_FORMAT_MULAW               (0x0007)
  91. #define WAVE_FORMAT_OKI_ADPCM           (0x0010)
  92. #define WAVE_FORMAT_DVI_ADPCM           (0x0011)
  93. #define WAVE_FORMAT_DIGISTD             (0x0015)
  94. #define WAVE_FORMAT_DIGIFIX             (0x0016)
  95. #define WAVE_FORMAT_YAMAHA_ADPCM        (0x0020)
  96. #define WAVE_FORMAT_DSP_TRUESPEECH      (0x0022)
  97. #define WAVE_FORMAT_GSM610              (0x0031)
  98. #endif
  99. #define IBM_FORMAT_MULAW                (0x0101)
  100. #define IBM_FORMAT_ALAW                 (0x0102)
  101. #define IBM_FORMAT_ADPCM                (0x0103)
  102. avi_t* AVI_open_output_file(char * filename);
  103. void AVI_set_video(avi_t *AVI, int width, int height, double fps, char *compressor);
  104. void AVI_set_audio(avi_t *AVI, int channels, long rate, int bits, int format);
  105. int  AVI_write_frame(avi_t *AVI, char *data, long bytes);
  106. int  AVI_dup_frame(avi_t *AVI);
  107. int  AVI_write_audio(avi_t *AVI, char *data, long bytes);
  108. long AVI_bytes_remain(avi_t *AVI);
  109. int  AVI_close(avi_t *AVI);
  110. avi_t *AVI_open_input_file(const char *filename, int getIndex);
  111. long AVI_video_frames(avi_t *AVI);
  112. int  AVI_video_width(avi_t *AVI);
  113. int  AVI_video_height(avi_t *AVI);
  114. double AVI_video_frame_rate(avi_t *AVI);
  115. char* AVI_video_compressor(avi_t *AVI);
  116. int  AVI_audio_channels(avi_t *AVI);
  117. int  AVI_audio_bits(avi_t *AVI);
  118. int  AVI_audio_format(avi_t *AVI);
  119. long AVI_audio_rate(avi_t *AVI);
  120. long AVI_audio_bytes(avi_t *AVI);
  121. long AVI_frame_size(avi_t *AVI, long frame);
  122. int  AVI_seek_start(avi_t *AVI);
  123. int  AVI_set_video_position(avi_t *AVI, long frame, long *frame_len);
  124. long AVI_read_frame(avi_t *AVI, char *vidbuf);
  125. int  AVI_set_audio_position(avi_t *AVI, long byte);
  126. int  AVI_set_audio_frame(avi_t *AVI, long frame, long *frame_len);
  127. long AVI_read_audio(avi_t *AVI, char *audbuf, long bytes);
  128. int  AVI_read_data(avi_t *AVI, char *vidbuf, long max_vidbuf,
  129.                                char *audbuf, long max_audbuf,
  130.                                long *len);
  131. void AVI_print_error(char *str);
  132. char *AVI_strerror();
  133. char *AVI_syserror();
  134. #ifdef __cplusplus
  135. }
  136. #endif
  137. #endif