00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _MULTIPLEX_H_
00027 #define _MULTIPLEX_H_
00028
00029 #include "mpg_common.h"
00030 #include "pes.h"
00031 #include "element.h"
00032
00033 #define N_AUDIO 32
00034 #define N_AC3 8
00035
00036 typedef struct multiplex_s{
00037 int fd_out;
00038 #define REPLEX_MPEG2 0
00039 #define REPLEX_DVD 1
00040 #define REPLEX_HDTV 2
00041 #define REPLEX_TS_SD 3
00042 #define REPLEX_TS_HD 4
00043 int otype;
00044 int startup;
00045 int finish;
00046
00047
00048 uint64_t video_delay;
00049 uint64_t audio_delay;
00050 int pack_size;
00051 unsigned int data_size;
00052 uint32_t audio_buffer_size;
00053 uint32_t video_buffer_size;
00054 uint32_t mux_rate;
00055 uint32_t muxr;
00056 uint8_t navpack;
00057 #define TIME_ALWAYS 1
00058 #define TIME_IFRAME 2
00059 int frame_timestamps;
00060 int VBR;
00061 int is_ts;
00062 int reset_clocks;
00063 int write_end_codes;
00064 int set_broken_link;
00065 unsigned int vsize, extsize;
00066 int64_t extra_clock;
00067 uint64_t SCR;
00068 uint64_t oldSCR;
00069 uint64_t SCRinc;
00070 index_unit viu;
00071
00072 dummy_buffer vdbuf;
00073
00074 extdata_t ext[N_AUDIO];
00075 int extcnt;
00076
00077 ringbuffer *extrbuffer;
00078 ringbuffer *index_extrbuffer;
00079 ringbuffer *vrbuffer;
00080 ringbuffer *index_vrbuffer;
00081
00082 int (*fill_buffers)(void *p, int f);
00083 void *priv;
00084 } multiplex_t;
00085
00086 void check_times( multiplex_t *mx, int *video_ok, int *ext_ok, int *start);
00087 void write_out_packs( multiplex_t *mx, int video_ok, int *ext_ok);
00088 void finish_mpg(multiplex_t *mx);
00089 void init_multiplex( multiplex_t *mx, sequence_t *seq_head,
00090 audio_frame_t *extframe, int *exttype, int *exttypcnt,
00091 uint64_t video_delay, uint64_t audio_delay, int fd,
00092 int (*fill_buffers)(void *p, int f),
00093 ringbuffer *vrbuffer, ringbuffer *index_vrbuffer,
00094 ringbuffer *extrbuffer, ringbuffer *index_extrbuffer,
00095 int otype);
00096
00097 void setup_multiplex(multiplex_t *mx);
00098 #endif