Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

112 rindas
4.3KB

  1. #ifndef _mpeg_ps_h_
  2. #define _mpeg_ps_h_
  3. #include <stdint.h>
  4. #include <stddef.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. #include "mpeg-proto.h"
  9. enum
  10. {
  11. STREAM_VIDEO_MPEG4 = PSI_STREAM_MPEG4,
  12. STREAM_VIDEO_H264 = PSI_STREAM_H264,
  13. STREAM_VIDEO_H265 = PSI_STREAM_H265,
  14. STREAM_VIDEO_SVAC = PSI_STREAM_VIDEO_SVAC,
  15. STREAM_AUDIO_MP3 = PSI_STREAM_AUDIO_MPEG1,
  16. STREAM_AUDIO_AAC = PSI_STREAM_AAC,
  17. STREAM_AUDIO_EAC3 = PSI_STREAM_AUDIO_EAC3,
  18. STREAM_AUDIO_G711A = PSI_STREAM_AUDIO_G711A,
  19. STREAM_AUDIO_G711U = PSI_STREAM_AUDIO_G711U,
  20. STREAM_AUDIO_G722 = PSI_STREAM_AUDIO_G722,
  21. STREAM_AUDIO_G723 = PSI_STREAM_AUDIO_G723,
  22. STREAM_AUDIO_G729 = PSI_STREAM_AUDIO_G729,
  23. STREAM_AUDIO_SVAC = PSI_STREAM_AUDIO_SVAC,
  24. STREAM_AUDIO_OPUS = PSI_STREAM_AUDIO_OPUS,
  25. };
  26. // e.g.: deprecated STREAM_VIDEO_H264, please use with PSI_STREAM_H264
  27. //#pragma deprecated(STREAM_VIDEO_MPEG4,STREAM_VIDEO_H264,STREAM_VIDEO_H265,STREAM_VIDEO_SVAC,STREAM_AUDIO_MP3,STREAM_AUDIO_AAC,STREAM_AUDIO_EAC3,STREAM_AUDIO_G711A,STREAM_AUDIO_G711U,STREAM_AUDIO_G722,STREAM_AUDIO_G723,STREAM_AUDIO_G729,STREAM_AUDIO_SVAC,STREAM_AUDIO_OPUS)
  28. struct ps_muxer_func_t
  29. {
  30. /// alloc new packet
  31. /// @param[in] param user-defined parameter(by ps_muxer_create)
  32. /// @param[in] bytes alloc memory size in byte
  33. /// @return memory pointer
  34. void* (*alloc)(void* param, size_t bytes);
  35. /// free packet
  36. /// @param[in] param user-defined parameter(by ps_muxer_create)
  37. /// @param[in] packet PS packet pointer(alloc return pointer)
  38. void (*free)(void* param, void* packet);
  39. /// callback on PS packet done
  40. /// @param[in] param user-defined parameter(by ps_muxer_create)
  41. /// @param[in] stream stream id, return by ps_muxer_add_stream
  42. /// @param[in] packet PS packet pointer(alloc return pointer)
  43. /// @param[in] bytes packet size
  44. /// @return 0-ok, other-error
  45. int (*write)(void* param, int stream, void* packet, size_t bytes);
  46. };
  47. struct ps_muxer_t;
  48. struct ps_muxer_t* ps_muxer_create(const struct ps_muxer_func_t *func, void* param);
  49. int ps_muxer_destroy(struct ps_muxer_t* muxer);
  50. /// Add audio/video stream
  51. /// @param[in] codecid PSI_STREAM_H264/PSI_STREAM_H265/PSI_STREAM_AAC, see more @mpeg-ts-proto.h
  52. /// @param[in] extradata itu h.222.0 program and program element descriptors, NULL for H.264/H.265/AAC
  53. /// @param[in] bytes extradata size in byte
  54. /// @return <=0-error, >0-audio/video stream id
  55. int ps_muxer_add_stream(struct ps_muxer_t* muxer, int codecid, const void* extradata, size_t bytes);
  56. /// input ES
  57. /// @param[in] muxer MPEG-2 Program Stream packer(ps_muxer_create)
  58. /// @param[in] stream stream id, return by ps_muxer_add_stream
  59. /// @param[in] flags 0x0001-video IDR frame, 0x8000-H.264/H.265 with AUD
  60. /// @param[in] pts presentation time stamp(in 90KHZ)
  61. /// @param[in] dts decoding time stamp(in 90KHZ)
  62. /// @param[in] data ES memory
  63. /// @param[in] bytes ES length in byte
  64. /// @return 0-ok, ENOMEM-alloc failed, <0-error
  65. int ps_muxer_input(struct ps_muxer_t* muxer, int stream, int flags, int64_t pts, int64_t dts, const void* data, size_t bytes);
  66. /// @param[in] codecid 0-unknown, other-enum EPSI_STREAM_TYPE, see more @mpeg-ts-proto.h
  67. /// @return 0-ok, other-error
  68. typedef int (*ps_demuxer_onpacket)(void* param, int stream, int codecid, int flags, int64_t pts, int64_t dts, const void* data, size_t bytes);
  69. struct ps_demuxer_t;
  70. struct ps_demuxer_t* ps_demuxer_create(ps_demuxer_onpacket onpacket, void* param);
  71. int ps_demuxer_destroy(struct ps_demuxer_t* demuxer);
  72. /// ps_demuxer_input return consumed bytes, the remain data MUST save and merge with next packet
  73. /// int n = ps_demuxer_input(demuxer, data, bytes);
  74. /// if(n >= 0 && n < bytes)
  75. /// memcpy(NEXTBUFFER, data + n, bytes - n);
  76. ///
  77. /// @return >=0-consume bytes, <0-error
  78. int ps_demuxer_input(struct ps_demuxer_t* demuxer, const uint8_t* data, size_t bytes);
  79. struct ps_demuxer_notify_t
  80. {
  81. /// @param[in] param ps_demuxer_set_notify param
  82. /// @param[in] stream ps stream id
  83. /// @param[in] codecid ps codecid, e.g. STREAM_VIDEO_H264
  84. /// @param[in] extra stream extra data
  85. /// @param[in] bytes extra data length
  86. /// @param[in] finish 0-have more stream, 1-no more streams
  87. void (*onstream)(void* param, int stream, int codecid, const void* extra, int bytes, int finish);
  88. };
  89. /// Set ps notify on PSM change
  90. void ps_demuxer_set_notify(struct ps_demuxer_t* demuxer, struct ps_demuxer_notify_t* notify, void* param);
  91. #ifdef __cplusplus
  92. }
  93. #endif
  94. #endif /* !_mpeg_ps_h_ */