mirror of
https://github.com/DigitalDevices/octonet.git
synced 2023-10-10 13:36:52 +02:00
- properly handle pid changes by non stream owners
- start fixing multicast handling by non owners
This commit is contained in:
parent
6fef2a2ce8
commit
41c037118c
2
dddvb
2
dddvb
@ -1 +1 @@
|
|||||||
Subproject commit e83dedf6b41d6cfb9315d714e5982d10ff8aab6c
|
Subproject commit af746a02dd6c033e80c92e5620c94e18d18709b1
|
@ -1386,6 +1386,11 @@ static int merge_params(struct dvb_params *op, struct dvb_params *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void copy_params(struct ossess *s, struct ossess *t)
|
||||||
|
{
|
||||||
|
memcpy(&s->p, &t->p, sizeof(struct dvb_params));
|
||||||
|
}
|
||||||
|
|
||||||
static int setup_session(struct oscon *con, int newtrans)
|
static int setup_session(struct oscon *con, int newtrans)
|
||||||
{
|
{
|
||||||
struct dvbfe *fe;
|
struct dvbfe *fe;
|
||||||
@ -1395,13 +1400,17 @@ static int setup_session(struct oscon *con, int newtrans)
|
|||||||
struct dvb_params *sp = &sess->p;
|
struct dvb_params *sp = &sess->p;
|
||||||
struct ostrans *trans = &con->trans;
|
struct ostrans *trans = &con->trans;
|
||||||
struct osstrm *str = sess->stream;
|
struct osstrm *str = sess->stream;
|
||||||
|
struct ossess *ownsess = str->session;
|
||||||
|
int pidchange;
|
||||||
|
int owner = 0;
|
||||||
|
|
||||||
|
if (sess == ownsess)
|
||||||
|
owner = 1;
|
||||||
if (!str)
|
if (!str)
|
||||||
return -500;
|
return -500;
|
||||||
if (conform && (str->session != sess) && merge_pids(sp, p))
|
pidchange = merge_pids(sp, p);
|
||||||
return -455;
|
|
||||||
merge_pids(sp, p);
|
if (owner) { /* stream owner */
|
||||||
if (str->session == sess) { /* stream owner */
|
|
||||||
merge_params(sp, p);
|
merge_params(sp, p);
|
||||||
|
|
||||||
if (str->fe && (sp->set & (1UL << PARAM_FE)) &&
|
if (str->fe && (sp->set & (1UL << PARAM_FE)) &&
|
||||||
@ -1429,6 +1438,11 @@ static int setup_session(struct oscon *con, int newtrans)
|
|||||||
} else if (p->set & 0xffff8) {
|
} else if (p->set & 0xffff8) {
|
||||||
dvb_tune(str->fe, sp);
|
dvb_tune(str->fe, sp);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (pidchange && conform) {
|
||||||
|
copy_params(sess, ownsess);
|
||||||
|
return -455;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sess->nsfd < 0) {
|
if (sess->nsfd < 0) {
|
||||||
#ifndef IGNORE_NS
|
#ifndef IGNORE_NS
|
||||||
@ -1440,13 +1454,15 @@ static int setup_session(struct oscon *con, int newtrans)
|
|||||||
if (newtrans) {
|
if (newtrans) {
|
||||||
if (str->session != sess &&
|
if (str->session != sess &&
|
||||||
sess->trans.mcast &&
|
sess->trans.mcast &&
|
||||||
conform)
|
conform) {
|
||||||
return -455;
|
memcpy(&sess->trans, &str->session->trans, sizeof(struct ostrans));
|
||||||
|
dbgprintf(DEBUG_RTSP, "non-owner tried to change transport parameters\n");
|
||||||
|
}
|
||||||
if (setup_nsp(&sess->trans, &nsp) < 0)
|
if (setup_nsp(&sess->trans, &nsp) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (set_ns(sess, &nsp) < 0)
|
if (set_ns(sess, &nsp) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
} else if (p->set & ((1UL << PARAM_PID) | (1UL << PARAM_APID) | (1UL << PARAM_DPID))) {
|
} else if (pidchange) {
|
||||||
uint8_t *pids = (sp->pid);
|
uint8_t *pids = (sp->pid);
|
||||||
|
|
||||||
if (sess->nsfd >= 0)
|
if (sess->nsfd >= 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user