Mercurial > pt1.oyama
diff src/recpt1.h @ 124:9c7bc6c0327e
Add DLNA server function test. (from uShare project)
author | naoyan@johnstown.minaminoshima.org |
---|---|
date | Wed, 29 Sep 2010 23:18:55 +0900 |
parents | recpt1/recpt1.h@aeba1988234f |
children | e413158cae13 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/recpt1.h Wed Sep 29 23:18:55 2010 +0900 @@ -0,0 +1,104 @@ +/* -*- tab-width: 4; indent-tabs-mode: nil -*- */ +#ifndef _RECPT1_H_ +#define _RECPT1_H_ +#include <sys/types.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <netinet/in.h> +#include "decoder.h" +#include "tssplitter_lite.h" + +#define HAVE_LIBARIB25 1 +#define NUM_BSDEV 8 +#define NUM_ISDB_T_DEV 8 +#define CHTYPE_SATELLITE 0 /* satellite digital */ +#define CHTYPE_GROUND 1 /* terrestrial digital */ +#define MAX_QUEUE 8192 +#define MAX_READ_SIZE (188 * 87) /* 188*87=16356 splitterが188アライメントを期待しているのでこの数字とする*/ +#define WRITE_SIZE (1024 * 1024 * 2) +#define TRUE 1 +#define FALSE 0 +#define STREAM_MAX (16) + + +/* type definitions */ +typedef int boolean; + +typedef struct _BUFSZ { + int size; + u_char buffer[MAX_READ_SIZE]; +} BUFSZ; + +typedef struct _QUEUE_T { + unsigned int in; // 次に入れるインデックス + unsigned int out; // 次に出すインデックス + unsigned int size; // キューのサイズ + unsigned int num_avail; // 満タンになると 0 になる + unsigned int num_used; // 空っぽになると 0 になる + pthread_mutex_t mutex; + pthread_cond_t cond_avail; // データが満タンのときに待つための cond + pthread_cond_t cond_used; // データが空のときに待つための cond + BUFSZ *buffer[1]; // バッファポインタ +} QUEUE_T; + +typedef struct _STREAM_QUEUE_T { + unsigned int in; // 次に入れるインデックス + unsigned int out; // 次に出すインデックス + unsigned int size; // キューのサイズ + unsigned int num_avail; // 満タンになると 0 になる + unsigned int num_used; // 空っぽになると 0 になる + pthread_mutex_t mutex; + pthread_cond_t cond_avail; // データが満タンのときに待つための cond + pthread_cond_t cond_used; // データが空のときに待つための cond + ARIB_STD_B25_BUFFER *buffer[1]; // バッファポインタ +} STREAM_QUEUE_T; + +typedef struct _ISDB_T_FREQ_CONV_TABLE { + int set_freq; // 実際にioctl()を行う値 + int type; // チャンネルタイプ + int add_freq; // 追加する周波数(BS/CSの場合はスロット番号) + char *parm_freq; // パラメータで受ける値 +} ISDB_T_FREQ_CONV_TABLE; + +typedef struct sock_data { + int sfd; /* socket fd */ + struct sockaddr_in addr; +} sock_data; + +typedef struct _session { + int id; + int is_valid; + QUEUE_T *p_queue; +} session; + +typedef struct _streamer { + pthread_mutex_t mutex; //open、close、(recpt1からの)write + int stream_nr; + session *stream_session[STREAM_MAX]; //NULL止めの配列 +} streamer; + +typedef struct thread_data { + QUEUE_T *queue; + QUEUE_T *stream_queue; + decoder *decoder; + decoder_options *dopt; + int ch; + int lnb; /* LNB voltage */ + int tfd; /* tuner fd */ + int wfd; /* output file fd */ + ISDB_T_FREQ_CONV_TABLE *table; + sock_data *sock_data; + pthread_t signal_thread; + int recsec; + time_t start_time; + boolean indefinite; + int msqid; + splitter *splitter; + streamer *streamer; +} thread_data; + +QUEUE_T *create_queue(size_t size); +BUFSZ * dequeue(QUEUE_T *p_queue); +void destroy_queue(QUEUE_T *p_queue); + +#endif