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

Function segment_end

libavformat/segment.c:356–466  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

354}
355
356static int segment_end(AVFormatContext *s, int write_trailer, int is_last)
357{
358 SegmentContext *seg = s->priv_data;
359 AVFormatContext *oc = seg->avf;
360 int ret = 0;
361 AVTimecode tc;
362 AVRational rate;
363 AVDictionaryEntry *tcr;
364 char buf[AV_TIMECODE_STR_SIZE];
365 int i;
366 int err;
367
368 if (!oc || !oc->pb)
369 return AVERROR(EINVAL);
370
371 av_write_frame(oc, NULL); /* Flush any buffered data (fragmented mp4) */
372 if (write_trailer)
373 ret = av_write_trailer(oc);
374
375 if (ret < 0)
376 av_log(s, AV_LOG_ERROR, "Failure occurred when ending segment '%s'\n",
377 oc->url);
378
379 if (seg->list) {
380 if (seg->list_size || seg->list_type == LIST_TYPE_M3U8) {
381 SegmentListEntry *entry = av_mallocz(sizeof(*entry));
382 if (!entry) {
383 ret = AVERROR(ENOMEM);
384 goto end;
385 }
386
387 /* append new element */
388 memcpy(entry, &seg->cur_entry, sizeof(*entry));
389 entry->filename = av_strdup(entry->filename);
390 if (!seg->segment_list_entries)
391 seg->segment_list_entries = seg->segment_list_entries_end = entry;
392 else
393 seg->segment_list_entries_end->next = entry;
394 seg->segment_list_entries_end = entry;
395
396 /* drop first item */
397 if (seg->list_size && seg->segment_count >= seg->list_size) {
398 entry = seg->segment_list_entries;
399 seg->segment_list_entries = seg->segment_list_entries->next;
400 av_freep(&entry->filename);
401 av_freep(&entry);
402 }
403
404 if ((ret = segment_list_open(s)) < 0)
405 goto end;
406 for (entry = seg->segment_list_entries; entry; entry = entry->next)
407 segment_list_print_entry(seg->list_pb, seg->list_type, entry, s);
408 if (seg->list_type == LIST_TYPE_M3U8 && is_last)
409 avio_printf(seg->list_pb, "#EXT-X-ENDLIST\n");
410 ff_format_io_close(s, &seg->list_pb);
411 if (seg->use_rename)
412 ff_rename(seg->temp_list_filename, seg->list, s);
413 } else {

Callers 2

seg_write_packetFunction · 0.85
seg_write_trailerFunction · 0.85

Calls 15

av_write_frameFunction · 0.85
av_write_trailerFunction · 0.85
av_logFunction · 0.85
av_strdupFunction · 0.85
av_freepFunction · 0.85
segment_list_openFunction · 0.85
segment_list_print_entryFunction · 0.85
avio_printfFunction · 0.85
ff_format_io_closeFunction · 0.85
ff_renameFunction · 0.85
avio_flushFunction · 0.85
av_dict_getFunction · 0.85

Tested by

no test coverage detected