static inline ssize_t _process_msg0 ( timeshift_t *ts, timeshift_file_t *tsf, streaming_message_t **smp ) { int i; ssize_t err; streaming_start_t *ss; streaming_message_t *sm = *smp; if (sm->sm_type == SMT_START) { err = 0; timeshift_index_data_t *ti = calloc(1, sizeof(timeshift_index_data_t)); ti->pos = tsf->size; ti->data = sm; *smp = NULL; TAILQ_INSERT_TAIL(&tsf->sstart, ti, link); /* Update video index */ ss = sm->sm_data; for (i = 0; i < ss->ss_num_components; i++) if (SCT_ISVIDEO(ss->ss_components[i].ssc_type)) ts->vididx = ss->ss_components[i].ssc_index; } else if (sm->sm_type == SMT_SIGNAL_STATUS) err = timeshift_write_sigstat(tsf, sm->sm_time, sm->sm_data); else if (sm->sm_type == SMT_PACKET) { err = timeshift_write_packet(tsf, sm->sm_time, sm->sm_data); if (err > 0) { th_pkt_t *pkt = sm->sm_data; /* Index video iframes */ if (pkt->pkt_componentindex == ts->vididx && pkt->pkt_frametype == PKT_I_FRAME) { timeshift_index_iframe_t *ti = calloc(1, sizeof(timeshift_index_iframe_t)); ti->pos = tsf->size; ti->time = sm->sm_time; TAILQ_INSERT_TAIL(&tsf->iframes, ti, link); } } } else if (sm->sm_type == SMT_MPEGTS) err = timeshift_write_mpegts(tsf, sm->sm_time, sm->sm_data); else err = 0; /* OK */ if (err > 0) { tsf->last = sm->sm_time; tsf->size += err; atomic_add_u64(×hift_total_size, err); if (tsf->ram) atomic_add_u64(×hift_total_ram_size, err); } return err; }
static inline ssize_t _process_msg0 ( timeshift_t *ts, timeshift_file_t *tsf, streaming_message_t *sm ) { ssize_t err; if (sm->sm_type == SMT_START) { err = 0; _handle_sstart(ts, tsf, streaming_msg_clone(sm)); } else if (sm->sm_type == SMT_SIGNAL_STATUS) err = timeshift_write_sigstat(tsf, sm->sm_time, sm->sm_data); else if (sm->sm_type == SMT_PACKET) { err = timeshift_write_packet(tsf, sm->sm_time, sm->sm_data); if (err > 0) { th_pkt_t *pkt = sm->sm_data; /* Index video iframes */ if (pkt->pkt_componentindex == ts->vididx && pkt->pkt_frametype == PKT_I_FRAME) { timeshift_index_iframe_t *ti = calloc(1, sizeof(timeshift_index_iframe_t)); memoryinfo_alloc(×hift_memoryinfo, sizeof(*ti)); ti->pos = tsf->size; ti->time = sm->sm_time; TAILQ_INSERT_TAIL(&tsf->iframes, ti, link); } } } else if (sm->sm_type == SMT_MPEGTS) { err = timeshift_write_mpegts(tsf, sm->sm_time, sm->sm_data); } else err = 0; /* OK */ if (err > 0) { tsf->last = sm->sm_time; tsf->size += err; atomic_add_u64(×hift_total_size, err); if (tsf->ram) atomic_add_u64(×hift_total_ram_size, err); } return err; }