00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MPEG3DEMUX_H
00021 #define MPEG3DEMUX_H
00022
00023 #include "mpeg3title.h"
00024 #include <stdio.h>
00025
00026 typedef struct
00027 {
00028 struct mpeg3_rec* file;
00029
00030 unsigned char *raw_data;
00031 long raw_offset;
00032 int raw_size;
00033 long packet_size;
00034
00035 int do_audio;
00036 int do_video;
00037
00038 unsigned char *data_buffer;
00039 long data_size;
00040 long data_position;
00041 long data_allocated;
00042
00043 int reverse;
00044
00045 int error_flag;
00046
00047 unsigned char next_char;
00048
00049 double time_offset;
00050 int generating_timecode;
00051
00052
00053 mpeg3_title_t *titles[MPEG3_MAX_STREAMS];
00054 int total_titles;
00055 int current_title;
00056
00057
00058 int astream_table[MPEG3_MAX_STREAMS];
00059 int vstream_table[MPEG3_MAX_STREAMS];
00060
00061
00062 int total_programs;
00063 int current_program;
00064
00065
00066 int current_timecode;
00067
00068
00069 long current_byte;
00070
00071 int transport_error_indicator;
00072 int payload_unit_start_indicator;
00073 int pid;
00074 int transport_scrambling_control;
00075 int adaptation_field_control;
00076 int continuity_counter;
00077 int is_padding;
00078 int pid_table[MPEG3_PIDMAX];
00079 int continuity_counters[MPEG3_PIDMAX];
00080 int total_pids;
00081 int adaptation_fields;
00082 double time;
00083 int audio_pid;
00084 int video_pid;
00085 int astream;
00086 int vstream;
00087 int aformat;
00088 long program_association_tables;
00089 int table_id;
00090 int section_length;
00091 int transport_stream_id;
00092 long pes_packets;
00093 double pes_audio_time;
00094 double pes_video_time;
00095 } mpeg3_demuxer_t;
00096
00097
00098
00099
00100
00101 #define mpeg3demux_error(demuxer) (((mpeg3_demuxer_t *)(demuxer))->error_flag)
00102
00103 #define mpeg3demux_time_offset(demuxer) (((mpeg3_demuxer_t *)(demuxer))->time_offset)
00104
00105 #define mpeg3demux_current_time(demuxer) (((mpeg3_demuxer_t *)(demuxer))->time + ((mpeg3_demuxer_t *)(demuxer))->time_offset)
00106
00107 #define mpeg3demux_read_char(demuxer) \
00108 ((((mpeg3_demuxer_t *)(demuxer))->data_position < ((mpeg3_demuxer_t *)(demuxer))->data_size) ? \
00109 ((mpeg3_demuxer_t *)(demuxer))->data_buffer[((mpeg3_demuxer_t *)(demuxer))->data_position++] : \
00110 mpeg3demux_read_char_packet(demuxer))
00111
00112 #define mpeg3demux_read_prev_char(demuxer) \
00113 ((((mpeg3_demuxer_t *)(demuxer))->data_position != 0) ? \
00114 ((mpeg3_demuxer_t *)(demuxer))->data_buffer[((mpeg3_demuxer_t *)(demuxer))->data_position--] : \
00115 mpeg3demux_read_prev_char_packet(demuxer))
00116
00117
00118 #endif