mpegts: added some additional routines for network setup

This commit is contained in:
Adam Sutton 2013-06-04 15:20:35 +01:00
parent 88e866b3f1
commit 38d4ffec95
4 changed files with 58 additions and 2 deletions

View file

@ -390,6 +390,7 @@ struct mpegts_input
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*);
const idclass_t *(*mi_network_class) (mpegts_input_t *mi);
};
#endif /* __TVH_MPEGTS_H__ */
@ -404,6 +405,8 @@ extern mpegts_network_list_t mpegts_network_all;
* Functions
* ***************************************************************************/
extern mpegts_input_list_t mpegts_input_all;
mpegts_input_t *mpegts_input_create0
( mpegts_input_t *mi, const idclass_t *idc, const char *uuid, htsmsg_t *c );

View file

@ -127,6 +127,25 @@ const idclass_t linuxdvb_frontend_atsc_class =
* Class methods
* *************************************************************************/
static const idclass_t *
linuxdvb_frontend_network_class ( mpegts_input_t *mi )
{
linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi;
switch (lfe->lfe_info.type) {
case FE_QPSK:
return &linuxdvb_frontend_dvbs_class;
case FE_QAM:
return &linuxdvb_frontend_dvbc_class;
case FE_OFDM:
return &linuxdvb_frontend_dvbt_class;
case FE_ATSC:
return &linuxdvb_frontend_atsc_class;
default:
return NULL;
}
}
static int
linuxdvb_frontend_is_enabled ( mpegts_input_t *mi )
{
@ -672,6 +691,7 @@ linuxdvb_frontend_create0
lfe->mi_open_service = linuxdvb_frontend_open_service;
lfe->mi_close_service = linuxdvb_frontend_close_service;
lfe->lfe_open_pid = linuxdvb_frontend_open_pid;
lfe->mi_network_class = linuxdvb_frontend_network_class;
/* Adapter link */
lfe->lh_parent = (linuxdvb_hardware_t*)la;

View file

@ -74,8 +74,10 @@ linuxdvb_hardware_class_get_childs ( idnode_t *in )
return linuxdvb_hardware_enumerate(&((linuxdvb_hardware_t*)in)->lh_children);
}
extern const idclass_t mpegts_input_class;
const idclass_t linuxdvb_hardware_class =
{
.ic_super = &mpegts_input_class,
.ic_class = "linuxdvb_hardware",
.ic_caption = "LinuxDVB Hardware",
.ic_get_title = linuxdvb_hardware_class_get_title,

View file

@ -30,13 +30,31 @@
* Class definition
* *************************************************************************/
static const char *
mpegts_input_class_get_name ( void *in )
{
static char buf[256];
mpegts_input_t *mi = in;
if (mi->mi_display_name)
mi->mi_display_name(mi, buf, sizeof(buf));
else
*buf = 0;
return buf;
}
const idclass_t mpegts_input_class =
{
.ic_class = "mpegts_input",
.ic_caption = "MPEGTS Input",
.ic_properties = (const property_t[]){
{ PROPDEF1("enabled", "Enabled",
PT_BOOL, mpegts_input_t, mi_enabled) },
{
PROPDEF1("enabled", "Enabled", PT_BOOL,
mpegts_input_t, mi_enabled)
},
{
PROPDEF0("displayname", "Name", PT_STR, PO_NOSAVE | PO_RDONLY),
.str_get = mpegts_input_class_get_name
},
{}
}
};
@ -45,6 +63,13 @@ const idclass_t mpegts_input_class =
* Class methods
* *************************************************************************/
static const idclass_t *
mpegts_input_network_class (mpegts_input_t *mi)
{
extern const idclass_t mpegts_network_class;
return &mpegts_network_class;
}
static int
mpegts_input_is_enabled ( mpegts_input_t *mi )
{
@ -263,6 +288,8 @@ mpegts_input_table_thread ( void *aux )
* Creation/Config
* *************************************************************************/
mpegts_input_list_t mpegts_input_all;
mpegts_input_t*
mpegts_input_create0
( mpegts_input_t *mi, const idclass_t *class, const char *uuid,
@ -281,6 +308,7 @@ mpegts_input_create0
mi->mi_stop_mux = mpegts_input_stop_mux;
mi->mi_open_service = mpegts_input_open_service;
mi->mi_close_service = mpegts_input_close_service;
mi->mi_network_class = mpegts_input_network_class;
/* Init mutex */
pthread_mutex_init(&mi->mi_delivery_mutex, NULL);
@ -292,6 +320,9 @@ mpegts_input_create0
/* Init input thread control */
mi->mi_thread_pipe.rd = mi->mi_thread_pipe.wr = -1;
/* Add to global list */
LIST_INSERT_HEAD(&mpegts_input_all, mi, mi_global_link);
return mi;
}