Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
dvr: write marks (mkv chapters) for EITp/f, fixes #3993
  • Loading branch information
perexg committed Sep 30, 2016
1 parent 72b014c commit 747ed01
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 10 deletions.
1 change: 1 addition & 0 deletions src/dvr/dvr.h
Expand Up @@ -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;
Expand Down
11 changes: 5 additions & 6 deletions src/dvr/dvr_db.c
Expand Up @@ -1883,29 +1883,26 @@ 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",
idnode_uuid_as_str(&de->de_id, ubuf),
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",
idnode_uuid_as_str(&de->de_id, ubuf),
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),
Expand All @@ -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),
Expand All @@ -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);
}
}
}
Expand Down
16 changes: 12 additions & 4 deletions src/dvr/dvr_rec.c
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 747ed01

Please sign in to comment.