MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / segment_list_open

Function segment_list_open

libavformat/segment.c:283–319  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

281}
282
283static int segment_list_open(AVFormatContext *s)
284{
285 SegmentContext *seg = s->priv_data;
286 int ret;
287
288 av_freep(&seg->temp_list_filename);
289 seg->temp_list_filename = av_asprintf(seg->use_rename ? "%s.tmp" : "%s", seg->list);
290 if (!seg->temp_list_filename)
291 return AVERROR(ENOMEM);
292 ret = s->io_open(s, &seg->list_pb, seg->temp_list_filename, AVIO_FLAG_WRITE, NULL);
293 if (ret < 0) {
294 av_log(s, AV_LOG_ERROR, "Failed to open segment list '%s'\n", seg->list);
295 return ret;
296 }
297
298 if (seg->list_type == LIST_TYPE_M3U8 && seg->segment_list_entries) {
299 SegmentListEntry *entry;
300 double max_duration = 0;
301
302 avio_printf(seg->list_pb, "#EXTM3U\n");
303 avio_printf(seg->list_pb, "#EXT-X-VERSION:3\n");
304 avio_printf(seg->list_pb, "#EXT-X-MEDIA-SEQUENCE:%d\n", seg->segment_list_entries->index);
305 avio_printf(seg->list_pb, "#EXT-X-ALLOW-CACHE:%s\n",
306 seg->list_flags & SEGMENT_LIST_FLAG_CACHE ? "YES" : "NO");
307
308 av_log(s, AV_LOG_VERBOSE, "EXT-X-MEDIA-SEQUENCE:%d\n",
309 seg->segment_list_entries->index);
310
311 for (entry = seg->segment_list_entries; entry; entry = entry->next)
312 max_duration = FFMAX(max_duration, entry->end_time - entry->start_time);
313 avio_printf(seg->list_pb, "#EXT-X-TARGETDURATION:%"PRId64"\n", (int64_t)ceil(max_duration));
314 } else if (seg->list_type == LIST_TYPE_FFCONCAT) {
315 avio_printf(seg->list_pb, "ffconcat version 1.0\n");
316 }
317
318 return ret;
319}
320
321static void segment_list_print_entry(AVIOContext *list_ioctx,
322 ListType list_type,

Callers 2

segment_endFunction · 0.85
seg_initFunction · 0.85

Calls 5

av_freepFunction · 0.85
av_asprintfFunction · 0.85
av_logFunction · 0.85
avio_printfFunction · 0.85
ceilFunction · 0.85

Tested by

no test coverage detected