Add support for configuring method for commercial detection

This commit is contained in:
Andreas Öman 2008-04-17 21:16:33 +00:00
parent 5c7f891b41
commit cf3c57a468
5 changed files with 70 additions and 26 deletions

View file

@ -391,6 +391,11 @@ static struct strtab sourcetypetab[] = {
};
static struct strtab cdlongname[] = {
{ "None", COMMERCIAL_DETECT_NONE },
{ "Swedish TV4 Teletext", COMMERCIAL_DETECT_TTP192 },
};
/**
* Display all channels within the group
*/
@ -402,6 +407,7 @@ ajax_cheditor(http_connection_t *hc, http_reply_t *hr,
th_channel_t *ch;
th_transport_t *t;
const char *s;
int i;
if(remain == NULL || (ch = channel_by_tag(atoi(remain))) == NULL)
return HTTP_STATUS_BAD_REQUEST;
@ -444,10 +450,17 @@ ajax_cheditor(http_connection_t *hc, http_reply_t *hr,
"<div class=\"infoprefixwidewidefat\">"
"Commercial detection:</div>"
"<div>"
"<select id=\"cdetect_%d\" class=\"textinput\">",
"<select class=\"textinput\" "
"onChange=\"new Ajax.Request('/ajax/chsetcomdetect/%d', "
"{parameters: {how: this.value}});\">",
ch->ch_tag);
tcp_qprintf(tq, "<option>None</option>");
tcp_qprintf(tq, "<option>TV4 Teletext, p192</option>");
for(i = 0; i < sizeof(cdlongname) / sizeof(cdlongname[0]); i++) {
tcp_qprintf(tq, "<option %svalue=%d>%s</option>",
cdlongname[i].val == ch->ch_commercial_detection ?
"selected " : "",
cdlongname[i].val, cdlongname[i].str);
}
tcp_qprintf(tq, "</select></div>");
tcp_qprintf(tq, "</div>");
@ -499,6 +512,29 @@ ajax_changegroup(http_connection_t *hc, http_reply_t *hr,
return 0;
}
/**
* Change commercial detection type for channel(s)
*/
static int
ajax_chsetcomdetect(http_connection_t *hc, http_reply_t *hr,
const char *remain, void *opaque)
{
th_channel_t *ch;
const char *s;
if(remain == NULL || (ch = channel_by_tag(atoi(remain))) == NULL)
return HTTP_STATUS_BAD_REQUEST;
if((s = http_arg_get(&hc->hc_req_args, "how")) == NULL)
return HTTP_STATUS_BAD_REQUEST;
ch->ch_commercial_detection = atoi(s);
channel_settings_write(ch);
http_output(hc, hr, "text/javascript; charset=UTF-8", NULL, 0);
return 0;
}
/**
*
@ -512,5 +548,6 @@ ajax_config_channels_init(void)
http_path_add("/ajax/chgroup_editor", NULL, ajax_chgroup_editor);
http_path_add("/ajax/cheditor", NULL, ajax_cheditor);
http_path_add("/ajax/chop/changegroup", NULL, ajax_changegroup);
http_path_add("/ajax/chsetcomdetect", NULL, ajax_chsetcomdetect);
}

View file

@ -39,8 +39,6 @@
#include "channels.h"
#include "transports.h"
static void channel_settings_write(th_channel_t *ch);
struct th_channel_list channels;
int nchannels;
@ -135,15 +133,6 @@ channel_set_group(th_channel_t *ch, th_channel_group_t *tcg)
channel_settings_write(ch);
}
/**
*
*/
void
channel_set_teletext_rundown(th_channel_t *ch, int v)
{
ch->ch_teletext_rundown = v;
channel_settings_write(ch);
}
/**
*
@ -246,6 +235,13 @@ service_load(struct config_head *head)
free(t);
}
static struct strtab commercial_detect_tab[] = {
{ "none", COMMERCIAL_DETECT_NONE },
{ "ttp192", COMMERCIAL_DETECT_TTP192 },
};
/**
*
*/
@ -257,9 +253,10 @@ channels_load(void)
char buf[PATH_MAX];
DIR *dir;
struct dirent *d;
const char *name, *grp;
const char *name, *grp, *x;
th_channel_t *ch;
th_channel_group_t *tcg;
int v;
TAILQ_INIT(&all_channel_groups);
TAILQ_INIT(&cl);
@ -304,11 +301,14 @@ channels_load(void)
if(name != NULL && grp != NULL) {
tcg = channel_group_find(grp, 1);
ch = channel_find(name, 1, tcg);
ch->ch_teletext_rundown =
atoi(config_get_str_sub(&cl, "teletext-rundown", "0"));
x = config_get_str_sub(&cl, "commercial-detect", NULL);
if(x != NULL) {
v = str2val(x, commercial_detect_tab);
if(v > 1)
ch->ch_commercial_detection = v;
}
}
config_free0(&cl);
}
@ -409,7 +409,7 @@ channel_group_settings_write(void)
/**
* Write out a config file for a channel
*/
static void
void
channel_settings_write(th_channel_t *ch)
{
FILE *fp;
@ -421,8 +421,9 @@ channel_settings_write(th_channel_t *ch)
fprintf(fp, "name = %s\n", ch->ch_name);
fprintf(fp, "channel-group = %s\n", ch->ch_group->tcg_name);
if(ch->ch_teletext_rundown)
fprintf(fp, "teletext-rundown = %d\n", ch->ch_teletext_rundown);
fprintf(fp, "commercial-detect = %s\n",
val2str(ch->ch_commercial_detection, commercial_detect_tab) ?: "?");
fclose(fp);
}

View file

@ -46,4 +46,6 @@ void channel_set_teletext_rundown(th_channel_t *ch, int v);
void channel_group_settings_write(void);
void channel_settings_write(th_channel_t *ch);
#endif /* CHANNELS_H */

View file

@ -223,8 +223,8 @@ tt_decode_line(th_transport_t *t, uint8_t *buf)
}
if(update_tt_clock(t, (char *)buf + 34)) {
if(ch->ch_teletext_rundown != 0) {
ttp = tt_get_page(ttd, ch->ch_teletext_rundown);
if(ch->ch_commercial_detection == COMMERCIAL_DETECT_TTP192) {
ttp = tt_get_page(ttd, 192);
teletext_rundown(t, ch, ttp);
}
}
@ -255,7 +255,8 @@ tt_decode_line(th_transport_t *t, uint8_t *buf)
break;
}
if(ttp->ttp_page == ch->ch_teletext_rundown)
if(ttp->ttp_page == 192 &&
ch->ch_commercial_detection == COMMERCIAL_DETECT_TTP192)
teletext_rundown(t, ch, ttp);
}
}

View file

@ -769,7 +769,10 @@ typedef struct th_channel {
int ch_tag;
int ch_teletext_rundown;
enum {
COMMERCIAL_DETECT_NONE,
COMMERCIAL_DETECT_TTP192,
} ch_commercial_detection;
struct event_queue ch_epg_events;
struct event *ch_epg_cur_event;