diff recpt1/tssplitter_lite.h @ 122:4009737ea899

add es output arg: add start_time arg:
author Naoya OYAMA <naoya.oyama@gmail.com>
date Wed, 05 May 2010 20:43:43 +0900
parents e915d31c5bd9
children
line wrap: on
line diff
--- a/recpt1/tssplitter_lite.h	Thu Apr 29 02:02:42 2010 +0900
+++ b/recpt1/tssplitter_lite.h	Wed May 05 20:43:43 2010 +0900
@@ -119,13 +119,14 @@
 typedef struct _program_t
 {
 	int64_t stc;
-	int64_t cue_time;	/* 録画開始時刻 */
+	int64_t cue;		/* 録画開始時刻 */
 	int pmt_packet_id;	/* 該当Program(Service ID)に対応するPMT */
 	int pmt_version;	/* 該当Program(Service ID)に対応するPMTのVersion */
 	int pcr_packet_id;	/* 該当Program(Service ID)のPCRを保持するPID */
 	int64_t pcr1;	/* PCR1 */
 	int64_t pcr2;	/* PCR2 */
-	int packet_nb;	/* PCR計算用カウンタ */
+	int pcr_packet_nb;	/* 直前のPCRを受信したときのパケット数 */
+	int packet_nb;	/* 直前のProgramの処理を実施したときのパケット数 */
 	int64_t pcr_incr;	/* 該当Program(Service ID)に於いて、1つのTSパケットを処理した時に経過する(と想定する時間) */
 	int video_start;		/* VODEO0を蓄積開始している? */
 	int64_t video_pts;		/* 最後に処理したVODEO0のESのPTS */
@@ -133,8 +134,6 @@
 	int audio_nb;			/* PMT に存在する音声ストリームの数 */
 	int video[MAX_VIDEO];	/* PS出力する場合に使うかも */
 	int audio[MAX_AUDIO];	/* PS出力する場合に使うかも */
-	//splitpesbuf_t *pesbuf;
-	//splitesbuf_t *esbuf;
 } program_t;
 /*
  * program_t をサービスID分準備して、使用するイメージでいたけど、
@@ -146,11 +145,10 @@
 typedef struct _splitpesbuf_t
 {
 	program_t *Program;
-	int random_access_indicator; /* TS の random_access_indicator */
 	int64_t pts;
 	int64_t dts;
     int size;
-    u_char buffer[3*1024*1024];
+    u_char buffer[128*1024];
 } splitpesbuf_t;
 
 typedef struct _splitesbuf_t
@@ -165,12 +163,28 @@
     u_char buffer[3*1024*1024];
 } splitesbuf_t;
 
+/* PCR 共有用構造体 */
+typedef struct _pcr_t
+{
+	int pid;
+	int sid_nb; /* PCRを参照しているServiceID(ProgramID)の数 */
+	int sid[MAX_SERVICES];
+} pcr_t;
+
+
 /**
  * splitter構造体
  */
 typedef struct splitter {
+	char *filename; /* ファイル名を上位からもらってくるためのポインタ */
+	char *arg_cue; /* 引数で取得してきた録画開始時刻(HHMISS) */
+	int esout; /* ES出力する? */
 	unsigned char	pids[MAX_PID];
 	unsigned char	pmt_pids[MAX_PID];
+	uint8_t			cat_pids[MAX_PID];
+	uint8_t			pcr_pids[MAX_PID]; /* PCRは複数ServiceID(ProgramID)で共有される */
+	pcr_t			pcr[MAX_SERVICES];
+	int				pcr_nb;
 	unsigned char*	pat;
 	char**			sid_list;
 	unsigned char	pat_count;
@@ -178,17 +192,13 @@
 	int pmt_counter;
 	int avail_pmts[MAX_SERVICES];
 	int num_pmts;
-//	struct timespec tot_offset;
-//	struct timespec STC_timespec;
-	int64_t stc;
-	int64_t cue_time;
-	int status;
 	splitpesbuf_t *pesbuf[MAX_PID];
 	splitesbuf_t *esbuf[MAX_PID];
 	program_t *program;
 	int pid_sid_table[MAX_PID]; /* pid to sid の変換を行うためのテーブル */
-	char *filename; /* ファイル名を上位からもらってくるためのポインタ */
-	int esout; /* ES出力する? */
+	time_t time_cue;
+	time_t time_tot;
+	int tot_packet_nb; /* TOT受信時のパケット受信数 */
 } splitter;
 
 /* b25 decoder would hoard up large chank */
@@ -198,7 +208,7 @@
     u_char buffer[1024*1024];
 } splitbuf_t;
 
-splitter* split_startup(char *sid, char *filename);
+splitter* split_startup(char *sid, char *filename, char *cue_time);
 int split_select(splitter *sp, ARIB_STD_B25_BUFFER *sbuf);
 void split_shutdown(splitter *sp);
 int split_ts(splitter *splitter, ARIB_STD_B25_BUFFER *sbuf, splitbuf_t *dbuf);