dvr: implement file size change notifications

This commit is contained in:
Jaroslav Kysela 2015-02-01 17:36:26 +01:00
parent a650b2ea79
commit 4b05735b87
2 changed files with 22 additions and 3 deletions

View file

@ -235,6 +235,11 @@ typedef struct dvr_entry {
LIST_ENTRY(dvr_entry) de_inotify_link;
#endif
/**
* Entry change notification timer
*/
time_t de_last_notify;
} dvr_entry_t;
#define DVR_CH_NAME(e) ((e)->de_channel == NULL ? (e)->de_channel_name : channel_get_name((e)->de_channel))

View file

@ -309,6 +309,17 @@ dvr_rec_fatal_error(dvr_entry_t *de, const char *fmt, ...)
de->de_filename ?: lang_str_get(de->de_title, NULL), msgbuf);
}
/**
*
*/
static void
dvr_notify(dvr_entry_t *de, int now)
{
if (now || de->de_last_notify + 5 < dispatch_clock) {
idnode_notify_simple(&de->de_id);
de->de_last_notify = dispatch_clock;
}
}
/**
*
@ -328,7 +339,7 @@ dvr_rec_set_state(dvr_entry_t *de, dvr_rs_state_t newstate, int error)
de->de_errors++;
}
if (notify)
idnode_notify_simple(&de->de_id);
dvr_notify(de, 1);
}
/**
@ -505,14 +516,14 @@ dvr_thread(void *aux)
pb = ((th_pkt_t*)sm->sm_data)->pkt_payload;
if (((th_pkt_t*)sm->sm_data)->pkt_err) {
de->de_data_errors += ((th_pkt_t*)sm->sm_data)->pkt_err;
idnode_notify_simple(&de->de_id);
dvr_notify(de, 0);
}
}
else if (sm->sm_type == SMT_MPEGTS) {
pb = sm->sm_data;
if (pb->pb_err) {
de->de_data_errors += pb->pb_err;
idnode_notify_simple(&de->de_id);
dvr_notify(de, 0);
}
}
if (pb)
@ -543,6 +554,7 @@ dvr_thread(void *aux)
if(started) {
muxer_write_pkt(prch->prch_muxer, sm->sm_type, sm->sm_data);
sm->sm_data = NULL;
dvr_notify(de, 0);
}
break;
@ -551,6 +563,7 @@ dvr_thread(void *aux)
dvr_rec_set_state(de, DVR_RS_RUNNING, 0);
muxer_write_pkt(prch->prch_muxer, sm->sm_type, sm->sm_data);
sm->sm_data = NULL;
dvr_notify(de, 0);
}
break;
@ -729,6 +742,7 @@ dvr_thread_epilog(dvr_entry_t *de)
muxer_close(prch->prch_muxer);
muxer_destroy(prch->prch_muxer);
prch->prch_muxer = NULL;
dvr_notify(de, 1);
dvr_config_t *cfg = de->de_config;
if(cfg && cfg->dvr_postproc && de->de_filename)