FFmpeg
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
segment.c File Reference
#include <float.h>
#include "avformat.h"
#include "internal.h"
#include "libavutil/log.h"
#include "libavutil/opt.h"
#include "libavutil/avstring.h"
#include "libavutil/parseutils.h"
#include "libavutil/mathematics.h"
#include "libavutil/timestamp.h"

Go to the source code of this file.

Data Structures

struct  SegmentContext
 

Macros

#define SEGMENT_LIST_FLAG_CACHE   1
 
#define SEGMENT_LIST_FLAG_LIVE   2
 
#define FAIL(err)   ret = err; goto end
 
#define FAIL(err)   ret = err; goto end
 
#define OFFSET(x)   offsetof(SegmentContext, x)
 
#define E   AV_OPT_FLAG_ENCODING_PARAM
 

Enumerations

enum  ListType {
  LIST_TYPE_UNDEFINED = -1, LIST_TYPE_FLAT = 0, LIST_TYPE_CSV, LIST_TYPE_M3U8,
  LIST_TYPE_EXT, LIST_TYPE_NB
}
 

Functions

static void print_csv_escaped_str (AVIOContext *ctx, const char *str)
 
static int segment_mux_init (AVFormatContext *s)
 
static int set_segment_filename (AVFormatContext *s)
 
static int segment_start (AVFormatContext *s, int write_header)
 
static int segment_list_open (AVFormatContext *s)
 
static void segment_list_close (AVFormatContext *s)
 
static int segment_end (AVFormatContext *s, int write_trailer)
 
static int parse_times (void *log_ctx, int64_t **times, int *nb_times, const char *times_str)
 
static int parse_frames (void *log_ctx, int **frames, int *nb_frames, const char *frames_str)
 
static int open_null_ctx (AVIOContext **ctx)
 
static void close_null_ctx (AVIOContext *pb)
 
static int seg_write_header (AVFormatContext *s)
 
static int seg_write_packet (AVFormatContext *s, AVPacket *pkt)
 
static int seg_write_trailer (struct AVFormatContext *s)
 

Variables

static const AVOption options []
 
static const AVClass seg_class
 
AVOutputFormat ff_segment_muxer
 
static const AVClass sseg_class
 
AVOutputFormat ff_stream_segment_muxer
 

Macro Definition Documentation

#define SEGMENT_LIST_FLAG_CACHE   1

Definition at line 50 of file segment.c.

Referenced by segment_list_open().

#define SEGMENT_LIST_FLAG_LIVE   2

Definition at line 51 of file segment.c.

Referenced by seg_write_header(), segment_list_close(), and segment_list_open().

#define FAIL (   err)    ret = err; goto end
#define FAIL (   err)    ret = err; goto end
#define OFFSET (   x)    offsetof(SegmentContext, x)

Definition at line 694 of file segment.c.

Definition at line 695 of file segment.c.

Enumeration Type Documentation

enum ListType
Enumerator:
LIST_TYPE_UNDEFINED 
LIST_TYPE_FLAT 
LIST_TYPE_CSV 
LIST_TYPE_M3U8 
LIST_TYPE_EXT 

deprecated

LIST_TYPE_NB 

Definition at line 41 of file segment.c.

Function Documentation

static void print_csv_escaped_str ( AVIOContext ctx,
const char *  str 
)
static

Definition at line 93 of file segment.c.

Referenced by segment_end().

static int segment_mux_init ( AVFormatContext s)
static

Definition at line 109 of file segment.c.

Referenced by seg_write_header(), and segment_start().

static int set_segment_filename ( AVFormatContext s)
static

Definition at line 144 of file segment.c.

Referenced by seg_write_header(), and segment_start().

static int segment_start ( AVFormatContext s,
int  write_header 
)
static

Definition at line 159 of file segment.c.

Referenced by seg_write_packet().

static int segment_list_open ( AVFormatContext s)
static

Definition at line 194 of file segment.c.

Referenced by seg_write_header(), and segment_end().

static void segment_list_close ( AVFormatContext s)
static

Definition at line 219 of file segment.c.

Referenced by seg_write_header(), seg_write_trailer(), and segment_end().

static int segment_end ( AVFormatContext s,
int  write_trailer 
)
static

Definition at line 233 of file segment.c.

Referenced by seg_write_packet(), and seg_write_trailer().

static int parse_times ( void log_ctx,
int64_t **  times,
int *  nb_times,
const char *  times_str 
)
static

Definition at line 273 of file segment.c.

Referenced by seg_write_header().

static int parse_frames ( void log_ctx,
int **  frames,
int *  nb_frames,
const char *  frames_str 
)
static

Definition at line 331 of file segment.c.

Referenced by seg_write_header().

static int open_null_ctx ( AVIOContext **  ctx)
static

Definition at line 390 of file segment.c.

Referenced by seg_write_header(), and seg_write_trailer().

