vod_status_t segmenter_get_segment_durations_estimate( request_context_t* request_context, segmenter_conf_t* conf, media_set_t* media_set, media_sequence_t* sequence, uint32_t media_type, segment_durations_t* result) { media_track_t** longest_track; media_sequence_t* sequences_end; media_sequence_t* cur_sequence; uint64_t duration_millis; uint32_t cur_media_type; SEGMENT_CHOOSE_HEADER(conf); if (sequence != NULL) { sequences_end = sequence + 1; } else { sequence = media_set->sequences; sequences_end = media_set->sequences_end; } if (media_set->durations != NULL) { duration_millis = media_set->total_duration; if (media_set->use_discontinuity) { result->start_time = media_set->first_clip_time; result->end_time = media_set->first_clip_time + duration_millis; return segmenter_get_segment_durations_estimate_internal( request_context, conf, media_set, sequence, media_set->durations, media_set->total_clip_count, media_set->durations[0], result); } // no discontinuity - treat it like a single clip } else { duration_millis = 0; for (cur_sequence = sequence; cur_sequence < sequences_end; cur_sequence++) { longest_track = cur_sequence->filtered_clips[0].longest_track; if (media_type != MEDIA_TYPE_NONE) { if (longest_track[media_type] != NULL && longest_track[media_type]->media_info.duration_millis > duration_millis) { duration_millis = longest_track[media_type]->media_info.duration_millis; } continue; } for (cur_media_type = 0; cur_media_type < MEDIA_TYPE_COUNT; cur_media_type++) { if (longest_track[cur_media_type] != NULL && longest_track[cur_media_type]->media_info.duration_millis > duration_millis) { duration_millis = longest_track[cur_media_type]->media_info.duration_millis; } } } } result->start_time = media_set->first_clip_time; result->end_time = media_set->first_clip_time + duration_millis; return segmenter_get_segment_durations_estimate_internal( request_context, conf, media_set, sequence, NULL, 1, duration_millis, result); }
vod_status_t segmenter_get_segment_durations_estimate( request_context_t* request_context, segmenter_conf_t* conf, media_set_t* media_set, media_sequence_t* sequence, uint32_t media_type, segment_durations_t* result) { media_track_t** longest_track; media_sequence_t* sequences_end; media_sequence_t* cur_sequence; uint32_t duration_millis; if (media_set->total_clip_count > 1) { result->duration_millis = media_set->total_duration; if (media_set->use_discontinuity) { return segmenter_get_segment_durations_estimate_internal( request_context, conf, media_set->durations, media_set->total_clip_count, result); } // no discontinuity - treat it like a single clip } else { result->duration_millis = 0; if (sequence != NULL) { cur_sequence = sequence; sequences_end = sequence + 1; } else { cur_sequence = media_set->sequences; sequences_end = media_set->sequences_end; } for (; cur_sequence < sequences_end; cur_sequence++) { longest_track = cur_sequence->filtered_clips[0].longest_track; if (longest_track[MEDIA_TYPE_VIDEO] != NULL && longest_track[MEDIA_TYPE_VIDEO]->media_info.duration_millis > result->duration_millis && (media_type == MEDIA_TYPE_NONE || media_type == MEDIA_TYPE_VIDEO)) { result->duration_millis = longest_track[MEDIA_TYPE_VIDEO]->media_info.duration_millis; } if (longest_track[MEDIA_TYPE_AUDIO] != NULL && longest_track[MEDIA_TYPE_AUDIO]->media_info.duration_millis > result->duration_millis && (media_type == MEDIA_TYPE_NONE || media_type == MEDIA_TYPE_AUDIO)) { result->duration_millis = longest_track[MEDIA_TYPE_AUDIO]->media_info.duration_millis; } } } duration_millis = result->duration_millis; return segmenter_get_segment_durations_estimate_internal( request_context, conf, &duration_millis, 1, result); }