From 9fc6e3611410244a90f8199e9964f04421a950a5 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Wed, 4 Dec 2013 22:17:22 +0000 Subject: [PATCH] tsfile: cmdline flag to specify ATSC input Previously all standard DVB and ATSC tables were installed, this would cause the initscan to time out. We try and be more clever with determining the type, but this will do for now. The code allows the option to be per mux (file), but the cmdline is currently limited to a global setting, which is likely to be more than enough. --- src/input/mpegts/tsfile.h | 2 +- src/input/mpegts/tsfile/tsfile.c | 4 ++-- src/input/mpegts/tsfile/tsfile_input.c | 23 ++++++++++++----------- src/input/mpegts/tsfile/tsfile_mux.c | 3 ++- src/input/mpegts/tsfile/tsfile_private.h | 4 ++-- src/main.c | 6 ++++-- 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/input/mpegts/tsfile.h b/src/input/mpegts/tsfile.h index 6a9e0f7b..54ec1ae9 100644 --- a/src/input/mpegts/tsfile.h +++ b/src/input/mpegts/tsfile.h @@ -29,7 +29,7 @@ struct mpegts_network; void tsfile_init ( int tuners ); /* Add a new file (multiplex) */ -void tsfile_add_file ( const char *path ); +void tsfile_add_file ( const char *path, int atsc ); #endif /* __TVH_TSFILE_H__ */ diff --git a/src/input/mpegts/tsfile/tsfile.c b/src/input/mpegts/tsfile/tsfile.c index d05fe469..d35b472f 100644 --- a/src/input/mpegts/tsfile/tsfile.c +++ b/src/input/mpegts/tsfile/tsfile.c @@ -83,7 +83,7 @@ void tsfile_init ( int tuners ) /* * Add multiplex */ -void tsfile_add_file ( const char *path ) +void tsfile_add_file ( const char *path, int atsc ) { mpegts_input_t *mi; mpegts_mux_t *mm; @@ -94,7 +94,7 @@ void tsfile_add_file ( const char *path ) /* Create physical instance (for each tuner) */ LIST_FOREACH(mi, &tsfile_inputs, mi_global_link) - tsfile_mux_instance_create(path, mi, mm); + tsfile_mux_instance_create(path, mi, mm, atsc); } /****************************************************************************** diff --git a/src/input/mpegts/tsfile/tsfile_input.c b/src/input/mpegts/tsfile/tsfile_input.c index 95f2a24d..28c2bb57 100644 --- a/src/input/mpegts/tsfile/tsfile_input.c +++ b/src/input/mpegts/tsfile/tsfile_input.c @@ -216,18 +216,19 @@ tsfile_input_start_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *t ) /* Install table handlers */ mpegts_table_add(mm, DVB_PAT_BASE, DVB_PAT_MASK, dvb_pat_callback, NULL, "pat", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_PAT_PID); - mpegts_table_add(mm, DVB_SDT_BASE, DVB_SDT_MASK, dvb_sdt_callback, - NULL, "sdt", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_SDT_PID); - mpegts_table_add(mm, DVB_BAT_BASE, DVB_BAT_MASK, dvb_bat_callback, - NULL, "bat", MT_CRC, DVB_BAT_PID); - mpegts_table_add(mm, DVB_VCT_T_BASE, DVB_VCT_MASK, atsc_vct_callback, - NULL, "vct", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_VCT_PID); - mpegts_table_add(mm, DVB_VCT_C_BASE, DVB_VCT_MASK, atsc_vct_callback, - NULL, "vct", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_VCT_PID); -#if 0 + if (!mmi->mmi_tsfile_atsc) { + mpegts_table_add(mm, DVB_SDT_BASE, DVB_SDT_MASK, dvb_sdt_callback, + NULL, "sdt", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_SDT_PID); + mpegts_table_add(mm, DVB_BAT_BASE, DVB_BAT_MASK, dvb_bat_callback, + NULL, "bat", MT_CRC, DVB_BAT_PID); + } else { + mpegts_table_add(mm, DVB_VCT_T_BASE, DVB_VCT_MASK, atsc_vct_callback, + NULL, "vct", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_VCT_PID); + mpegts_table_add(mm, DVB_VCT_C_BASE, DVB_VCT_MASK, atsc_vct_callback, + NULL, "vct", MT_QUICKREQ | MT_CRC | MT_RECORD, DVB_VCT_PID); + } mpegts_table_add(mm, 0x1, 0xff, dvb_cat_callback, NULL, "cat", - MT_CRC, 1); -#endif + MT_CRC, DVB_CAT_PID); return 0; } diff --git a/src/input/mpegts/tsfile/tsfile_mux.c b/src/input/mpegts/tsfile/tsfile_mux.c index 380175ea..6256a96e 100644 --- a/src/input/mpegts/tsfile/tsfile_mux.c +++ b/src/input/mpegts/tsfile/tsfile_mux.c @@ -24,7 +24,7 @@ extern const idclass_t mpegts_mux_instance_class; tsfile_mux_instance_t * tsfile_mux_instance_create - ( const char *path, mpegts_input_t *mi, mpegts_mux_t *mm ) + ( const char *path, mpegts_input_t *mi, mpegts_mux_t *mm, int atsc ) { #define tsfile_mux_instance_class mpegts_mux_instance_class tsfile_mux_instance_t *mmi = @@ -32,6 +32,7 @@ tsfile_mux_instance_create #undef tsfile_mux_instance_class mmi->mmi_tsfile_path = strdup(path); mmi->mmi_tsfile_pcr_pid = 0; + mmi->mmi_tsfile_atsc = atsc; tvhtrace("tsfile", "mmi created %p path %s", mmi, mmi->mmi_tsfile_path); return mmi; } diff --git a/src/input/mpegts/tsfile/tsfile_private.h b/src/input/mpegts/tsfile/tsfile_private.h index 8df1c4c4..36a9d6e9 100644 --- a/src/input/mpegts/tsfile/tsfile_private.h +++ b/src/input/mpegts/tsfile/tsfile_private.h @@ -50,10 +50,10 @@ struct tsfile_mux_instance * File input */ + int mmi_tsfile_atsc; ///< ATSC input char *mmi_tsfile_path; ///< Source file path th_pipe_t mmi_tsfile_pipe; ///< Thread control pipe uint16_t mmi_tsfile_pcr_pid; ///< Timing control - }; /* @@ -62,7 +62,7 @@ struct tsfile_mux_instance mpegts_input_t *tsfile_input_create ( int idx ); tsfile_mux_instance_t *tsfile_mux_instance_create - ( const char *path, mpegts_input_t *mi, mpegts_mux_t *mm ); + ( const char *path, mpegts_input_t *mi, mpegts_mux_t *mm, int atsc ); mpegts_mux_t * tsfile_mux_create ( mpegts_network_t *mn ); diff --git a/src/main.c b/src/main.c index 63231899..7252be9f 100644 --- a/src/main.c +++ b/src/main.c @@ -424,7 +424,8 @@ main(int argc, char **argv) opt_fileline = 0, opt_threadid = 0, opt_ipv6 = 0, - opt_tsfile_tuner = 0; + opt_tsfile_tuner = 0, + opt_tsfile_atsc = 0; const char *opt_config = NULL, *opt_user = NULL, *opt_group = NULL, @@ -492,6 +493,7 @@ main(int argc, char **argv) { 0, NULL, "TODO: testing", OPT_BOOL, NULL }, { 0, "tsfile_tuners", "Number of tsfile tuners", OPT_INT, &opt_tsfile_tuner }, { 0, "tsfile", "tsfile input (mux file)", OPT_STR_LIST, &opt_tsfile }, + { 0, "tsfile_atsc", "tsfile input is ATSC", OPT_INT, &opt_tsfile_atsc } }; @@ -713,7 +715,7 @@ main(int argc, char **argv) if(opt_tsfile.num) { tsfile_init(opt_tsfile_tuner ?: opt_tsfile.num); for (i = 0; i < opt_tsfile.num; i++) - tsfile_add_file(opt_tsfile.str[i]); + tsfile_add_file(opt_tsfile.str[i], opt_tsfile_atsc); } #endif #if ENABLE_IPTV