streaming_queue_init(&de->de_sq, 0);
de->de_gh = globalheaders_create(&de->de_sq.sq_st);
de->de_tsfix = tsfix_create(de->de_gh);
+ tsfix_set_start_time(de->de_tsfix, de->de_start - (60 * de->de_start_extra));
st = de->de_tsfix;
flags = 0;
}
switch(sm->sm_type) {
case SMT_MPEGTS:
case SMT_PACKET:
- if(started &&
- dispatch_clock > de->de_start - (60 * de->de_start_extra)) {
+ if(started) {
dvr_rec_set_state(de, DVR_RS_RUNNING, 0);
-
muxer_write_pkt(de->de_mux, sm->sm_type, sm->sm_data);
sm->sm_data = NULL;
}
struct tfstream_list tf_streams;
int tf_hasvideo;
int64_t tf_tsref;
+ time_t tf_start_time;
struct th_pktref_queue tf_ptsq;
tfstream_t *tfs = tfs_find(tf, pkt);
streaming_msg_free(sm);
- if(tfs == NULL) {
+ if(tfs == NULL || dispatch_clock < tf->tf_start_time) {
pkt_ref_dec(pkt);
return;
}
-
if(tf->tf_tsref == PTS_UNSET &&
(!tf->tf_hasvideo ||
(SCT_ISVIDEO(tfs->tfs_type) && pkt->pkt_frametype == PKT_I_FRAME))) {
TAILQ_INIT(&tf->tf_ptsq);
tf->tf_output = output;
+ tf->tf_start_time = dispatch_clock;
+
streaming_target_init(&tf->tf_input, tsfix_input, tf, 0);
return &tf->tf_input;
}
+/**
+ *
+ */
+void tsfix_set_start_time(streaming_target_t *pad, time_t start)
+{
+ tsfix_t *tf = (tsfix_t *)pad;
+
+ tf->tf_start_time = start;
+}
+
/**
*
streaming_target_t *tsfix_create(streaming_target_t *output);
+void tsfix_set_start_time(streaming_target_t *pad, time_t start);
+
void tsfix_destroy(streaming_target_t *gh);