iptv: added some missing functions

This commit is contained in:
Adam Sutton 2013-04-30 12:06:59 +01:00
parent 646bfe3e88
commit 523c47de37
4 changed files with 55 additions and 23 deletions

View file

@ -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 );

View file

@ -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

View file

@ -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);

View file

@ -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,