88 lines
2.1 KiB
C
88 lines
2.1 KiB
C
#ifndef _mpeg_ps_internal_h_
|
|
#define _mpeg_ps_internal_h_
|
|
|
|
#include "mpeg-proto.h"
|
|
#include "mpeg-types.h"
|
|
#include "mpeg-pes-internal.h"
|
|
#include "mpeg-util.h"
|
|
|
|
//#define NSTREAM 48 // 32-audio('110xxxxx') + 16-video('1110xxxx')
|
|
#define N_ACCESS_UNIT 16
|
|
|
|
#define SEQUENCE_END_CODE (0x000001B7)
|
|
|
|
struct ps_pack_header_t
|
|
{
|
|
int mpeg2; // 1-mpeg2, other-mpeg1
|
|
|
|
int64_t system_clock_reference_base;
|
|
uint32_t system_clock_reference_extension;
|
|
|
|
uint32_t program_mux_rate;
|
|
};
|
|
|
|
struct ps_stream_header_t
|
|
{
|
|
uint32_t stream_id : 8;
|
|
uint32_t stream_extid : 8;
|
|
uint32_t buffer_bound_scale : 1;
|
|
uint32_t buffer_size_bound : 13;
|
|
};
|
|
|
|
struct ps_system_header_t
|
|
{
|
|
uint32_t rate_bound;
|
|
uint32_t audio_bound : 6;
|
|
uint32_t fixed_flag : 1;
|
|
uint32_t CSPS_flag : 1;
|
|
uint32_t system_audio_lock_flag : 1;
|
|
uint32_t system_video_lock_flag : 1;
|
|
uint32_t video_bound : 5;
|
|
uint32_t packet_rate_restriction_flag : 1;
|
|
|
|
uint32_t stream_count;
|
|
struct ps_stream_header_t streams[16];
|
|
};
|
|
|
|
struct psm_t
|
|
{
|
|
uint32_t ver : 5; // version_number : 5;
|
|
|
|
struct pes_t streams[16];
|
|
size_t stream_count;
|
|
|
|
int64_t clock; // ms
|
|
};
|
|
|
|
struct psd_t
|
|
{
|
|
uint64_t prev_directory_offset;
|
|
uint64_t next_directory_offset;
|
|
|
|
struct access_unit_t
|
|
{
|
|
uint8_t packet_stream_id;
|
|
uint8_t pes_header_position_offset_sign;
|
|
uint64_t PTS;
|
|
uint64_t pes_header_position_offset;
|
|
uint16_t reference_offset;
|
|
uint32_t bytes_to_read;
|
|
uint8_t packet_stream_id_extension_msbs;
|
|
uint8_t packet_stream_id_extension_lsbs;
|
|
uint8_t intra_coded_indicator;
|
|
uint8_t coding_parameters_indicator;
|
|
} units[N_ACCESS_UNIT];
|
|
};
|
|
|
|
int psm_read(struct psm_t *psm, struct mpeg_bits_t* reader);
|
|
size_t psm_write(const struct psm_t *psm, uint8_t *data);
|
|
|
|
int psd_read(struct psd_t *psd, struct mpeg_bits_t* reader);
|
|
|
|
int pack_header_read(struct ps_pack_header_t *h, struct mpeg_bits_t* reader);
|
|
int system_header_read(struct ps_system_header_t *h, struct mpeg_bits_t* reader);
|
|
size_t pack_header_write(const struct ps_pack_header_t *h, uint8_t *data);
|
|
size_t system_header_write(const struct ps_system_header_t *h, uint8_t *data);
|
|
|
|
#endif /* !_mpeg_ps_internal_h_ */
|