diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 58d8fc7e..950fe8aa 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -359,7 +359,7 @@ dvr_rec_start(dvr_entry_t *de, const streaming_start_t *ss) } if(cfg->dvr_tag_files && de->de_bcast) { - if(muxer_write_meta(muxer, de->de_bcast)) { + if(muxer_write_meta(muxer, de->de_bcast, de->de_comment)) { dvr_rec_fatal_error(de, "Unable to write meta data"); return -1; } diff --git a/src/muxer.h b/src/muxer.h index 5ebb6f58..ea2d59d8 100644 --- a/src/muxer.h +++ b/src/muxer.h @@ -79,7 +79,8 @@ typedef struct muxer { const struct streaming_start *); // stream changes int (*m_close) (struct muxer *); // Close the muxer void (*m_destroy) (struct muxer *); // Free the memory - int (*m_write_meta) (struct muxer *, struct epg_broadcast *); // Append epg data + int (*m_write_meta) (struct muxer *, struct epg_broadcast *, + const char *comment); // Append epg data int (*m_write_pkt) (struct muxer *, // Append a media packet streaming_message_type_t, void *); @@ -127,8 +128,8 @@ static inline int muxer_close (muxer_t *m) static inline int muxer_destroy (muxer_t *m) { if (m) { m->m_destroy(m); return 0; } return -1; } -static inline int muxer_write_meta (muxer_t *m, struct epg_broadcast *eb) - { if (m && eb) return m->m_write_meta(m, eb); return -1; } +static inline int muxer_write_meta (muxer_t *m, struct epg_broadcast *eb, const char *comment) + { if (m && eb) return m->m_write_meta(m, eb, comment); return -1; } static inline int muxer_write_pkt (muxer_t *m, streaming_message_type_t smt, void *data) { if (m && data) return m->m_write_pkt(m, smt, data); return -1; } diff --git a/src/muxer/muxer_libav.c b/src/muxer/muxer_libav.c index 2d58aa74..3b6b197f 100644 --- a/src/muxer/muxer_libav.c +++ b/src/muxer/muxer_libav.c @@ -464,7 +464,7 @@ lav_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data) * NOP */ static int -lav_muxer_write_meta(muxer_t *m, struct epg_broadcast *eb) +lav_muxer_write_meta(muxer_t *m, struct epg_broadcast *eb, const char *comment) { return 0; } diff --git a/src/muxer/muxer_pass.c b/src/muxer/muxer_pass.c index 4985b3a1..c3b3b10b 100644 --- a/src/muxer/muxer_pass.c +++ b/src/muxer/muxer_pass.c @@ -514,7 +514,7 @@ pass_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data) * NOP */ static int -pass_muxer_write_meta(muxer_t *m, struct epg_broadcast *eb) +pass_muxer_write_meta(muxer_t *m, struct epg_broadcast *eb, const char *comment) { return 0; } diff --git a/src/muxer/muxer_tvh.c b/src/muxer/muxer_tvh.c index 02e9edc2..38890a74 100644 --- a/src/muxer/muxer_tvh.c +++ b/src/muxer/muxer_tvh.c @@ -174,11 +174,12 @@ tvh_muxer_write_pkt(muxer_t *m, streaming_message_type_t smt, void *data) * Append meta data when a channel changes its programme */ static int -tvh_muxer_write_meta(muxer_t *m, struct epg_broadcast *eb) +tvh_muxer_write_meta(muxer_t *m, struct epg_broadcast *eb, + const char *comment) { tvh_muxer_t *tm = (tvh_muxer_t*)m; - if(mk_mux_write_meta(tm->tm_ref, NULL, eb)) { + if(mk_mux_write_meta(tm->tm_ref, NULL, eb, comment)) { tm->m_errors++; return -1; } diff --git a/src/muxer/tvh/mkmux.c b/src/muxer/tvh/mkmux.c index c6ed8731..bd8c6661 100644 --- a/src/muxer/tvh/mkmux.c +++ b/src/muxer/tvh/mkmux.c @@ -32,6 +32,7 @@ #include "dvr/dvr.h" #include "mkmux.h" #include "ebml.h" +#include "lang_codes.h" #include "parsers/parser_avc.h" extern int dvr_iov_max; @@ -669,7 +670,8 @@ addtag(htsbuf_queue_t *q, htsbuf_queue_t *t) * */ static htsbuf_queue_t * -_mk_build_metadata(const dvr_entry_t *de, const epg_broadcast_t *ebc) +_mk_build_metadata(const dvr_entry_t *de, const epg_broadcast_t *ebc, + const char *comment) { htsbuf_queue_t *q = htsbuf_queue_alloc(0); char datestr[64], ctype[100]; @@ -680,6 +682,7 @@ _mk_build_metadata(const dvr_entry_t *de, const epg_broadcast_t *ebc) epg_episode_t *ee = NULL; channel_t *ch = NULL; lang_str_t *ls = NULL; + const char **langs, *lang; if (ebc) ee = ebc->episode; else if (de && de->de_bcast) ee = de->de_bcast->episode; @@ -747,6 +750,16 @@ _mk_build_metadata(const dvr_entry_t *de, const epg_broadcast_t *ebc) num.text, NULL, 0, NULL)); } + if (comment) { + lang = "eng"; + if ((langs = lang_code_split(NULL))) { + lang = tvh_strdupa(langs[0]); + free(langs); + } + + addtag(q, build_tag_string("COMMENT", comment, lang, 0, NULL)); + } + return q; } @@ -1212,7 +1225,8 @@ mk_mux_write_pkt(mk_mux_t *mkm, th_pkt_t *pkt) */ int mk_mux_write_meta(mk_mux_t *mkm, const dvr_entry_t *de, - const epg_broadcast_t *ebc) + const epg_broadcast_t *ebc, + const char *comment) { htsbuf_queue_t q; @@ -1220,7 +1234,7 @@ mk_mux_write_meta(mk_mux_t *mkm, const dvr_entry_t *de, mkm->metadata_pos = mkm->fdpos; htsbuf_queue_init(&q, 0); - ebml_append_master(&q, 0x1254c367, _mk_build_metadata(de, ebc)); + ebml_append_master(&q, 0x1254c367, _mk_build_metadata(de, ebc, comment)); mk_write_queue(mkm, &q); return mkm->error; diff --git a/src/muxer/tvh/mkmux.h b/src/muxer/tvh/mkmux.h index a107ff40..7dda3bd0 100644 --- a/src/muxer/tvh/mkmux.h +++ b/src/muxer/tvh/mkmux.h @@ -38,7 +38,8 @@ int mk_mux_init(mk_mux_t *mkm, const char *title, int mk_mux_write_pkt (mk_mux_t *mkm, struct th_pkt *pkt); int mk_mux_write_meta(mk_mux_t *mkm, const struct dvr_entry *de, - const struct epg_broadcast *eb); + const struct epg_broadcast *eb, + const char *comment); int mk_mux_insert_chapter(mk_mux_t *mkm);