From: Jaroslav Kysela Date: Fri, 30 Sep 2016 13:30:51 +0000 (+0200) Subject: dvr: write marks (mkv chapters) for EITp/f, fixes #3993 X-Git-Tag: v4.2.1~296 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=747ed011c54718bfcf20d4a89a94c6ad533d4dbc;p=thirdparty%2Ftvheadend.git dvr: write marks (mkv chapters) for EITp/f, fixes #3993 --- diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index de43e0005..8f120af46 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -187,6 +187,7 @@ typedef struct dvr_entry { time_t de_running_start; time_t de_running_stop; time_t de_running_pause; + int de_running_change; char *de_owner; char *de_creator; diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 38785c7f9..78524861e 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -1883,12 +1883,6 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn channel_get_name(e->channel), running); LIST_FOREACH(de, &e->channel->ch_dvrs, de_channel_link) { - if (!dvr_entry_get_epg_running(de)) { - atomic_set_time_t(&de->de_running_start, 0); - atomic_set_time_t(&de->de_running_stop, 0); - atomic_set_time_t(&de->de_running_pause, 0); - continue; - } if (running == EPG_RUNNING_NOW && de->de_dvb_eid == e->dvb_eid) { if (de->de_running_pause) { tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG unpause", @@ -1896,6 +1890,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn epg_broadcast_get_title(e, NULL), channel_get_name(e->channel)); atomic_set_time_t(&de->de_running_pause, 0); + atomic_add(&de->de_running_change, 1); } if (!de->de_running_start) { tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG marking start", @@ -1903,9 +1898,11 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn epg_broadcast_get_title(e, NULL), channel_get_name(e->channel)); atomic_set_time_t(&de->de_running_start, gclk()); + atomic_add(&de->de_running_change, 1); } if (dvr_entry_get_start_time(de, 1) > gclk()) { atomic_set_time_t(&de->de_start, gclk()); + atomic_add(&de->de_running_change, 1); dvr_entry_set_timer(de); tvhdebug(LS_DVR, "dvr entry %s event %s on %s - EPG start", idnode_uuid_as_str(&de->de_id, ubuf), @@ -1925,6 +1922,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn srcname = de->de_dvb_eid == e->dvb_eid ? "event" : "other running event"; if (!de->de_running_stop || de->de_running_start > de->de_running_stop) { + atomic_add(&de->de_running_change, 1); tvhdebug(LS_DVR, "dvr entry %s %s %s on %s - EPG marking stop", idnode_uuid_as_str(&de->de_id, ubuf), srcname, epg_broadcast_get_title(e, NULL), @@ -1946,6 +1944,7 @@ void dvr_event_running(epg_broadcast_t *e, epg_source_t esrc, epg_running_t runn epg_broadcast_get_title(e, NULL), channel_get_name(e->channel)); atomic_set_time_t(&de->de_running_pause, gclk()); + atomic_add(&de->de_running_change, 1); } } } diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index b3cd2f2ed..f21d0ab60 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -1319,13 +1319,14 @@ dvr_thread(void *aux) if (epg_pause != (epg_running == 2)) { epg_pause = epg_running == 2; - muxer_add_marker(prch->prch_muxer); + if (muxing) muxer_add_marker(prch->prch_muxer); } else if (commercial != pkt->pkt_commercial) { - muxer_add_marker(prch->prch_muxer); + commercial = pkt->pkt_commercial; + if (muxing) muxer_add_marker(prch->prch_muxer); + } else if (atomic_exchange(&de->de_running_change, 0)) { + if (muxing) muxer_add_marker(prch->prch_muxer); } - commercial = pkt->pkt_commercial; - if (ss == NULL) break; @@ -1389,6 +1390,13 @@ dvr_thread(void *aux) break; } + if (epg_pause != (epg_running == 2)) { + epg_pause = epg_running == 2; + if (muxing) muxer_add_marker(prch->prch_muxer); + } else if (atomic_exchange(&de->de_running_change, 0)) { + if (muxing) muxer_add_marker(prch->prch_muxer); + } + if (muxing == 0 && !dvr_thread_rec_start(&de, ss, &run, &started, &dts_offset, postproc)) break;