Lines Matching refs:seg
147 SegmentContext *seg = s->priv_data;
152 ret = avformat_alloc_output_context2(&seg->avf, seg->oformat, NULL, NULL);
155 oc = seg->avf;
190 SegmentContext *seg = s->priv_data;
191 AVFormatContext *oc = seg->avf;
197 if (seg->segment_idx_wrap)
198 seg->segment_idx %= seg->segment_idx_wrap;
199 if (seg->use_strftime) {
209 s->url, seg->segment_idx) < 0) {
220 if (seg->entry_prefix)
221 size += strlen(seg->entry_prefix);
223 if ((ret = av_reallocp(&seg->cur_entry.filename, size)) < 0)
225 snprintf(seg->cur_entry.filename, size, "%s%s",
226 seg->entry_prefix ? seg->entry_prefix : "",
234 SegmentContext *seg = s->priv_data;
235 AVFormatContext *oc = seg->avf;
240 seg->avf = NULL;
243 oc = seg->avf;
246 seg->segment_idx++;
247 if ((seg->segment_idx_wrap) && (seg->segment_idx % seg->segment_idx_wrap == 0))
248 seg->segment_idx_wrap_nb++;
257 if (!seg->individual_header_trailer)
265 av_dict_copy(&options, seg->format_options, 0);
273 seg->segment_frame_count = 0;
279 SegmentContext *seg = s->priv_data;
282 snprintf(seg->temp_list_filename, sizeof(seg->temp_list_filename), seg->use_rename ? "%s.tmp" : "%s", seg->list);
283 ret = s->io_open(s, &seg->list_pb, seg->temp_list_filename, AVIO_FLAG_WRITE, NULL);
285 av_log(s, AV_LOG_ERROR, "Failed to open segment list '%s'\n", seg->list);
289 if (seg->list_type == LIST_TYPE_M3U8 && seg->segment_list_entries) {
293 avio_printf(seg->list_pb, "#EXTM3U\n");
294 avio_printf(seg->list_pb, "#EXT-X-VERSION:3\n");
295 avio_printf(seg->list_pb, "#EXT-X-MEDIA-SEQUENCE:%d\n", seg->segment_list_entries->index);
296 avio_printf(seg->list_pb, "#EXT-X-ALLOW-CACHE:%s\n",
297 seg->list_flags & SEGMENT_LIST_FLAG_CACHE ? "YES" : "NO");
300 seg->segment_list_entries->index);
302 for (entry = seg->segment_list_entries; entry; entry = entry->next)
304 avio_printf(seg->list_pb, "#EXT-X-TARGETDURATION:%"PRId64"\n", (int64_t)ceil(max_duration));
305 } else if (seg->list_type == LIST_TYPE_FFCONCAT) {
306 avio_printf(seg->list_pb, "ffconcat version 1.0\n");
349 SegmentContext *seg = s->priv_data;
350 AVFormatContext *oc = seg->avf;
370 if (seg->list) {
371 if (seg->list_size || seg->list_type == LIST_TYPE_M3U8) {
379 memcpy(entry, &seg->cur_entry, sizeof(*entry));
381 if (!seg->segment_list_entries)
382 seg->segment_list_entries = seg->segment_list_entries_end = entry;
384 seg->segment_list_entries_end->next = entry;
385 seg->segment_list_entries_end = entry;
388 if (seg->list_size && seg->segment_count >= seg->list_size) {
389 entry = seg->segment_list_entries;
390 seg->segment_list_entries = seg->segment_list_entries->next;
397 for (entry = seg->segment_list_entries; entry; entry = entry->next)
398 segment_list_print_entry(seg->list_pb, seg->list_type, entry, s);
399 if (seg->list_type == LIST_TYPE_M3U8 && is_last)
400 avio_printf(seg->list_pb, "#EXT-X-ENDLIST\n");
401 ff_format_io_close(s, &seg->list_pb);
402 if (seg->use_rename)
403 ff_rename(seg->temp_list_filename, seg->list, s);
405 segment_list_print_entry(seg->list_pb, seg->list_type, &seg->cur_entry, s);
406 avio_flush(seg->list_pb);
411 seg->avf->url, seg->segment_count);
412 seg->segment_count++;
414 if (seg->increment_tc) {
426 tc.start += (int)((seg->cur_entry.end_time - seg->cur_entry.start_time) * av_q2d(rate));/* increment timecode */
446 st_tc.start += (int)((seg->cur_entry.end_time - seg->cur_entry.start_time) * av_q2d(st_rate)); // increment timecode
590 SegmentContext *seg = s->priv_data;
593 seg->reference_stream_index = -1;
594 if (!strcmp(seg->reference_stream_specifier, "auto")) {
620 if ((seg->reference_stream_index = type_index_map[type]) >= 0)
626 seg->reference_stream_specifier);
630 seg->reference_stream_index = i;
636 if (seg->reference_stream_index < 0) {
638 seg->reference_stream_specifier);
647 SegmentContext *seg = s->priv_data;
650 ff_format_io_close(s, &seg->list_pb);
651 if (seg->avf) {
652 if (seg->is_nullctx)
653 close_null_ctxp(&seg->avf->pb);
655 ff_format_io_close(s, &seg->avf->pb);
656 avformat_free_context(seg->avf);
657 seg->avf = NULL;
659 av_freep(&seg->times);
660 av_freep(&seg->frames);
661 av_freep(&seg->cur_entry.filename);
663 cur = seg->segment_list_entries;
674 SegmentContext *seg = s->priv_data;
675 AVFormatContext *oc = seg->avf;
680 seg->segment_count = 0;
681 if (!seg->write_header_trailer)
682 seg->individual_header_trailer = 0;
684 if (seg->header_filename) {
685 seg->write_header_trailer = 1;
686 seg->individual_header_trailer = 0;
689 if (seg->initial_offset > 0) {
694 if ((seg->time != 2000000) + !!seg->times_str + !!seg->frames_str > 1) {
701 if (seg->times_str) {
702 if ((ret = parse_times(s, &seg->times, &seg->nb_times, seg->times_str)) < 0)
704 } else if (seg->frames_str) {
705 if ((ret = parse_frames(s, &seg->frames, &seg->nb_frames, seg->frames_str)) < 0)
708 if (seg->use_clocktime) {
709 if (seg->time <= 0) {
713 seg->clocktime_offset = seg->time - (seg->clocktime_offset % seg->time);
717 if (seg->list) {
718 if (seg->list_type == LIST_TYPE_UNDEFINED) {
719 if (av_match_ext(seg->list, "csv" )) seg->list_type = LIST_TYPE_CSV;
720 else if (av_match_ext(seg->list, "ext" )) seg->list_type = LIST_TYPE_EXT;
721 else if (av_match_ext(seg->list, "m3u8")) seg->list_type = LIST_TYPE_M3U8;
722 else if (av_match_ext(seg->list, "ffcat,ffconcat")) seg->list_type = LIST_TYPE_FFCONCAT;
723 else seg->list_type = LIST_TYPE_FLAT;
725 if (!seg->list_size && seg->list_type != LIST_TYPE_M3U8) {
729 const char *proto = avio_find_protocol_name(seg->list);
730 seg->use_rename = proto && !strcmp(proto, "file");
734 if (seg->list_type == LIST_TYPE_EXT)
740 seg->reference_stream_index,
741 av_get_media_type_string(s->streams[seg->reference_stream_index]->codecpar->codec_type));
743 seg->oformat = av_guess_format(seg->format, s->url, NULL);
745 if (!seg->oformat)
747 if (seg->oformat->flags & AVFMT_NOFILE) {
749 seg->oformat->name);
758 oc = seg->avf;
760 if (seg->write_header_trailer) {
762 seg->header_filename ? seg->header_filename : oc->url,
767 if (!seg->individual_header_trailer)
772 seg->is_nullctx = 1;
775 av_dict_copy(&options, seg->format_options, 0);
789 seg->segment_frame_count = 0;
796 seg->header_written = 1;
813 SegmentContext *seg = s->priv_data;
814 AVFormatContext *oc = seg->avf;
817 if (!seg->header_written) {
823 if (!seg->write_header_trailer || seg->header_filename) {
824 if (seg->header_filename) {
829 seg->is_nullctx = 0;
833 if (!seg->individual_header_trailer)
842 SegmentContext *seg = s->priv_data;
851 if (!seg->avf || !seg->avf->pb)
868 if (seg->times) {
869 end_pts = seg->segment_count < seg->nb_times ?
870 seg->times[seg->segment_count] : INT64_MAX;
871 } else if (seg->frames) {
872 start_frame = seg->segment_count < seg->nb_frames ?
873 seg->frames[seg->segment_count] : INT_MAX;
875 if (seg->use_clocktime) {
880 wrapped_val = (usecs + seg->clocktime_offset) % seg->time;
881 if (wrapped_val < seg->last_val && wrapped_val < seg->clocktime_wrap_duration)
882 seg->cut_pending = 1;
883 seg->last_val = wrapped_val;
885 end_pts = seg->time * (seg->segment_count + 1);
893 pkt->stream_index == seg->reference_stream_index ? seg->frame_count : -1);
895 if (pkt->stream_index == seg->reference_stream_index &&
896 (pkt->flags & AV_PKT_FLAG_KEY || seg->break_non_keyframes) &&
897 (seg->segment_frame_count > 0 || seg->write_empty) &&
898 (seg->cut_pending || seg->frame_count >= start_frame ||
901 end_pts - seg->time_delta, AV_TIME_BASE_Q) >= 0))) {
903 if (seg->cur_entry.last_duration == 0)
904 seg->cur_entry.end_time = (double)pkt->pts * av_q2d(st->time_base);
906 if ((ret = segment_end(s, seg->individual_header_trailer, 0)) < 0)
909 if ((ret = segment_start(s, seg->individual_header_trailer)) < 0)
912 seg->cut_pending = 0;
913 seg->cur_entry.index = seg->segment_idx + seg->segment_idx_wrap * seg->segment_idx_wrap_nb;
914 seg->cur_entry.start_time = (double)pkt->pts * av_q2d(st->time_base);
915 seg->cur_entry.start_pts = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q);
916 seg->cur_entry.end_time = seg->cur_entry.start_time;
918 if (seg->times || (!seg->frames && !seg->use_clocktime) && seg->write_empty)
922 if (pkt->stream_index == seg->reference_stream_index) {
924 seg->cur_entry.end_time =
925 FFMAX(seg->cur_entry.end_time, (double)(pkt->pts + pkt->duration) * av_q2d(st->time_base));
926 seg->cur_entry.last_duration = pkt->duration;
929 if (seg->segment_frame_count == 0) {
931 seg->avf->url, pkt->stream_index,
932 av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &st->time_base), seg->frame_count);
937 av_ts2timestr(seg->cur_entry.start_pts, &AV_TIME_BASE_Q),
942 offset = av_rescale_q(seg->initial_offset - (seg->reset_timestamps ? seg->cur_entry.start_pts : 0),
953 ret = ff_write_chained(seg->avf, pkt->stream_index, pkt, s,
954 seg->initial_offset || seg->reset_timestamps || seg->avf->oformat->interleave_packet);
959 if (st->index == seg->reference_stream_index) {
960 seg->frame_count++;
961 seg->segment_frame_count++;
969 SegmentContext *seg = s->priv_data;
970 AVFormatContext *oc = seg->avf;
976 if (!seg->write_header_trailer) {
981 seg->is_nullctx = 1;
992 SegmentContext *seg = s->priv_data;
993 AVFormatContext *oc = seg->avf;