Skip to content

Commit

Permalink
DVR: optimization, accepd start == stop like a running condition too …
Browse files Browse the repository at this point in the history
…(see #3296)
  • Loading branch information
perexg committed Nov 15, 2015
1 parent 82776a4 commit 0bec20a
Showing 1 changed file with 17 additions and 22 deletions.
39 changes: 17 additions & 22 deletions src/dvr/dvr_rec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1115,7 +1115,7 @@ dvr_thread_mpegts_stats(dvr_entry_t *de, void *sm_data)
static int
dvr_thread_rec_start(dvr_entry_t **_de, streaming_start_t *ss,
int *run, int *started, int64_t *dts_offset,
int epg_running, const char *postproc)
const char *postproc)
{
dvr_entry_t *de = *_de;
profile_chain_t *prch = de->de_chain;
Expand All @@ -1132,14 +1132,12 @@ dvr_thread_rec_start(dvr_entry_t **_de, streaming_start_t *ss,
dvr_thread_epilog(de, postproc);
*dts_offset = PTS_UNSET;
*started = 0;
if (epg_running) {
if (!dvr_thread_global_lock(de, run))
return 0;
if (de->de_config->dvr_clone)
*_de = dvr_entry_clone(de);
dvr_thread_global_unlock(de);
de = *_de;
}
if (!dvr_thread_global_lock(de, run))
return 0;
if (de->de_config->dvr_clone)
*_de = dvr_entry_clone(de);
dvr_thread_global_unlock(de);
de = *_de;
}

if (!*started) {
Expand Down Expand Up @@ -1222,12 +1220,13 @@ dvr_thread(void *aux)
}
streaming_queue_remove(sq, sm);

if (sm->sm_type == SMT_PACKET || sm->sm_type == SMT_MPEGTS) {
if (de->de_running_start > de->de_running_stop || running_disabled) {
epg_running = 1;
} else if (de->de_running_start == 0 && de->de_running_stop == 0) {
if (running_disabled) {
epg_running = 1;
} else if (sm->sm_type == SMT_PACKET || sm->sm_type == SMT_MPEGTS) {
if (de->de_running_start > 0) {
epg_running = de->de_running_start >= de->de_running_stop;
} else if (de->de_running_stop == 0) {
if (start_time + 2 >= dispatch_clock) {
epg_running = 0;
TAILQ_INSERT_TAIL(&backlog, sm, sm_link);
continue;
} else {
Expand All @@ -1254,9 +1253,7 @@ dvr_thread(void *aux)
rs = DVR_RS_COMMERCIAL;
dvr_rec_set_state(de, rs, 0);

if (rs == DVR_RS_COMMERCIAL && comm_skip)
break;
if (!epg_running) {
if ((rs == DVR_RS_COMMERCIAL && comm_skip) || !epg_running) {
if (ss && packets && de->de_running_start == 0) {
dvr_streaming_restart(de, &run);
packets = 0;
Expand All @@ -1274,8 +1271,7 @@ dvr_thread(void *aux)
break;

if (muxing == 0 &&
!dvr_thread_rec_start(&de, ss, &run, &started, &dts_offset,
epg_running, postproc))
!dvr_thread_rec_start(&de, ss, &run, &started, &dts_offset, postproc))
break;

muxing = 1;
Expand Down Expand Up @@ -1323,7 +1319,7 @@ dvr_thread(void *aux)
break;

if (!epg_running) {
if (ss && packets && de->de_running_start == 0) {
if (packets && de->de_running_start == 0) {
dvr_streaming_restart(de, &run);
packets = 0;
started = 0;
Expand All @@ -1332,8 +1328,7 @@ dvr_thread(void *aux)
}

if (muxing == 0 &&
!dvr_thread_rec_start(&de, ss, &run, &started, &dts_offset,
epg_running, postproc))
!dvr_thread_rec_start(&de, ss, &run, &started, &dts_offset, postproc))
break;

muxing = 1;
Expand Down

0 comments on commit 0bec20a

Please sign in to comment.