Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

100 linhas
2.6KB

  1. #ifndef _mpeg_pes_internal_h_
  2. #define _mpeg_pes_internal_h_
  3. #include "mpeg-proto.h"
  4. #include "mpeg-types.h"
  5. #include "mpeg-util.h"
  6. enum {
  7. MPEG_ERROR_NEED_MORE_DATA = 0,
  8. MPEG_ERROR_OK,
  9. MPEG_ERROR_INVALID_DATA,
  10. };
  11. struct packet_t
  12. {
  13. uint8_t sid;
  14. uint8_t codecid;
  15. int flags;
  16. int64_t pts;
  17. int64_t dts;
  18. uint8_t *data;
  19. size_t size;
  20. size_t capacity;
  21. int vcl; // h.264/h.265 only
  22. };
  23. struct pes_t
  24. {
  25. uint16_t pn; // TS program number(0-ps)
  26. uint16_t pid; // PES PID : 13
  27. uint8_t sid; // PES stream_id : 8
  28. uint8_t codecid; // PMT/PSM stream_type : 8
  29. uint8_t cc; // continuity_counter : 4;
  30. uint8_t* esinfo; // es_info
  31. uint16_t esinfo_len;// es_info_length : 12
  32. uint32_t len; // PES_packet_length : 16;
  33. uint32_t reserved10 : 2;
  34. uint32_t PES_scrambling_control : 2;
  35. uint32_t PES_priority : 1;
  36. uint32_t data_alignment_indicator : 1;
  37. uint32_t copyright : 1;
  38. uint32_t original_or_copy : 1;
  39. uint32_t PTS_DTS_flags : 2;
  40. uint32_t ESCR_flag : 1;
  41. uint32_t ES_rate_flag : 1;
  42. uint32_t DSM_trick_mode_flag : 1;
  43. uint32_t additional_copy_info_flag : 1;
  44. uint32_t PES_CRC_flag : 1;
  45. uint32_t PES_extension_flag : 1;
  46. uint32_t PES_header_data_length : 8;
  47. int64_t pts;
  48. int64_t dts;
  49. int64_t ESCR_base;
  50. uint32_t ESCR_extension;
  51. uint32_t ES_rate;
  52. //uint8_t trick_mode;
  53. //uint32_t trick_mode_control : 3;
  54. //uint32_t field_id : 2;
  55. //uint32_t intra_slice_refresh : 1;
  56. //uint32_t frequency_truncation : 2;
  57. //uint8_t additional_copy_info;
  58. //int16_t previous_PES_packet_CRC;
  59. //uint32_t PES_private_data_flag : 1;
  60. //uint32_t pack_header_field_flag : 1;
  61. //uint32_t program_packet_sequence_counter_flag : 1;
  62. //uint32_t P_STD_buffer_flag : 1;
  63. //uint32_t reserved_ : 3;
  64. //uint32_t PES_extension_flag_2 : 1;
  65. //uint32_t PES_private_data_flag2 : 1;
  66. //uint8_t PES_private_data[128/8];
  67. //uint32_t pack_field_length : 8;
  68. int have_pes_header; // TS demuxer only
  69. int flags; // TS/PS demuxer only
  70. struct packet_t pkt;
  71. };
  72. int pes_read_header(struct pes_t *pes, struct mpeg_bits_t* reader);
  73. int pes_read_mpeg1_header(struct pes_t* pes, struct mpeg_bits_t* reader);
  74. size_t pes_write_header(const struct pes_t *pes, uint8_t* data, size_t bytes);
  75. typedef int (*pes_packet_handler)(void* param, int program, int stream, int codecid, int flags, int64_t pts, int64_t dts, const void* data, size_t bytes);
  76. int pes_packet(struct packet_t* pkt, struct pes_t* pes, const void* data, size_t size, int start, pes_packet_handler handler, void* param);
  77. uint16_t mpeg_bits_read15(struct mpeg_bits_t* reader);
  78. uint32_t mpeg_bits_read30(struct mpeg_bits_t* reader);
  79. uint64_t mpeg_bits_read45(struct mpeg_bits_t* reader);
  80. #endif /* !_mpeg_pes_internal_h_ */