From 65f42d8f0c938d0ccfd9d3555c0c4898bc2475ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Wed, 1 Sep 2010 16:42:26 +0000 Subject: [PATCH] Make it possible to configure whether or not to write tags to MKV file --- src/dvr/dvr.h | 3 ++- src/dvr/dvr_db.c | 6 ++++++ src/dvr/dvr_rec.c | 3 ++- src/dvr/mkmux.c | 22 ++++++---------------- src/dvr/mkmux.h | 5 +++-- src/webui/extjs.c | 3 +++ src/webui/static/app/dvr.js | 5 ++++- 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 703443f4..918b51ee 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -42,7 +42,8 @@ extern struct dvr_entry_list dvrentries; #define DVR_WHITESPACE_IN_TITLE 0x20 #define DVR_DIR_PER_TITLE 0x40 #define DVR_EPISODE_IN_TITLE 0x80 -#define DVR_CLEAN_TITLE 0x100 +#define DVR_CLEAN_TITLE 0x100 +#define DVR_TAG_FILES 0x200 typedef enum { DVR_PRIO_IMPORTANT, diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index a05a9847..98aa2751 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -729,6 +729,8 @@ dvr_init(void) /* Override settings with config */ + dvr_flags = DVR_TAG_FILES; + if((m = hts_settings_load("dvr/config")) != NULL) { htsmsg_get_s32(m, "pre-extra-time", &dvr_extra_time_pre); @@ -759,6 +761,9 @@ dvr_init(void) if(!htsmsg_get_u32(m, "episode-in-title", &u32) && u32) dvr_flags |= DVR_EPISODE_IN_TITLE; + + if(!htsmsg_get_u32(m, "tag-files", &u32) && !u32) + dvr_flags &= ~DVR_TAG_FILES; tvh_str_set(&dvr_postproc, htsmsg_get_str(m, "postproc")); @@ -812,6 +817,7 @@ dvr_save(void) htsmsg_add_u32(m, "whitespace-in-title", !!(dvr_flags & DVR_WHITESPACE_IN_TITLE)); htsmsg_add_u32(m, "title-dir", !!(dvr_flags & DVR_DIR_PER_TITLE)); htsmsg_add_u32(m, "episode-in-title", !!(dvr_flags & DVR_EPISODE_IN_TITLE)); + htsmsg_add_u32(m, "tag-files", !!(dvr_flags & DVR_TAG_FILES)); if(dvr_postproc != NULL) htsmsg_add_str(m, "postproc", dvr_postproc); diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 71167d95..33235a34 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -307,7 +307,8 @@ dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss) return; } - de->de_mkmux = mk_mux_create(de->de_filename, ss, de); + de->de_mkmux = mk_mux_create(de->de_filename, ss, de, + !!(dvr_flags & DVR_TAG_FILES)); if(de->de_mkmux == NULL) { dvr_rec_fatal_error(de, "Unable to open file"); diff --git a/src/dvr/mkmux.c b/src/dvr/mkmux.c index cbb003fd..542f0016 100644 --- a/src/dvr/mkmux.c +++ b/src/dvr/mkmux.c @@ -31,8 +31,6 @@ #include "mkmux.h" #include "ebml.h" -#define TAGS_AT_END - TAILQ_HEAD(mk_cue_queue, mk_cue); #define MATROSKA_TIMESCALE 1000000 // in nS @@ -92,8 +90,6 @@ struct mk_mux { char uuid[16]; char *title; - - htsbuf_queue_t *tags; }; @@ -553,7 +549,8 @@ mk_write_metaseek(mk_mux_t *mkm, int first) mk_mux_t * mk_mux_create(const char *filename, const struct streaming_start *ss, - const struct dvr_entry *de) + const struct dvr_entry *de, + int write_tags) { mk_mux_t *mkm; int fd; @@ -581,12 +578,10 @@ mk_mux_create(const char *filename, mkm->trackinfo_pos = mkm->fdpos; mk_write_master(mkm, 0x1654ae6b, mk_build_tracks(mkm, ss)); - mkm->tags = mk_build_metadata(de); - -#ifndef TAGS_AT_END - mkm->metadata_pos = mkm->fdpos; - mk_write_master(mkm, 0x1254c367, mkm->tags); -#endif + if(write_tags) { + mkm->metadata_pos = mkm->fdpos; + mk_write_master(mkm, 0x1254c367, mk_build_metadata(de)); + } mk_write_metaseek(mkm, 0); @@ -778,11 +773,6 @@ mk_mux_close(mk_mux_t *mkm) mk_close_cluster(mkm); mk_write_cues(mkm); -#ifdef TAGS_AT_END - mkm->metadata_pos = mkm->fdpos; - mk_write_master(mkm, 0x1254c367, mkm->tags); -#endif - mk_write_metaseek(mkm, 0); // Rewrite segment info to update duration diff --git a/src/dvr/mkmux.h b/src/dvr/mkmux.h index bb75576b..e4814c17 100644 --- a/src/dvr/mkmux.h +++ b/src/dvr/mkmux.h @@ -26,8 +26,9 @@ struct dvr_entry; struct th_pkt; mk_mux_t *mk_mux_create(const char *filename, - const struct streaming_start *ss, - const struct dvr_entry *de); + const struct streaming_start *ss, + const struct dvr_entry *de, + int write_tags); void mk_mux_write_pkt(mk_mux_t *mkm, struct th_pkt *pkt); diff --git a/src/webui/extjs.c b/src/webui/extjs.c index c2891a33..32e2d923 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -825,6 +825,7 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_u32(r, "titleDirs", !!(dvr_flags & DVR_DIR_PER_TITLE)); htsmsg_add_u32(r, "episodeInTitle", !!(dvr_flags & DVR_EPISODE_IN_TITLE)); htsmsg_add_u32(r, "cleanTitle", !!(dvr_flags & DVR_CLEAN_TITLE)); + htsmsg_add_u32(r, "tagFiles", !!(dvr_flags & DVR_TAG_FILES)); out = json_single_record(r, "dvrSettings"); @@ -863,6 +864,8 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque) flags |= DVR_DIR_PER_TITLE; if(http_arg_get(&hc->hc_req_args, "episodeInTitle") != NULL) flags |= DVR_EPISODE_IN_TITLE; + if(http_arg_get(&hc->hc_req_args, "tagFiles") != NULL) + flags |= DVR_TAG_FILES; dvr_flags_set(flags); diff --git a/src/webui/static/app/dvr.js b/src/webui/static/app/dvr.js index 5b58ba13..a2557245 100644 --- a/src/webui/static/app/dvr.js +++ b/src/webui/static/app/dvr.js @@ -566,7 +566,7 @@ tvheadend.dvrsettings = function() { 'channelDirs','channelInTitle', 'dateInTitle','timeInTitle', 'preExtraTime', 'postExtraTime', 'whitespaceInTitle', - 'titleDirs', 'episodeInTitle','cleanTitle']); + 'titleDirs', 'episodeInTitle', 'cleanTitle', 'tagFiles']); var confpanel = new Ext.FormPanel({ title:'Digital Video Recorder', @@ -625,6 +625,9 @@ tvheadend.dvrsettings = function() { }), new Ext.form.Checkbox({ fieldLabel: 'Replace whitespace in title with \'-\'', name: 'whitespaceInTitle' + }), new Ext.form.Checkbox({ + fieldLabel: 'Tag files with metadata', + name: 'tagFiles' }), { width: 300, fieldLabel: 'Post-processor command',