DVR: Remove dvr_flags and m_config.m_flags - use direct values

This commit is contained in:
Jaroslav Kysela 2014-09-11 11:53:21 +02:00
parent 28dc589581
commit 7074bb61bb
5 changed files with 35 additions and 85 deletions

View file

@ -32,10 +32,10 @@ typedef struct dvr_config {
LIST_ENTRY(dvr_config) config_link;
int dvr_enabled;
int dvr_valid;
char *dvr_config_name;
char *dvr_storage;
uint32_t dvr_retention_days;
int dvr_flags;
char *dvr_charset;
char *dvr_charset_id;
char *dvr_postproc;
@ -60,8 +60,6 @@ typedef struct dvr_config {
int dvr_subtitle_in_title;
int dvr_episode_before_date;
int dvr_episode_duplicate;
int dvr_rewrite_pat;
int dvr_rewrite_pmt;
/* Series link support */
int dvr_sl_brand_lock;
@ -84,23 +82,6 @@ extern struct dvr_config_list dvrconfigs;
extern struct dvr_entry_list dvrentries;
#define DVR_FLAGS_VALID 0x1
#define DVR_DIR_PER_DAY 0x2
#define DVR_DIR_PER_CHANNEL 0x4
#define DVR_CHANNEL_IN_TITLE 0x8
#define DVR_OMIT_TITLE 0x10
#define DVR_DATE_IN_TITLE 0x20
#define DVR_TIME_IN_TITLE 0x40
#define DVR_WHITESPACE_IN_TITLE 0x80
#define DVR_DIR_PER_TITLE 0x100
#define DVR_EPISODE_IN_TITLE 0x200
#define DVR_CLEAN_TITLE 0x400
#define DVR_TAG_FILES 0x800
#define DVR_SKIP_COMMERCIALS 0x1000
#define DVR_SUBTITLE_IN_TITLE 0x2000
#define DVR_EPISODE_BEFORE_DATE 0x4000
#define DVR_EPISODE_DUPLICATE_DETECTION 0x8000
typedef enum {
DVR_PRIO_IMPORTANT,
DVR_PRIO_HIGH,
@ -300,7 +281,7 @@ extern const idclass_t dvr_autorec_entry_class;
void dvr_make_title(char *output, size_t outlen, dvr_entry_t *de);
static inline int dvr_config_is_valid(dvr_config_t *cfg)
{ return !!(cfg->dvr_flags & DVR_FLAGS_VALID); }
{ return cfg->dvr_valid; }
static inline int dvr_config_is_default(dvr_config_t *cfg)
{ return cfg->dvr_config_name == NULL || cfg->dvr_config_name[0] == '\0'; }

View file

@ -241,17 +241,17 @@ dvr_make_title(char *output, size_t outlen, dvr_entry_t *de)
char buf[40];
dvr_config_t *cfg = de->de_config;
if(cfg->dvr_flags & DVR_CHANNEL_IN_TITLE)
if(cfg->dvr_channel_in_title)
snprintf(output, outlen, "%s-", DVR_CH_NAME(de));
else
output[0] = 0;
if ((cfg->dvr_flags & DVR_OMIT_TITLE) == 0)
if (cfg->dvr_omit_title == 0)
snprintf(output + strlen(output), outlen - strlen(output),
"%s", lang_str_get(de->de_title, NULL));
if(cfg->dvr_flags & DVR_EPISODE_BEFORE_DATE) {
if(cfg->dvr_flags & DVR_EPISODE_IN_TITLE) {
if(cfg->dvr_episode_before_date) {
if(cfg->dvr_episode_in_title) {
if(de->de_bcast && de->de_bcast->episode)
epg_episode_number_format(de->de_bcast->episode,
output + strlen(output),
@ -260,7 +260,7 @@ dvr_make_title(char *output, size_t outlen, dvr_entry_t *de)
}
}
if(cfg->dvr_flags & DVR_SUBTITLE_IN_TITLE) {
if(cfg->dvr_subtitle_in_title) {
if(de->de_bcast && de->de_bcast->episode && de->de_bcast->episode->subtitle)
snprintf(output + strlen(output), outlen - strlen(output),
".%s", lang_str_get(de->de_bcast->episode->subtitle, NULL));
@ -268,18 +268,18 @@ dvr_make_title(char *output, size_t outlen, dvr_entry_t *de)
localtime_r(&de->de_start, &tm);
if(cfg->dvr_flags & DVR_DATE_IN_TITLE) {
if(cfg->dvr_date_in_title) {
strftime(buf, sizeof(buf), "%F", &tm);
snprintf(output + strlen(output), outlen - strlen(output), ".%s", buf);
}
if(cfg->dvr_flags & DVR_TIME_IN_TITLE) {
if(cfg->dvr_time_in_title) {
strftime(buf, sizeof(buf), "%H-%M", &tm);
snprintf(output + strlen(output), outlen - strlen(output), ".%s", buf);
}
if(!(cfg->dvr_flags & DVR_EPISODE_BEFORE_DATE)) {
if(cfg->dvr_flags & DVR_EPISODE_IN_TITLE) {
if(!cfg->dvr_episode_before_date) {
if(cfg->dvr_episode_in_title) {
if(de->de_bcast && de->de_bcast->episode)
epg_episode_number_format(de->de_bcast->episode,
output + strlen(output),
@ -562,7 +562,7 @@ static int _dvr_duplicate_event ( epg_broadcast_t *e )
if (de->de_bcast->episode == e->episode) return 1;
if (has_epnum) {
int ep_dup_det = (de->de_config->dvr_flags & DVR_EPISODE_DUPLICATE_DETECTION);
int ep_dup_det = de->de_config->dvr_episode_duplicate;
if (ep_dup_det) {
const char* de_title = lang_str_get(de->de_bcast->episode->title, NULL);
@ -1937,35 +1937,6 @@ dvr_config_find_by_name_default(const char *name)
return cfg;
}
/*
*
*/
static void
dvr_config_update_flags(dvr_config_t *cfg)
{
int r = 0;
if (cfg->dvr_dir_per_day) r |= DVR_DIR_PER_DAY;
if (cfg->dvr_channel_dir) r |= DVR_DIR_PER_CHANNEL;
if (cfg->dvr_channel_in_title) r |= DVR_CHANNEL_IN_TITLE;
if (cfg->dvr_omit_title) r |= DVR_OMIT_TITLE;
if (cfg->dvr_date_in_title) r |= DVR_DATE_IN_TITLE;
if (cfg->dvr_time_in_title) r |= DVR_TIME_IN_TITLE;
if (cfg->dvr_whitespace_in_title) r |= DVR_WHITESPACE_IN_TITLE;
if (cfg->dvr_title_dir) r |= DVR_DIR_PER_TITLE;
if (cfg->dvr_episode_in_title) r |= DVR_EPISODE_IN_TITLE;
if (cfg->dvr_clean_title) r |= DVR_CLEAN_TITLE;
if (cfg->dvr_tag_files) r |= DVR_TAG_FILES;
if (cfg->dvr_skip_commercials) r |= DVR_SKIP_COMMERCIALS;
if (cfg->dvr_subtitle_in_title) r |= DVR_SUBTITLE_IN_TITLE;
if (cfg->dvr_episode_before_date) r |= DVR_EPISODE_BEFORE_DATE;
if (cfg->dvr_episode_duplicate) r |= DVR_EPISODE_DUPLICATE_DETECTION;
cfg->dvr_flags = r | DVR_FLAGS_VALID;
r = 0;
if (cfg->dvr_rewrite_pat) r |= MC_REWRITE_PAT;
if (cfg->dvr_rewrite_pmt) r |= MC_REWRITE_PMT;
cfg->dvr_muxcnf.m_flags = r;
}
/**
* create a new named dvr config; the caller is responsible
* to avoid duplicates
@ -1994,7 +1965,8 @@ dvr_config_create(const char *name, const char *uuid, htsmsg_t *conf)
cfg->dvr_config_name = strdup(name);
cfg->dvr_retention_days = 31;
cfg->dvr_mc = MC_MATROSKA;
cfg->dvr_flags = DVR_TAG_FILES | DVR_SKIP_COMMERCIALS;
cfg->dvr_tag_files = 1;
cfg->dvr_skip_commercials = 1;
dvr_charset_update(cfg, intlconv_filesystem_charset());
/* series link support */
@ -2007,7 +1979,7 @@ dvr_config_create(const char *name, const char *uuid, htsmsg_t *conf)
/* Muxer config */
cfg->dvr_muxcnf.m_cache = MC_CACHE_DONTKEEP;
cfg->dvr_muxcnf.m_flags |= MC_REWRITE_PAT;
cfg->dvr_muxcnf.m_rewrite_pat = 1;
/* dup detect */
cfg->dvr_dup_detect_episode = 1; // detect dup episodes
@ -2021,7 +1993,7 @@ dvr_config_create(const char *name, const char *uuid, htsmsg_t *conf)
idnode_load(&cfg->dvr_id, conf);
if (dvr_config_is_default(cfg))
cfg->dvr_enabled = 1;
dvr_config_update_flags(cfg);
cfg->dvr_valid = 1;
}
tvhlog(LOG_INFO, "dvr", "Creating new configuration '%s'", cfg->dvr_config_name);
@ -2098,7 +2070,7 @@ dvr_config_class_save(idnode_t *self)
dvr_config_t *cfg = (dvr_config_t *)self;
if (dvr_config_is_default(cfg))
cfg->dvr_enabled = 1;
dvr_config_update_flags(cfg);
cfg->dvr_valid = 1;
dvr_config_save(cfg);
}
@ -2350,7 +2322,7 @@ const idclass_t dvr_config_class = {
.type = PT_BOOL,
.id = "rewrite-pat",
.name = "Rewrite PAT",
.off = offsetof(dvr_config_t, dvr_rewrite_pat),
.off = offsetof(dvr_config_t, dvr_muxcnf.m_rewrite_pat),
.def.i = 1,
.group = 2,
},
@ -2358,7 +2330,7 @@ const idclass_t dvr_config_class = {
.type = PT_BOOL,
.id = "rewrite-pmt",
.name = "Rewrite PMT",
.off = offsetof(dvr_config_t, dvr_rewrite_pmt),
.off = offsetof(dvr_config_t, dvr_muxcnf.m_rewrite_pmt),
.group = 2,
},
{
@ -2624,7 +2596,7 @@ dvr_entry_delete(dvr_entry_t *de)
snprintf(path, sizeof(path), "%s", cfg->dvr_storage);
if(cfg->dvr_flags & DVR_DIR_PER_TITLE || cfg->dvr_flags & DVR_DIR_PER_CHANNEL || cfg->dvr_flags & DVR_DIR_PER_DAY) {
if(cfg->dvr_title_dir || cfg->dvr_channel_dir || cfg->dvr_dir_per_day) {
char *p;
int l;

View file

@ -126,7 +126,7 @@ dvr_rec_unsubscribe(dvr_entry_t *de, int stopcode)
static char *
cleanup_filename(char *s, dvr_config_t *cfg)
{
int i, len = strlen(s), dvr_flags = cfg->dvr_flags;
int i, len = strlen(s);
char *s1;
s1 = intlconv_utf8safestr(cfg->dvr_charset_id, s, len * 2);
@ -148,11 +148,11 @@ cleanup_filename(char *s, dvr_config_t *cfg)
if(s[i] == '/')
s[i] = '-';
else if((dvr_flags & DVR_WHITESPACE_IN_TITLE) &&
else if(cfg->dvr_whitespace_in_title &&
(s[i] == ' ' || s[i] == '\t'))
s[i] = '-';
else if((dvr_flags & DVR_CLEAN_TITLE) &&
else if(cfg->dvr_clean_title &&
((s[i] < 32) || (s[i] > 122) ||
(strchr("/:\\<>|*?'\"", s[i]) != NULL)))
s[i] = '_';
@ -190,7 +190,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss)
path[strlen(path)-1] = '\0';
/* Append per-day directory */
if (cfg->dvr_flags & DVR_DIR_PER_DAY) {
if (cfg->dvr_dir_per_day) {
localtime_r(&de->de_start, &tm);
strftime(fullname, sizeof(fullname), "%F", &tm);
s = cleanup_filename(fullname, cfg);
@ -201,7 +201,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss)
}
/* Append per-channel directory */
if (cfg->dvr_flags & DVR_DIR_PER_CHANNEL) {
if (cfg->dvr_channel_dir) {
char *chname = strdup(DVR_CH_NAME(de));
s = cleanup_filename(chname, cfg);
free(chname);
@ -214,7 +214,7 @@ pvr_generate_filename(dvr_entry_t *de, const streaming_start_t *ss)
// TODO: per-brand, per-season
/* Append per-title directory */
if (cfg->dvr_flags & DVR_DIR_PER_TITLE) {
if (cfg->dvr_title_dir) {
char *title = strdup(lang_str_get(de->de_title, NULL));
s = cleanup_filename(title, cfg);
free(title);
@ -338,7 +338,7 @@ dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss)
return -1;
}
if(cfg->dvr_flags & DVR_TAG_FILES && de->de_bcast) {
if(cfg->dvr_tag_files && de->de_bcast) {
if(muxer_write_meta(de->de_mux, de->de_bcast)) {
dvr_rec_fatal_error(de, "Unable to write meta data");
return -1;
@ -441,7 +441,7 @@ dvr_thread(void *aux)
th_pkt_t *pkt;
int run = 1;
int started = 0;
int comm_skip = (cfg->dvr_flags & DVR_SKIP_COMMERCIALS);
int comm_skip = cfg->dvr_skip_commercials;
int commercial = COMMERCIAL_UNKNOWN;
pthread_mutex_lock(&sq->sq_mutex);

View file

@ -21,9 +21,6 @@
#include "htsmsg.h"
#define MC_REWRITE_PAT 0x0001
#define MC_REWRITE_PMT 0x0002
#define MC_IS_EOS_ERROR(e) ((e) == EPIPE || (e) == ECONNRESET)
typedef enum {
@ -47,7 +44,8 @@ typedef enum {
/* Muxer configuration used when creating a muxer. */
typedef struct muxer_config {
int m_flags;
int m_rewrite_pat;
int m_rewrite_pmt;
int m_cache;
/*

View file

@ -316,7 +316,7 @@ pass_muxer_reconfigure(muxer_t* m, const struct streaming_start *ss)
pm->pm_pmt_pid = ss->ss_pmt_pid;
pm->pm_service_id = ss->ss_service_id;
if (pm->m_config.m_flags & MC_REWRITE_PMT) {
if (pm->m_config.m_rewrite_pmt) {
pm->pm_pmt = realloc(pm->pm_pmt, 188);
memset(pm->pm_pmt, 0xff, 188);
pm->pm_pmt[0] = 0x47;
@ -433,16 +433,15 @@ pass_muxer_write_ts(muxer_t *m, pktbuf_t *pb)
size_t len = pb->pb_size;
/* Rewrite PAT/PMT in operation */
if (pm->m_config.m_flags & (MC_REWRITE_PAT | MC_REWRITE_PMT)) {
if (pm->m_config.m_rewrite_pat || pm->m_config.m_rewrite_pmt) {
tsb = pb->pb_data;
len = 0;
while (tsb < pb->pb_data + pb->pb_size) {
int pid = (tsb[1] & 0x1f) << 8 | tsb[2];
/* Process */
if ( ((pm->m_config.m_flags & MC_REWRITE_PAT) && (pid == 0)) ||
((pm->m_config.m_flags & MC_REWRITE_PMT) &&
(pid == pm->pm_pmt_pid)) ) {
if ( (pm->m_config.m_rewrite_pat && (pid == 0)) ||
(pm->m_config.m_rewrite_pmt && (pid == pm->pm_pmt_pid)) ) {
/* Flush */
if (len)
@ -458,7 +457,7 @@ pass_muxer_write_ts(muxer_t *m, pktbuf_t *pb)
e = pass_muxer_rewrite_pat(pm, tmp);
if (e < 0) {
tvherror("pass", "PAT rewrite failed, disabling");
pm->m_config.m_flags &= ~MC_REWRITE_PAT;
pm->m_config.m_rewrite_pat = 0;
}
if (e)
pass_muxer_write(m, tmp, 188);