]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Make it possible to configure whether or not to write tags to MKV file
authorAndreas Öman <andreas@lonelycoder.com>
Wed, 1 Sep 2010 16:42:26 +0000 (16:42 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Wed, 1 Sep 2010 16:42:26 +0000 (16:42 +0000)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/dvr/dvr_rec.c
src/dvr/mkmux.c
src/dvr/mkmux.h
src/webui/extjs.c
src/webui/static/app/dvr.js

index 703443f4f764bd4f7cffce694b4bb9bbe203d941..918b51ee7e5459c19bb7c906b3b6f6755b505028 100644 (file)
@@ -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,
index a05a98472a66a35a6b485e4b5aa029c3328fe4e9..98aa275178cccb34d41c476cb3e5153b327461e9 100644 (file)
@@ -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);
 
index 71167d957202a243d764d2d54272c494d1aae9ed..33235a344cd9852d35af45a338e4031713df18a7 100644 (file)
@@ -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");
index cbb003fd2771d703b11007918eb9d3f0018e8c4a..542f0016637cf3d4e58e59db93f20b7636854ce8 100644 (file)
@@ -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
index bb75576bf5bc78eb87aa671549ddb5e674a241bd..e4814c17b16e5d828de0287bcf84336737604992 100644 (file)
@@ -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);
 
index c2891a337b1b6031327fd503566dc5484b0d8c86..32e2d9236f412881879109291ad1868c75f4c74b 100644 (file)
@@ -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);
 
index 5b58ba13763b73f519fbb5033b3acfa9a141bab3..a25572459bfc5f7ee385ee1f0b065defacdce9a3 100644 (file)
@@ -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',