*/
elementary_stream_t *
elementary_stream_create
- (elementary_set_t *set, int pid, streaming_component_type_t type, int running)
+ (elementary_set_t *set, int pid, streaming_component_type_t type)
{
- elementary_stream_t *st, *st2;
+ elementary_stream_t *st;
int i = 0;
int idx = 0;
st->es_index = idx + 1;
st->es_type = type;
+ st->es_cc = -1;
TAILQ_INSERT_TAIL(&set->set_all, st, es_link);
st->es_service = set->set_service;
elementary_stream_make_nicename(st, set->set_nicename);
- if (running) {
- elementary_set_filter_build(set);
- TAILQ_FOREACH(st2, &set->set_filter, es_filter_link)
- if (st2 == st) {
- elementary_stream_init(st);
- break;
- }
- }
-
return st;
}
*/
elementary_stream_t *
elementary_stream_type_modify(elementary_set_t *set, int pid,
- streaming_component_type_t type,
- int running)
+ streaming_component_type_t type)
{
elementary_stream_t *es = elementary_stream_type_find(set, type);
if (!es)
- return elementary_stream_create(set, pid, type, running);
+ return elementary_stream_create(set, pid, type);
if (es->es_pid != pid)
es->es_pid = pid;
return es;
void elementary_set_init_filter_streams(elementary_set_t *set);
void elementary_set_filter_build(elementary_set_t *set);
elementary_stream_t *elementary_stream_create
- (elementary_set_t *set, int pid, streaming_component_type_t type, int running);
+ (elementary_set_t *set, int pid, streaming_component_type_t type);
elementary_stream_t *elementary_stream_find_(elementary_set_t *set, int pid);
elementary_stream_t *elementary_stream_type_find
(elementary_set_t *set, streaming_component_type_t type);
return set->set_last_es;
}
elementary_stream_t *elementary_stream_type_modify
- (elementary_set_t *set, int pid, streaming_component_type_t type, int running);
+ (elementary_set_t *set, int pid, streaming_component_type_t type);
void elementary_stream_type_destroy
(elementary_set_t *set, streaming_component_type_t type);
int elementary_stream_has_audio_or_video(elementary_set_t *set);
static int
psi_desc_add_ca
(mpegts_table_t *mt, elementary_set_t *set,
- uint16_t caid, uint32_t provid, uint16_t pid, int running)
+ uint16_t caid, uint32_t provid, uint16_t pid)
{
elementary_stream_t *st;
caid_t *c;
st = elementary_stream_find(set, pid);
if (st == NULL || st->es_type != SCT_CA) {
- st = elementary_stream_create(set, pid, SCT_CA, running);
+ st = elementary_stream_create(set, pid, SCT_CA);
r |= PMT_UPDATE_NEW_CA_STREAM;
}
*/
static int
psi_desc_ca
- (mpegts_table_t *mt, elementary_set_t *set, const uint8_t *buffer,
- int size, int running)
+ (mpegts_table_t *mt, elementary_set_t *set, const uint8_t *buffer, int size)
{
int r = 0;
int i;
uint16_t xpid = extract_pid(buffer + i);
uint16_t xprovid = extract_2byte(buffer + i + 2);
- r |= psi_desc_add_ca(mt, set, caid, xprovid, xpid, running);
+ r |= psi_desc_add_ca(mt, set, caid, xprovid, xpid);
}
break;
case 0x0500:// Viaccess
break;
}
- r |= psi_desc_add_ca(mt, set, caid, provid, pid, running);
+ r |= psi_desc_add_ca(mt, set, caid, provid, pid);
return r;
}
*/
static int
psi_desc_teletext(elementary_set_t *set, const uint8_t *ptr, int size,
- int parent_pid, int *position, int running)
+ int parent_pid, int *position)
{
int r = 0;
const char *lang;
st = elementary_stream_find(set, pid);
if (st == NULL || st->es_type != SCT_TEXTSUB) {
r |= PMT_UPDATE_NEW_STREAM;
- st = elementary_stream_create(set, pid, SCT_TEXTSUB, running);
+ st = elementary_stream_create(set, pid, SCT_TEXTSUB);
}
lang = lang_code_get2((const char*)ptr, 3);
uint32_t
dvb_psi_parse_pmt
(mpegts_table_t *mt, const char *nicename, elementary_set_t *set,
- const uint8_t *ptr, int len, int running)
+ const uint8_t *ptr, int len)
{
uint16_t pcr_pid, pid;
uint8_t estype;
switch(dtag) {
case DVB_DESC_CA:
- update |= psi_desc_ca(mt, set, ptr, dlen, running);
+ update |= psi_desc_ca(mt, set, ptr, dlen);
break;
default:
switch(dtag) {
case DVB_DESC_CA:
- update |= psi_desc_ca(mt, set, ptr, dlen, running);
+ update |= psi_desc_ca(mt, set, ptr, dlen);
break;
case DVB_DESC_VIDEO_STREAM:
if(estype == 0x06)
hts_stream_type = SCT_TELETEXT;
- update |= psi_desc_teletext(set, ptr, dlen, pid, &tt_position, running);
+ update |= psi_desc_teletext(set, ptr, dlen, pid, &tt_position);
break;
case DVB_DESC_AC3:
st = elementary_stream_find(set, pid);
if (st == NULL || st->es_type != hts_stream_type) {
update |= PMT_UPDATE_NEW_STREAM;
- st = elementary_stream_create(set, pid, hts_stream_type, running);
+ st = elementary_stream_create(set, pid, hts_stream_type);
}
if (st->es_type != hts_stream_type) {
/* Handle PCR 'elementary stream' */
if (!pcr_shared) {
- st = elementary_stream_type_modify(set, set->set_pcr_pid, SCT_PCR, running);
+ st = elementary_stream_type_modify(set, set->set_pcr_pid, SCT_PCR);
st->es_delete_me = 0;
}
update = 0;
pthread_mutex_lock(&s->s_stream_mutex);
update = dvb_psi_parse_pmt(mt, service_nicename((service_t *)s),
- &s->s_components, ptr, len,
- s->s_status == SERVICE_RUNNING);
- if (update)
+ &s->s_components, ptr, len);
+ if (update) {
+ if (s->s_status == SERVICE_RUNNING)
+ elementary_set_filter_build(&s->s_components);
service_request_save((service_t*)s);
+ }
/* Only restart if something that our clients worry about did change */
restart = 0;
if (update) {