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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef QUICKTIME_H
  2. #define QUICKTIME_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include "mpeg4ip.h"
  7. #if 0
  8. #ifdef _WINDOWS
  9. #include <windows.h>
  10. typedef unsigned __int8 u_int8_t;
  11. typedef unsigned __int16 u_int16_t;
  12. typedef unsigned __int32 u_int32_t;
  13. typedef unsigned __int64 u_int64_t;
  14. typedef __int32 int32_t;
  15. #endif
  16. #endif
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include "rtphint.h"
  20. #include "private.h"
  21. #include "funcprotos.h"
  22. #include "sizes.h"
  23. /* This is the reference for all your library entry points. */
  24. /* Color models.  Not all compression formats support QUICKTIME_BGR8880. */
  25. /* You must verify the support of QUICKTIME_BGR8880 with quicktime_test_colormodel. */
  26. #define QUICKTIME_RGB888   0
  27. #define QUICKTIME_BGR8880  1
  28. #define QUICKTIME_RGBA8880 2
  29. /* ===================== compression formats =================== // */
  30. /* The compression formats are the formats supported natively by Quicktime 4 Linux. */
  31. /* DV works only for decoding. */
  32. #define QUICKTIME_DV "dvc "
  33. /* RGB uncompressed.  Allows alpha */
  34. #define QUICKTIME_RAW  "raw "
  35. /* Jpeg Photo */
  36. #define QUICKTIME_JPEG "jpeg"
  37. /* Motion JPEG-A. */
  38. #define QUICKTIME_MJPA "mjpa"
  39. /* YUV9.  What on earth for? */
  40. #define QUICKTIME_YUV9 "YVU9"
  41. /* RTjpeg, proprietary but fast? */
  42. #define QUICKTIME_RTJ0 "RTJ0"
  43. /* YUV 4:2:2 */
  44. #define QUICKTIME_YUV2 "yuv2"
  45. /* YUV 4:2:0  NOT COMPATIBLE WITH STANDARD QUICKTIME */
  46. #define QUICKTIME_YUV4 "yuv4"
  47. /* Concatenated png images.  Allows alpha */
  48. #define QUICKTIME_PNG "png "
  49. /* Audio formats */
  50. /* Unsigned 8 bit */
  51. #ifndef QUICKTIME_RAW
  52. #define QUICKTIME_RAW "raw "
  53. #endif
  54. /* IMA4 */
  55. #define QUICKTIME_IMA4 "ima4"
  56. /* Twos compliment 8, 16, 24 */
  57. #define QUICKTIME_TWOS "twos"
  58. /* ulaw */
  59. #define QUICKTIME_ULAW "ulaw"
  60. /* =========================== public interface ========================= // */
  61. /* return 1 if the file is a quicktime file */
  62. int quicktime_check_sig(const char *path);
  63. /* call this first to open the file and create all the objects */
  64. quicktime_t* quicktime_open(char *filename, int rd, int wr, int append);
  65. /* make the quicktime file streamable */
  66. int quicktime_make_streamable(char *in_path, char *out_path);
  67. /* Set various options in the file. */
  68. int quicktime_set_time_scale(quicktime_t *file, int time_scale);
  69. int quicktime_set_copyright(quicktime_t *file, char *string);
  70. int quicktime_set_name(quicktime_t *file, char *string);
  71. int quicktime_set_info(quicktime_t *file, char *string);
  72. int quicktime_get_time_scale(quicktime_t *file);
  73. char* quicktime_get_copyright(quicktime_t *file);
  74. char* quicktime_get_name(quicktime_t *file);
  75. char* quicktime_get_info(quicktime_t *file);
  76. /* Read all the information about the file. */
  77. /* Requires a MOOV atom be present in the file. */
  78. /* If no MOOV atom exists return 1 else return 0. */
  79. int quicktime_read_info(quicktime_t *file);
  80. /* set up tracks in a new file after opening and before writing */
  81. /* returns the number of quicktime tracks allocated */
  82. /* audio is stored two channels per quicktime track */
  83. int quicktime_set_audio(quicktime_t *file, int channels, long sample_rate, int bits, int sample_size, int time_scale, int sample_duration, char *compressor);
  84. int quicktime_set_audio_hint(quicktime_t *file, int track, char *payloadName, u_int* pPayloadNumber, int maxPktSize);
  85. /* Samplerate can be set after file is created */
  86. int quicktime_set_framerate(quicktime_t *file, float framerate);
  87. /* video is stored one layer per quicktime track */
  88. int quicktime_set_video(quicktime_t *file, int tracks, int frame_w, int frame_h, float frame_rate, int time_scale, char *compressor);
  89. int quicktime_set_video_hint(quicktime_t *file, int track, char *payloadName, u_int* pPayloadNumber, int maxPktSize);
  90. /* routines for setting various video parameters */
  91. /* should be called after set_video */
  92. int quicktime_set_jpeg(quicktime_t *file, int quality, int use_float);
  93. /* Set the depth of the track. */
  94. int quicktime_set_depth(quicktime_t *file, int depth, int track);
  95. /* close the file and delete all the objects */
  96. int quicktime_write(quicktime_t *file);
  97. int quicktime_destroy(quicktime_t *file);
  98. int quicktime_close(quicktime_t *file);
  99. /* get length information */
  100. /* channel numbers start on 1 for audio and video */
  101. long quicktime_audio_length(quicktime_t *file, int track);
  102. long quicktime_video_length(quicktime_t *file, int track);
  103. /* get position information */
  104. long quicktime_audio_position(quicktime_t *file, int track);
  105. long quicktime_video_position(quicktime_t *file, int track);
  106. /* get file information */
  107. int quicktime_video_tracks(quicktime_t *file);
  108. int quicktime_audio_tracks(quicktime_t *file);
  109. int quicktime_has_audio(quicktime_t *file);
  110. long quicktime_audio_sample_rate(quicktime_t *file, int track);
  111. int quicktime_audio_bits(quicktime_t *file, int track);
  112. int quicktime_track_channels(quicktime_t *file, int track);
  113. int quicktime_audio_time_scale(quicktime_t *file, int track);
  114. int quicktime_audio_sample_duration(quicktime_t *file, int track);
  115. char* quicktime_audio_compressor(quicktime_t *file, int track);
  116. int quicktime_has_video(quicktime_t *file);
  117. int quicktime_video_width(quicktime_t *file, int track);
  118. int quicktime_video_height(quicktime_t *file, int track);
  119. int quicktime_video_depth(quicktime_t *file, int track);
  120. float quicktime_video_frame_rate(quicktime_t *file, int track);
  121. char* quicktime_video_compressor(quicktime_t *file, int track);
  122. int quicktime_video_time_scale(quicktime_t *file, int track);
  123. int quicktime_video_frame_time(quicktime_t *file, int track, long frame,
  124. long *start_time, int *duration);
  125. int quicktime_get_iod_audio_profile_level(quicktime_t *file);
  126. int quicktime_set_iod_audio_profile_level(quicktime_t *file, int id);
  127. int quicktime_get_iod_video_profile_level(quicktime_t *file);
  128. int quicktime_set_iod_video_profile_level(quicktime_t *file, int id);
  129. int quicktime_get_mp4_video_decoder_config(quicktime_t *file, int track, u_char** ppBuf, int* pBufSize);
  130. int quicktime_set_mp4_video_decoder_config(quicktime_t *file, int track, u_char* pBuf, int bufSize);
  131. int quicktime_get_mp4_audio_decoder_config(quicktime_t *file, int track, u_char** ppBuf, int* pBufSize);
  132. int quicktime_set_mp4_audio_decoder_config(quicktime_t *file, int track, u_char* pBuf, int bufSize);
  133. char* quicktime_get_session_sdp(quicktime_t *file);
  134. int quicktime_set_session_sdp(quicktime_t *file, char* sdpString);
  135. int quicktime_add_audio_sdp(quicktime_t *file, char* sdpString, int track, int hintTrack);
  136. int quicktime_add_video_sdp(quicktime_t *file, char* sdpString, int track, int hintTrack);
  137. int quicktime_set_audio_hint_max_rate(quicktime_t *file, int granularity, int maxBitRate, int audioTrack, int hintTrack);
  138. int quicktime_set_video_hint_max_rate(quicktime_t *file, int granularity, int maxBitRate, int videoTrack, int hintTrack);
  139. /* number of bytes of raw data in this frame */
  140. long quicktime_frame_size(quicktime_t *file, long frame, int track);
  141. /* get the quicktime track and channel that the audio channel belongs to */
  142. /* channels and tracks start on 0 */
  143. int quicktime_channel_location(quicktime_t *file, int *quicktime_track, int *quicktime_channel, int channel);
  144. /* file positioning */
  145. int quicktime_seek_end(quicktime_t *file);
  146. int quicktime_seek_start(quicktime_t *file);
  147. /* set position of file descriptor relative to a track */
  148. int quicktime_set_audio_position(quicktime_t *file, long sample, int track);
  149. int quicktime_set_video_position(quicktime_t *file, long frame, int track);
  150. /* ========================== Access to raw data follows. */
  151. /* write data for one quicktime track */
  152. /* the user must handle conversion to the channels in this track */
  153. int quicktime_write_audio(quicktime_t *file, char *audio_buffer, long samples, int track);
  154. int quicktime_write_audio_frame(quicktime_t *file, unsigned char *audio_buffer, long bytes, int track);
  155. int quicktime_write_audio_hint(quicktime_t *file, unsigned char *hintBuffer, 
  156. long hintBufferSize, int audioTrack, int hintTrack, long hintSampleDuration);
  157. int quicktime_write_video_frame(quicktime_t *file, unsigned char *video_buffer, long bytes, int track, u_char isKeyFrame, long duration, long renderingOffset);
  158. int quicktime_write_video_hint(quicktime_t *file, unsigned char *hint_buffer, long hintBufferSize, int videoTrack, int hintTrack, long hintSampleDuration, u_char isKeyFrame);
  159. /* for writing a frame using a library that needs a file descriptor */
  160. int quicktime_write_frame_init(quicktime_t *file, int track); /* call before fwrite */
  161. FILE* quicktime_get_fd(quicktime_t *file);     /* return a file descriptor */
  162. int quicktime_write_frame_end(quicktime_t *file, int track); /* call after fwrite */
  163. /* For reading and writing audio to a file descriptor. */
  164. int quicktime_write_audio_end(quicktime_t *file, int track, long samples); /* call after fwrite */
  165. /* Read an entire chunk. */
  166. /* read the number of bytes starting at the byte_start in the specified chunk */
  167. /* You must provide enough space to store the chunk. */
  168. int quicktime_read_chunk(quicktime_t *file, char *output, int track, long chunk, long byte_start, long byte_len);
  169. /* read raw data */
  170. long quicktime_read_audio(quicktime_t *file, char *audio_buffer, long samples, int track);
  171. long quicktime_read_audio_frame(quicktime_t *file, unsigned char *audio_buffer, int maxBytes, int track);
  172. long quicktime_read_frame(quicktime_t *file, unsigned char *video_buffer, int track);
  173. /* for reading frame using a library that needs a file descriptor */
  174. /* Frame caching doesn't work here. */
  175. int quicktime_read_frame_init(quicktime_t *file, int track);
  176. int quicktime_read_frame_end(quicktime_t *file, int track);
  177. /* for RTP hints */
  178. void quicktime_init_hint_sample(u_char* hintBuf, u_int* hintBufSize);
  179. void quicktime_add_hint_packet(u_char* hintBuf, u_int* hintBufSize,
  180. u_int payloadNumber, u_int rtpSeqNum);
  181. void quicktime_add_hint_immed_data(u_char* hintBuf, u_int* hintBufSize, 
  182. u_char* data, u_int length);
  183. void quicktime_add_hint_sample_data(u_char* hintBuf, u_int* hintBufSize, 
  184. u_int fromSampleNum, u_int offset, u_int length);
  185. void quicktime_set_hint_timestamp_offset(u_char* hintBuf, u_int* hintBufSize, int offset);
  186. void quicktime_set_hint_Mbit(u_char* hintBuf);
  187. void quicktime_set_hint_Bframe(u_char* hintBuf);
  188. void quicktime_set_hint_repeat(u_char* hintBuf);
  189. void quicktime_set_hint_repeat_offset(u_char* hintBuf, u_int32_t offset);
  190. int quicktime_dump_hint_sample(u_char* hintBuf);
  191. int quicktime_dump_hint_packet(u_char* hintBuf);
  192. int quicktime_dump_hint_data(u_char* hintBuf);
  193. int quicktime_get_hint_size(u_char* hintBuf);
  194. int quicktime_get_hint_info(u_char* hintBuf, u_int hintBufSize, quicktime_hint_info_t* pHintInfo);
  195. /* ===================== Access to built in codecs follows. */
  196. /* If the codec for this track is supported in the library return 1. */
  197. int quicktime_supported_video(quicktime_t *file, int track);
  198. int quicktime_supported_audio(quicktime_t *file, int track);
  199. /* The codec can generate the color model */
  200. int quicktime_test_colormodel(quicktime_t *file, 
  201. int colormodel, 
  202. int track);
  203. /* Decode or encode the frame into a frame buffer. */
  204. /* All the frame buffers passed to these functions are unsigned char */
  205. /* rows with 3 bytes per pixel.  The byte order per 3 byte pixel is */
  206. /* RGB. */
  207. int quicktime_decode_video(quicktime_t *file, unsigned char **row_pointers, int track);
  208. int quicktime_encode_video(quicktime_t *file, unsigned char **row_pointers, int track);
  209. long quicktime_decode_scaled(quicktime_t *file, 
  210. int in_x,                    /* Location of input frame to take picture */
  211. int in_y,
  212. int in_w,
  213. int in_h,
  214. int out_w,                   /* Dimensions of output frame */
  215. int out_h,
  216. int color_model,             /* One of the color models defined above */
  217. unsigned char **row_pointers, 
  218. int track);
  219. /* Decode or encode audio for a single channel into the buffer. */
  220. /* Pass a buffer for the _i or the _f argument if you want int16 or float data. */
  221. /* Notice that encoding requires an array of pointers to each channel. */
  222. int quicktime_decode_audio(quicktime_t *file, QUICKTIME_INT16 *output_i, float *output_f, long samples, int channel);
  223. int quicktime_encode_audio(quicktime_t *file, QUICKTIME_INT16 **input_i, float **input_f, long samples);
  224. /* Dump the file structures for the currently opened file. */
  225. int quicktime_dump(quicktime_t *file);
  226. /* Specify the number of cpus to utilize. */
  227. int quicktime_set_cpus(quicktime_t *file, int cpus);
  228. /* Specify whether to read contiguously or not. */
  229. /* preload is the number of bytes to read ahead. */
  230. int quicktime_set_preload(quicktime_t *file, long preload);
  231. /* Test the 32 bit overflow */
  232. int quicktime_test_position(quicktime_t *file);
  233. #ifdef __cplusplus
  234. }
  235. #endif
  236. #endif