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

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef LIBMPEG3_H
  2. #define LIBMPEG3_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include "mpeg3private.h"
  7. /* Supported color models for mpeg3_read_frame */
  8. #define MPEG3_RGB565 2
  9. #define MPEG3_BGR888 0
  10. #define MPEG3_BGRA8888 1
  11. #define MPEG3_RGB888 3
  12. #define MPEG3_RGBA8888 4
  13. #define MPEG3_RGBA16161616 5
  14. /* Color models for the 601 to RGB conversion */
  15. /* 601 not implemented for scalar code */
  16. #define MPEG3_601_RGB565 11
  17. #define MPEG3_601_BGR888 7
  18. #define MPEG3_601_BGRA8888 8
  19. #define MPEG3_601_RGB888 9
  20. #define MPEG3_601_RGBA8888 10
  21. /* Supported color models for mpeg3_read_yuvframe */ 
  22. #define MPEG3_YUV420P 12
  23. #define MPEG3_YUV422P 13
  24. /* Check for file compatibility.  Return 1 if compatible. */
  25. int mpeg3_check_sig(const char *path);
  26. /* Open the MPEG3 stream. */
  27. mpeg3_t* mpeg3_open(const char *path);
  28. /* Open the MPEG3 stream and copy the tables from an already open stream. */
  29. /* Eliminates the initial timecode search. */
  30. mpeg3_t* mpeg3_open_copy(const char *path, mpeg3_t *old_file);
  31. int mpeg3_close(mpeg3_t *file);
  32. /* Performance */
  33. /* Query the MPEG3 stream about audio. */
  34. int mpeg3_has_audio(mpeg3_t *file);
  35. int mpeg3_total_astreams(mpeg3_t *file);             /* Number of multiplexed audio streams */
  36. int mpeg3_audio_channels(mpeg3_t *file, int stream);
  37. int mpeg3_sample_rate(mpeg3_t *file, int stream);
  38. char* mpeg3_audio_format(mpeg3_t *file, int stream);
  39.   int mpeg3_audio_samples_per_frame(mpeg3_t *file, int stream);
  40.   uint32_t mpeg3_audio_get_number_of_frames(mpeg3_t *file, int stream);
  41. /* Total length obtained from the timecode. */
  42. /* For DVD files, this is unreliable. */
  43. /* Read a PCM buffer of audio from 1 channel and advance the position. */
  44. /* Return a 1 if error. */
  45. /* Stream defines the number of the multiplexed stream to read. */
  46. /* If both output arguments are null the audio is not rendered. */
  47. #if 0
  48. int mpeg3_read_audio(mpeg3_t *file, 
  49. float *output_f,      /* Pointer to pre-allocated buffer of floats */
  50. short *output_i,      /* Pointer to pre-allocated buffer of int16's */
  51. int channel,          /* Channel to decode */
  52. long samples,         /* Number of samples to decode */
  53. int stream);          /* Stream containing the channel */
  54. /* Reread the last PCM buffer from a different channel and advance the position */
  55. int mpeg3_reread_audio(mpeg3_t *file, 
  56. float *output_f,      /* Pointer to pre-allocated buffer of floats */
  57. short *output_i,      /* Pointer to pre-allocated buffer of int16's */
  58. int channel,          /* Channel to decode */
  59. long samples,         /* Number of samples to decode */
  60. int stream);          /* Stream containing the channel */
  61. /* Read the next compressed audio chunk.  Store the size in size and return a  */
  62. /* 1 if error. */
  63. /* Stream defines the number of the multiplexed stream to read. */
  64. int mpeg3_read_audio_chunk(mpeg3_t *file, 
  65. unsigned char *output, 
  66. long *size, 
  67. long max_size,
  68. int stream);
  69. #endif
  70.   int mpeg3_read_audio_frame(mpeg3_t *file,
  71.      unsigned char **output,
  72.      uint32_t *size,
  73.      uint32_t *max_size,
  74.      int stream);
  75.   int mpeg3_get_audio_format(mpeg3_t *file, int stream);
  76. /* Query the stream about video. */
  77. int mpeg3_has_video(mpeg3_t *file);
  78. int mpeg3_total_vstreams(mpeg3_t *file);            /* Number of multiplexed video streams */
  79. int mpeg3_video_width(mpeg3_t *file, int stream);
  80. int mpeg3_video_height(mpeg3_t *file, int stream);
  81. float mpeg3_aspect_ratio(mpeg3_t *file, int stream); /* aspect ratio.  0 if none */
  82. float mpeg3_frame_rate(mpeg3_t *file, int stream);  /* Frames/sec */
  83. /* Total length.   */
  84. /* For DVD files, this is 1 indicating only percentage seeking is available. */
  85. long mpeg3_video_frames(mpeg3_t *file, int stream);
  86. int mpeg3_set_frame(mpeg3_t *file, long frame, int stream); /* Seek to a frame */
  87. int mpeg3_skip_frames();
  88. long mpeg3_get_frame(mpeg3_t *file, int stream);            /* Tell current position */
  89. /* Seek all the tracks based on a percentage of the total bytes in the  */
  90. /* file or the total */
  91. /* time in a toc if one exists.  Percentage is a 0 to 1 double. */
  92. /* This eliminates the need for tocs and 64 bit longs but doesn't  */
  93. /* give frame accuracy. */
  94. int mpeg3_seek_percentage(mpeg3_t *file, double percentage);
  95. int mpeg3_seek_audio_percentage(mpeg3_t *file, int stream, double percentage);
  96. int mpeg3_seek_video_percentage(mpeg3_t *file, int stream, double percentage);
  97. double mpeg3_tell_percentage(mpeg3_t *file);
  98. int mpeg3_previous_frame(mpeg3_t *file, int stream);
  99. int mpeg3_end_of_audio(mpeg3_t *file, int stream);
  100. int mpeg3_end_of_video(mpeg3_t *file, int stream);
  101. /* Give the seconds time in the last packet read */
  102. /* Read a frame.  The dimensions of the input area and output frame must be supplied. */
  103. /* The frame is taken from the input area and scaled to fit the output frame in 1 step. */
  104. /* Stream defines the number of the multiplexed stream to read. */
  105. /* The last row of **output_rows must contain 4 extra bytes for scratch work. */
  106. /* Read the next compressed frame including headers. */
  107. /* Store the size in size and return a 1 if error. */
  108. /* Stream defines the number of the multiplexed stream to read. */
  109. int mpeg3_read_video_chunk(mpeg3_t *file, 
  110. unsigned char *output, 
  111. long *size, 
  112. long max_size,
  113. int stream);
  114.   int mpeg3_read_video_chunk_resize(mpeg3_t *file,
  115.     unsigned char **output,
  116.     long *size,
  117.     int stream);
  118.   void mpeg3_read_video_chunk_cleanup(mpeg3_t *file, int stream);
  119. /* Master control */
  120. int mpeg3_total_programs();
  121. int mpeg3_set_program(int program);
  122. #ifdef __cplusplus
  123. }
  124. #endif
  125. #endif