static void close_null_ctx ( AVIOContext pb)
static

Definition at line 404 of file segment.c.

Referenced by seg_write_header(), and seg_write_trailer().

static int seg_write_header ( AVFormatContext s)
static

Definition at line 410 of file segment.c.

static int seg_write_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 582 of file segment.c.

static int seg_write_trailer ( struct AVFormatContext s)
static

Definition at line 668 of file segment.c.

Variable Documentation

const AVOption options[]
static
Initial value:
= {
{ "reference_stream", "set reference stream", OFFSET(reference_stream_specifier), AV_OPT_TYPE_STRING, {.str = "auto"}, CHAR_MIN, CHAR_MAX, E },
{ "segment_format", "set container format used for the segments", OFFSET(format), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
{ "segment_list", "set the segment list filename", OFFSET(list), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
{ "segment_list_flags","set flags affecting segment list generation", OFFSET(list_flags), AV_OPT_TYPE_FLAGS, {.i64 = SEGMENT_LIST_FLAG_CACHE }, 0, UINT_MAX, E, "list_flags"},
{ "cache", "allow list caching", 0, AV_OPT_TYPE_CONST, {.i64 = SEGMENT_LIST_FLAG_CACHE }, INT_MIN, INT_MAX, E, "list_flags"},
{ "live", "enable live-friendly list generation (useful for HLS)", 0, AV_OPT_TYPE_CONST, {.i64 = SEGMENT_LIST_FLAG_LIVE }, INT_MIN, INT_MAX, E, "list_flags"},
{ "segment_list_size", "set the maximum number of playlist entries", OFFSET(list_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ "segment_list_type", "set the segment list type", OFFSET(list_type), AV_OPT_TYPE_INT, {.i64 = LIST_TYPE_UNDEFINED}, -1, LIST_TYPE_NB-1, E, "list_type" },
{ "flat", "flat format", 0, AV_OPT_TYPE_CONST, {.i64=LIST_TYPE_FLAT }, INT_MIN, INT_MAX, E, "list_type" },
{ "csv", "csv format", 0, AV_OPT_TYPE_CONST, {.i64=LIST_TYPE_CSV }, INT_MIN, INT_MAX, E, "list_type" },
{ "ext", "extended format", 0, AV_OPT_TYPE_CONST, {.i64=LIST_TYPE_EXT }, INT_MIN, INT_MAX, E, "list_type" },
{ "m3u8", "M3U8 format", 0, AV_OPT_TYPE_CONST, {.i64=LIST_TYPE_M3U8 }, INT_MIN, INT_MAX, E, "list_type" },
{ "hls", "Apple HTTP Live Streaming compatible", 0, AV_OPT_TYPE_CONST, {.i64=LIST_TYPE_M3U8 }, INT_MIN, INT_MAX, E, "list_type" },
{ "segment_time", "set segment duration", OFFSET(time_str),AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, E },
{ "segment_time_delta","set approximation value used for the segment times", OFFSET(time_delta_str), AV_OPT_TYPE_STRING, {.str = "0"}, 0, 0, E },
{ "segment_times", "set segment split time points", OFFSET(times_str),AV_OPT_TYPE_STRING,{.str = NULL}, 0, 0, E },
{ "segment_frames", "set segment split frame numbers", OFFSET(frames_str),AV_OPT_TYPE_STRING,{.str = NULL}, 0, 0, E },
{ "segment_wrap", "set number after which the index wraps", OFFSET(segment_idx_wrap), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ "segment_start_number", "set the sequence number of the first segment", OFFSET(segment_idx), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, E },
{ "individual_header_trailer", "write header/trailer to each segment", OFFSET(individual_header_trailer), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E },
{ "write_header_trailer", "write a header to the first segment and a trailer to the last one", OFFSET(write_header_trailer), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, E },
{ "reset_timestamps", "reset timestamps at the begin of each segment", OFFSET(reset_timestamps), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, E },
{ NULL },
}

Definition at line 696 of file segment.c.

const AVClass seg_class
static
Initial value:
= {
.class_name = "segment muxer",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 727 of file segment.c.

AVOutputFormat ff_segment_muxer
Initial value:
= {
.name = "segment",
.long_name = NULL_IF_CONFIG_SMALL("segment"),
.priv_data_size = sizeof(SegmentContext),
.priv_class = &seg_class,
}

Definition at line 734 of file segment.c.

const AVClass sseg_class
static
Initial value:
= {
.class_name = "stream_segment muxer",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 745 of file segment.c.

AVOutputFormat ff_stream_segment_muxer
Initial value:
= {
.name = "stream_segment,ssegment",
.long_name = NULL_IF_CONFIG_SMALL("streaming segment muxer"),
.priv_data_size = sizeof(SegmentContext),
.priv_class = &sseg_class,
}

Definition at line 752 of file segment.c.