Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

10 місяці тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef _mpeg_ps_internal_h_
  2. #define _mpeg_ps_internal_h_
  3. #include "mpeg-proto.h"
  4. #include "mpeg-types.h"
  5. #include "mpeg-pes-internal.h"
  6. #include "mpeg-util.h"
  7. //#define NSTREAM 48 // 32-audio('110xxxxx') + 16-video('1110xxxx')
  8. #define N_ACCESS_UNIT 16
  9. #define SEQUENCE_END_CODE (0x000001B7)
  10. struct ps_pack_header_t
  11. {
  12. int mpeg2; // 1-mpeg2, other-mpeg1
  13. int64_t system_clock_reference_base;
  14. uint32_t system_clock_reference_extension;
  15. uint32_t program_mux_rate;
  16. };
  17. struct ps_stream_header_t
  18. {
  19. uint32_t stream_id : 8;
  20. uint32_t stream_extid : 8;
  21. uint32_t buffer_bound_scale : 1;
  22. uint32_t buffer_size_bound : 13;
  23. };
  24. struct ps_system_header_t
  25. {
  26. uint32_t rate_bound;
  27. uint32_t audio_bound : 6;
  28. uint32_t fixed_flag : 1;
  29. uint32_t CSPS_flag : 1;
  30. uint32_t system_audio_lock_flag : 1;
  31. uint32_t system_video_lock_flag : 1;
  32. uint32_t video_bound : 5;
  33. uint32_t packet_rate_restriction_flag : 1;
  34. uint32_t stream_count;
  35. struct ps_stream_header_t streams[16];
  36. };
  37. struct psm_t
  38. {
  39. uint32_t ver : 5; // version_number : 5;
  40. struct pes_t streams[16];
  41. size_t stream_count;
  42. int64_t clock; // ms
  43. };
  44. struct psd_t
  45. {
  46. uint64_t prev_directory_offset;
  47. uint64_t next_directory_offset;
  48. struct access_unit_t
  49. {
  50. uint8_t packet_stream_id;
  51. uint8_t pes_header_position_offset_sign;
  52. uint64_t PTS;
  53. uint64_t pes_header_position_offset;
  54. uint16_t reference_offset;
  55. uint32_t bytes_to_read;
  56. uint8_t packet_stream_id_extension_msbs;
  57. uint8_t packet_stream_id_extension_lsbs;
  58. uint8_t intra_coded_indicator;
  59. uint8_t coding_parameters_indicator;
  60. } units[N_ACCESS_UNIT];
  61. };
  62. int psm_read(struct psm_t *psm, struct mpeg_bits_t* reader);
  63. size_t psm_write(const struct psm_t *psm, uint8_t *data);
  64. int psd_read(struct psd_t *psd, struct mpeg_bits_t* reader);
  65. int pack_header_read(struct ps_pack_header_t *h, struct mpeg_bits_t* reader);
  66. int system_header_read(struct ps_system_header_t *h, struct mpeg_bits_t* reader);
  67. size_t pack_header_write(const struct ps_pack_header_t *h, uint8_t *data);
  68. size_t system_header_write(const struct ps_system_header_t *h, uint8_t *data);
  69. #endif /* !_mpeg_ps_internal_h_ */