From 523c47de37197b35b0c1e700f83252bde9f01180 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Tue, 30 Apr 2013 12:06:59 +0100 Subject: [PATCH] iptv: added some missing functions --- src/input/mpegts.h | 19 +++++++++++------ src/input/mpegts/iptv/iptv.c | 34 +++++++++++++++---------------- src/input/mpegts/mpegts_input.c | 18 ++++++++++++++++ src/input/mpegts/mpegts_network.c | 7 +++++++ 4 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 9fc82154..d73f1e28 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -36,8 +36,9 @@ typedef struct mpegts_input mpegts_input_t; typedef struct mpegts_table_feed mpegts_table_feed_t; /* Lists */ -typedef TAILQ_HEAD(mpegts_mux_queue,mpegts_mux) mpegts_mux_queue_t; -typedef LIST_HEAD (mpegts_mux_list,mpegts_mux) mpegts_mux_list_t; +typedef LIST_HEAD (mpegts_input_list,mpegts_input) mpegts_input_list_t; +typedef TAILQ_HEAD(mpegts_mux_queue,mpegts_mux) mpegts_mux_queue_t; +typedef LIST_HEAD (mpegts_mux_list,mpegts_mux) mpegts_mux_list_t; TAILQ_HEAD(mpegts_table_feed_queue, mpegts_table_feed); /* ************************************************************************** @@ -125,7 +126,6 @@ struct mpegts_network */ char *mn_network_name; - //uint16_t mn_network_id; // ONID/NID?? /* * Scanning @@ -135,6 +135,11 @@ struct mpegts_network int mn_initial_scan_num; gtimer_t mn_initial_scan_timer; + /* + * Inputs + */ + mpegts_input_list_t mn_inputs; + /* * Multiplexes */ @@ -354,8 +359,8 @@ struct mpegts_input LIST_ENTRY(mpegts_input) mi_global_link; - - mpegts_network_t *mi_network; // TODO: this may need altering for DVB-S + mpegts_network_t *mi_network; + LIST_ENTRY(mpegts_input) mi_network_link; LIST_HEAD(,mpegts_mux_instance) mi_mux_active; @@ -382,7 +387,7 @@ struct mpegts_input */ int (*mi_start_mux) (mpegts_input_t*,mpegts_mux_instance_t*); - void (*mi_stop_mux) (mpegts_input_t*); + void (*mi_stop_mux) (mpegts_input_t*,mpegts_mux_instance_t*); void (*mi_open_service) (mpegts_input_t*,mpegts_service_t*); void (*mi_close_service) (mpegts_input_t*,mpegts_service_t*); int (*mi_is_free) (mpegts_input_t*); @@ -411,6 +416,8 @@ mpegts_network_t *mpegts_network_create0 void mpegts_network_schedule_initial_scan ( mpegts_network_t *mm ); +void mpegts_network_add_input ( mpegts_network_t *mn, mpegts_input_t *mi ); + mpegts_mux_t *mpegts_mux_create0 ( mpegts_mux_t *mm, const idclass_t *class, const char *uuid, mpegts_network_t *mn, uint16_t onid, uint16_t tsid ); diff --git a/src/input/mpegts/iptv/iptv.c b/src/input/mpegts/iptv/iptv.c index 2a5b3ad7..64d4e14b 100644 --- a/src/input/mpegts/iptv/iptv.c +++ b/src/input/mpegts/iptv/iptv.c @@ -161,7 +161,7 @@ iptv_input_start_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi ) } static void -iptv_input_stop_mux ( mpegts_input_t *mi ) +iptv_input_stop_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi ) { } @@ -246,11 +246,19 @@ const idclass_t iptv_network_class = { } }; +static mpegts_mux_t * +iptv_network_create_mux + ( mpegts_mux_t *mm, uint16_t onid, uint16_t tsid, void *aux ) +{ + return NULL; +} + static mpegts_service_t * iptv_network_create_service ( mpegts_mux_t *mm, uint16_t sid, uint16_t pmt_pid ) { - return NULL; + return (mpegts_service_t*) + iptv_service_create(NULL, (iptv_mux_t*)mm, sid, pmt_pid); } /* @@ -259,30 +267,22 @@ iptv_network_create_service void iptv_init ( void ) { /* Init Input */ -#if 0 - mpegts_input_init((mpegts_input_t*)&iptv_input, - &itpv_input_class, NULL); -#endif + mpegts_input_create0((mpegts_input_t*)&iptv_input, + &iptv_input_class, NULL); iptv_input.mi_start_mux = iptv_input_start_mux; iptv_input.mi_stop_mux = iptv_input_stop_mux; iptv_input.mi_is_free = iptv_input_is_free; iptv_input.mi_current_weight = iptv_input_current_weight; -#if 0 // Use defaults - iptv_input.mi_open_service = iptv_input_open_service; - iptv_input.mi_close_sevice = iptv_input_close_service; -#endif /* Init Network */ -#if 0 - mpegts_network_init((mpegts_network_t*)&iptv_network, - &iptv_network_class, NULL); -#endif - iptv_network.mn_network_name = strdup("IPTV Network"); + mpegts_network_create0((mpegts_network_t*)&iptv_network, + &iptv_network_class, NULL, "IPTV Network"); + iptv_network.mn_create_mux = iptv_network_create_mux; iptv_network.mn_create_service = iptv_network_create_service; /* Link */ - iptv_input.mi_network = (mpegts_network_t*)&iptv_network; - //iptv_network.mn_input = (mpegts_input_t*)&iptv_input; + mpegts_network_add_input((mpegts_network_t*)&iptv_network, + (mpegts_input_t*)&iptv_input); /* Setup thread */ // TODO: could set this up only when needed diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 5aca0d0d..e7d69acc 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -34,6 +34,16 @@ const idclass_t mpegts_input_class = } }; +static void +mpegts_input_open_service ( mpegts_input_t *mi, mpegts_service_t *s ) +{ +} + +static void +mpegts_input_close_service ( mpegts_input_t *mi, mpegts_service_t *s ) +{ +} + size_t mpegts_input_recv_packets ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi, @@ -208,6 +218,14 @@ mpegts_input_create0 ( mpegts_input_t *mi, const idclass_t *class, const char *uuid ) { idnode_insert(&mi->mi_id, uuid, class); + + /* Defaults */ + mi->mi_start_mux = NULL; + mi->mi_stop_mux = NULL; + mi->mi_open_service = mpegts_input_open_service; + mi->mi_close_service = mpegts_input_close_service; + mi->mi_is_free = mpegts_input_is_free; + mi->mi_current_weight = mpegts_input_current_weight; /* Init mutex */ pthread_mutex_init(&mi->mi_delivery_mutex, NULL); diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index 62b5e94f..d0ec2de0 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -50,6 +50,13 @@ mpegts_network_schedule_initial_scan ( mpegts_network_t *mn ) gtimer_arm(&mn->mn_initial_scan_timer, mpegts_network_initial_scan, mn, 0); } +void +mpegts_network_add_input ( mpegts_network_t *mn, mpegts_input_t *mi ) +{ + mi->mi_network = mn; + LIST_INSERT_HEAD(&mn->mn_inputs, mi, mi_network_link); +} + mpegts_network_t * mpegts_network_create0 ( mpegts_network_t *mn, const idclass_t *idc, const char *uuid,