From 7074bb61bb9f81504de9ad20e36a1578ebf50f9b Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Thu, 11 Sep 2014 11:53:21 +0200 Subject: [PATCH] DVR: Remove dvr_flags and m_config.m_flags - use direct values --- src/dvr/dvr.h | 23 ++------------- src/dvr/dvr_db.c | 64 ++++++++++++------------------------------ src/dvr/dvr_rec.c | 16 +++++------ src/muxer.h | 6 ++-- src/muxer/muxer_pass.c | 11 ++++---- 5 files changed, 35 insertions(+), 85 deletions(-) diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 7fd6ce45..e0412ef7 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -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'; } diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 3e99dee1..ce528591 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -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; diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index c6d23b1f..dbade701 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -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); diff --git a/src/muxer.h b/src/muxer.h index 8576c1b2..2c6b9651 100644 --- a/src/muxer.h +++ b/src/muxer.h @@ -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; /* diff --git a/src/muxer/muxer_pass.c b/src/muxer/muxer_pass.c index cf28e84d..18b767a1 100644 --- a/src/muxer/muxer_pass.c +++ b/src/muxer/muxer_pass.c @@ -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);