Make it possible to configure whether or not to write tags to MKV file
This commit is contained in:
parent
ec7978e6b2
commit
65f42d8f0c
7 changed files with 26 additions and 21 deletions
|
@ -43,6 +43,7 @@ extern struct dvr_entry_list dvrentries;
|
||||||
#define DVR_DIR_PER_TITLE 0x40
|
#define DVR_DIR_PER_TITLE 0x40
|
||||||
#define DVR_EPISODE_IN_TITLE 0x80
|
#define DVR_EPISODE_IN_TITLE 0x80
|
||||||
#define DVR_CLEAN_TITLE 0x100
|
#define DVR_CLEAN_TITLE 0x100
|
||||||
|
#define DVR_TAG_FILES 0x200
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DVR_PRIO_IMPORTANT,
|
DVR_PRIO_IMPORTANT,
|
||||||
|
|
|
@ -729,6 +729,8 @@ dvr_init(void)
|
||||||
|
|
||||||
/* Override settings with config */
|
/* Override settings with config */
|
||||||
|
|
||||||
|
dvr_flags = DVR_TAG_FILES;
|
||||||
|
|
||||||
if((m = hts_settings_load("dvr/config")) != NULL) {
|
if((m = hts_settings_load("dvr/config")) != NULL) {
|
||||||
|
|
||||||
htsmsg_get_s32(m, "pre-extra-time", &dvr_extra_time_pre);
|
htsmsg_get_s32(m, "pre-extra-time", &dvr_extra_time_pre);
|
||||||
|
@ -760,6 +762,9 @@ dvr_init(void)
|
||||||
if(!htsmsg_get_u32(m, "episode-in-title", &u32) && u32)
|
if(!htsmsg_get_u32(m, "episode-in-title", &u32) && u32)
|
||||||
dvr_flags |= DVR_EPISODE_IN_TITLE;
|
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"));
|
tvh_str_set(&dvr_postproc, htsmsg_get_str(m, "postproc"));
|
||||||
|
|
||||||
htsmsg_destroy(m);
|
htsmsg_destroy(m);
|
||||||
|
@ -812,6 +817,7 @@ dvr_save(void)
|
||||||
htsmsg_add_u32(m, "whitespace-in-title", !!(dvr_flags & DVR_WHITESPACE_IN_TITLE));
|
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, "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, "episode-in-title", !!(dvr_flags & DVR_EPISODE_IN_TITLE));
|
||||||
|
htsmsg_add_u32(m, "tag-files", !!(dvr_flags & DVR_TAG_FILES));
|
||||||
if(dvr_postproc != NULL)
|
if(dvr_postproc != NULL)
|
||||||
htsmsg_add_str(m, "postproc", dvr_postproc);
|
htsmsg_add_str(m, "postproc", dvr_postproc);
|
||||||
|
|
||||||
|
|
|
@ -307,7 +307,8 @@ dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss)
|
||||||
return;
|
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) {
|
if(de->de_mkmux == NULL) {
|
||||||
dvr_rec_fatal_error(de, "Unable to open file");
|
dvr_rec_fatal_error(de, "Unable to open file");
|
||||||
|
|
|
@ -31,8 +31,6 @@
|
||||||
#include "mkmux.h"
|
#include "mkmux.h"
|
||||||
#include "ebml.h"
|
#include "ebml.h"
|
||||||
|
|
||||||
#define TAGS_AT_END
|
|
||||||
|
|
||||||
TAILQ_HEAD(mk_cue_queue, mk_cue);
|
TAILQ_HEAD(mk_cue_queue, mk_cue);
|
||||||
|
|
||||||
#define MATROSKA_TIMESCALE 1000000 // in nS
|
#define MATROSKA_TIMESCALE 1000000 // in nS
|
||||||
|
@ -92,8 +90,6 @@ struct mk_mux {
|
||||||
|
|
||||||
char uuid[16];
|
char uuid[16];
|
||||||
char *title;
|
char *title;
|
||||||
|
|
||||||
htsbuf_queue_t *tags;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -553,7 +549,8 @@ mk_write_metaseek(mk_mux_t *mkm, int first)
|
||||||
mk_mux_t *
|
mk_mux_t *
|
||||||
mk_mux_create(const char *filename,
|
mk_mux_create(const char *filename,
|
||||||
const struct streaming_start *ss,
|
const struct streaming_start *ss,
|
||||||
const struct dvr_entry *de)
|
const struct dvr_entry *de,
|
||||||
|
int write_tags)
|
||||||
{
|
{
|
||||||
mk_mux_t *mkm;
|
mk_mux_t *mkm;
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -581,12 +578,10 @@ mk_mux_create(const char *filename,
|
||||||
mkm->trackinfo_pos = mkm->fdpos;
|
mkm->trackinfo_pos = mkm->fdpos;
|
||||||
mk_write_master(mkm, 0x1654ae6b, mk_build_tracks(mkm, ss));
|
mk_write_master(mkm, 0x1654ae6b, mk_build_tracks(mkm, ss));
|
||||||
|
|
||||||
mkm->tags = mk_build_metadata(de);
|
if(write_tags) {
|
||||||
|
|
||||||
#ifndef TAGS_AT_END
|
|
||||||
mkm->metadata_pos = mkm->fdpos;
|
mkm->metadata_pos = mkm->fdpos;
|
||||||
mk_write_master(mkm, 0x1254c367, mkm->tags);
|
mk_write_master(mkm, 0x1254c367, mk_build_metadata(de));
|
||||||
#endif
|
}
|
||||||
|
|
||||||
mk_write_metaseek(mkm, 0);
|
mk_write_metaseek(mkm, 0);
|
||||||
|
|
||||||
|
@ -778,11 +773,6 @@ mk_mux_close(mk_mux_t *mkm)
|
||||||
mk_close_cluster(mkm);
|
mk_close_cluster(mkm);
|
||||||
mk_write_cues(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);
|
mk_write_metaseek(mkm, 0);
|
||||||
|
|
||||||
// Rewrite segment info to update duration
|
// Rewrite segment info to update duration
|
||||||
|
|
|
@ -27,7 +27,8 @@ struct th_pkt;
|
||||||
|
|
||||||
mk_mux_t *mk_mux_create(const char *filename,
|
mk_mux_t *mk_mux_create(const char *filename,
|
||||||
const struct streaming_start *ss,
|
const struct streaming_start *ss,
|
||||||
const struct dvr_entry *de);
|
const struct dvr_entry *de,
|
||||||
|
int write_tags);
|
||||||
|
|
||||||
void mk_mux_write_pkt(mk_mux_t *mkm, struct th_pkt *pkt);
|
void mk_mux_write_pkt(mk_mux_t *mkm, struct th_pkt *pkt);
|
||||||
|
|
||||||
|
|
|
@ -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, "titleDirs", !!(dvr_flags & DVR_DIR_PER_TITLE));
|
||||||
htsmsg_add_u32(r, "episodeInTitle", !!(dvr_flags & DVR_EPISODE_IN_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, "cleanTitle", !!(dvr_flags & DVR_CLEAN_TITLE));
|
||||||
|
htsmsg_add_u32(r, "tagFiles", !!(dvr_flags & DVR_TAG_FILES));
|
||||||
|
|
||||||
out = json_single_record(r, "dvrSettings");
|
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;
|
flags |= DVR_DIR_PER_TITLE;
|
||||||
if(http_arg_get(&hc->hc_req_args, "episodeInTitle") != NULL)
|
if(http_arg_get(&hc->hc_req_args, "episodeInTitle") != NULL)
|
||||||
flags |= DVR_EPISODE_IN_TITLE;
|
flags |= DVR_EPISODE_IN_TITLE;
|
||||||
|
if(http_arg_get(&hc->hc_req_args, "tagFiles") != NULL)
|
||||||
|
flags |= DVR_TAG_FILES;
|
||||||
|
|
||||||
dvr_flags_set(flags);
|
dvr_flags_set(flags);
|
||||||
|
|
||||||
|
|
|
@ -566,7 +566,7 @@ tvheadend.dvrsettings = function() {
|
||||||
'channelDirs','channelInTitle',
|
'channelDirs','channelInTitle',
|
||||||
'dateInTitle','timeInTitle',
|
'dateInTitle','timeInTitle',
|
||||||
'preExtraTime', 'postExtraTime', 'whitespaceInTitle',
|
'preExtraTime', 'postExtraTime', 'whitespaceInTitle',
|
||||||
'titleDirs', 'episodeInTitle','cleanTitle']);
|
'titleDirs', 'episodeInTitle', 'cleanTitle', 'tagFiles']);
|
||||||
|
|
||||||
var confpanel = new Ext.FormPanel({
|
var confpanel = new Ext.FormPanel({
|
||||||
title:'Digital Video Recorder',
|
title:'Digital Video Recorder',
|
||||||
|
@ -625,6 +625,9 @@ tvheadend.dvrsettings = function() {
|
||||||
}), new Ext.form.Checkbox({
|
}), new Ext.form.Checkbox({
|
||||||
fieldLabel: 'Replace whitespace in title with \'-\'',
|
fieldLabel: 'Replace whitespace in title with \'-\'',
|
||||||
name: 'whitespaceInTitle'
|
name: 'whitespaceInTitle'
|
||||||
|
}), new Ext.form.Checkbox({
|
||||||
|
fieldLabel: 'Tag files with metadata',
|
||||||
|
name: 'tagFiles'
|
||||||
}), {
|
}), {
|
||||||
width: 300,
|
width: 300,
|
||||||
fieldLabel: 'Post-processor command',
|
fieldLabel: 'Post-processor command',
|
||||||
|
|
Loading…
Add table
Reference in a new issue