DVR: Remove dvr_flags and m_config.m_flags - use direct values
This commit is contained in:
parent
28dc589581
commit
7074bb61bb
5 changed files with 35 additions and 85 deletions
|
@ -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'; }
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
/*
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue