#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,
/* 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);
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"));
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);
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");
#include "mkmux.h"
#include "ebml.h"
-#define TAGS_AT_END
-
TAILQ_HEAD(mk_cue_queue, mk_cue);
#define MATROSKA_TIMESCALE 1000000 // in nS
char uuid[16];
char *title;
-
- htsbuf_queue_t *tags;
};
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;
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);
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
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);
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");
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);
'channelDirs','channelInTitle',
'dateInTitle','timeInTitle',
'preExtraTime', 'postExtraTime', 'whitespaceInTitle',
- 'titleDirs', 'episodeInTitle','cleanTitle']);
+ 'titleDirs', 'episodeInTitle', 'cleanTitle', 'tagFiles']);
var confpanel = new Ext.FormPanel({
title:'Digital Video Recorder',
}), 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',