static void hls_muxer_simulation_reset(hls_muxer_state_t* state) { hls_muxer_stream_state_t* cur_stream; vod_status_t rc; mpegts_encoder_simulated_start_segment(&state->queue); if (state->clips_end > state->clips_start + 1) { state->cur_clip = state->clips_start; rc = hls_muxer_reinit_tracks(state); if (rc != VOD_OK) { vod_log_error(VOD_LOG_ERR, state->request_context->log, 0, "hls_muxer_simulation_reset: unexpected - hls_muxer_reinit_tracks failed %i", rc); } } else { for (cur_stream = state->first_stream; cur_stream < state->last_stream; cur_stream++) { cur_stream->cur_frame_part = *cur_stream->first_frame_part; cur_stream->cur_frame = cur_stream->cur_frame_part.first_frame; cur_stream->next_frame_time_offset = cur_stream->first_frame_time_offset; } } state->cur_frame = NULL; }
static void hls_muxer_simulation_reset(hls_muxer_state_t* state) { hls_muxer_stream_state_t* cur_stream; vod_status_t rc; mpegts_encoder_simulated_start_segment(&state->queue); if (state->media_set->clip_count > 1) { state->first_clip_track = state->media_set->filtered_tracks; rc = hls_muxer_reinit_tracks(state); if (rc != VOD_OK) { vod_log_error(VOD_LOG_ERR, state->request_context->log, 0, "hls_muxer_simulation_reset: unexpected - hls_muxer_reinit_tracks failed %i", rc); } // need to explicitly reset the id3 stream since reinit tracks skips it cur_stream = state->last_stream - 1; if (cur_stream->media_type == MEDIA_TYPE_NONE) { cur_stream->cur_frame_part = *cur_stream->first_frame_part; cur_stream->cur_frame = cur_stream->cur_frame_part.first_frame; cur_stream->next_frame_time_offset = cur_stream->first_frame_time_offset; } } else { for (cur_stream = state->first_stream; cur_stream < state->last_stream; cur_stream++) { cur_stream->cur_frame_part = *cur_stream->first_frame_part; cur_stream->cur_frame = cur_stream->cur_frame_part.first_frame; cur_stream->source = get_frame_part_source_clip(cur_stream->cur_frame_part); cur_stream->next_frame_time_offset = cur_stream->first_frame_time_offset; } } state->cur_frame = NULL; }
static vod_status_t hls_muxer_choose_stream(hls_muxer_state_t* state, hls_muxer_stream_state_t** result) { hls_muxer_stream_state_t* cur_stream; hls_muxer_stream_state_t* min_dts = NULL; vod_status_t rc; bool_t has_frames = FALSE; for (;;) { for (cur_stream = state->first_stream; cur_stream < state->last_stream; cur_stream++) { if (cur_stream->cur_frame >= cur_stream->cur_frame_part.last_frame) { if (cur_stream->cur_frame_part.next == NULL) { continue; } cur_stream->cur_frame_part = *cur_stream->cur_frame_part.next; cur_stream->cur_frame = cur_stream->cur_frame_part.first_frame; cur_stream->source = get_frame_part_source_clip(cur_stream->cur_frame_part); state->first_time = TRUE; } has_frames = TRUE; if (cur_stream->next_frame_time_offset >= cur_stream->segment_limit) { continue; } if (min_dts == NULL || cur_stream->next_frame_time_offset < min_dts->next_frame_time_offset) { min_dts = cur_stream; } } if (min_dts != NULL) { *result = min_dts; return VOD_OK; } if (state->first_clip_track >= state->media_set->filtered_tracks_end || has_frames) { break; } rc = hls_muxer_reinit_tracks(state); if (rc != VOD_OK) { return rc; } if (state->use_discontinuity) { break; } } return VOD_NOT_FOUND; }