85         if (!duration || atof(duration->
value) < 0) 
continue;
 
   86         if (atof(duration->
value) > max) max = atof(duration->
value);
 
   94     double min_buffer_time = 1.0;
 
   95     avio_printf(s->
pb, 
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 
   97     avio_printf(s->
pb, 
"  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n");
 
   98     avio_printf(s->
pb, 
"  xmlns=\"urn:mpeg:DASH:schema:MPD:2011\"\n");
 
   99     avio_printf(s->
pb, 
"  xsi:schemaLocation=\"urn:mpeg:DASH:schema:MPD:2011\"\n");
 
  105     avio_printf(s->
pb, 
"  minBufferTime=\"PT%gS\"\n", min_buffer_time);
 
  107                 w->
is_live ? 
"urn:mpeg:dash:profile:isoff-live:2011" : 
"urn:webm:dash:profile:webm-on-demand:2012",
 
  110         time_t local_time = time(
NULL);
 
  111         struct tm gmt_buffer;
 
  112         struct tm *gmt = 
gmtime_r(&local_time, &gmt_buffer);
 
  114         if (!strftime(gmt_iso, 21, 
"%Y-%m-%dT%H:%M:%SZ", gmt)) {
 
  120         avio_printf(s->
pb, 
"  availabilityStartTime=\"%s\"\n", gmt_iso);
 
  126             avio_printf(s->
pb, 
"  schemeIdUri=\"urn:mpeg:dash:utc:http-iso:2014\"\n");
 
  146         if (!ts || strncmp(gold->
value, ts->
value, strlen(gold->
value))) 
return 0;
 
  156     if (!gold_track_num) 
return 0;
 
  162             strncmp(gold_track_num->
value, track_num->
value, strlen(gold_track_num->
value)) ||
 
  177                                 int output_width, 
int output_height,
 
  178                                 int output_sample_rate) {
 
  185     const char *bandwidth_str;
 
  186     if ((w->
is_live && (!filename)) ||
 
  187         (!w->
is_live && (!irange || !cues_start || !cues_end || !filename || !bandwidth))) {
 
  192     if (w->
is_live && !bandwidth) {
 
  195         bandwidth_str = bandwidth->
value;
 
  256     int first_sample_rate, i;
 
  268     for (i = 0; i < w->
nb_as; i++) {
 
  286                           char **initialization_pattern, 
char **media_pattern) {
 
  287     char *underscore_pos = 
NULL;
 
  288     char *period_pos = 
NULL;
 
  289     char *temp_pos = 
NULL;
 
  290     char *filename_str = 
av_strdup(filename);
 
  299         underscore_pos = temp_pos + 1;
 
  302     if (!underscore_pos) {
 
  311     *(underscore_pos - 1) = 0;
 
  312     if (representation_id) {
 
  313         *representation_id = 
av_malloc(period_pos - underscore_pos + 1);
 
  314         if (!(*representation_id)) {
 
  318         av_strlcpy(*representation_id, underscore_pos, period_pos - underscore_pos + 1);
 
  320     if (initialization_pattern) {
 
  321         *initialization_pattern = 
av_asprintf(
"%s_$RepresentationID$.hdr",
 
  323         if (!(*initialization_pattern)) {
 
  329         *media_pattern = 
av_asprintf(
"%s_$RepresentationID$_$Number$.chk",
 
  331         if (!(*media_pattern)) {
 
  352     static const char boolean[2][6] = { 
"false", 
"true" };
 
  353     int subsegmentStartsWithSAP = 1;
 
  359     int width_in_as = 1, height_in_as = 1, sample_rate_in_as = 1;
 
  390         if (!w->
is_live && (!kf || !strncmp(kf->
value, 
"0", 1))) subsegmentStartsWithSAP = 0;
 
  392     avio_printf(s->
pb, 
" subsegmentStartsWithSAP=\"%d\"", subsegmentStartsWithSAP);
 
  398         char *initialization_pattern = 
NULL;
 
  399         char *media_pattern = 
NULL;
 
  403         avio_printf(s->
pb, 
"<ContentComponent id=\"1\" type=\"%s\"/>\n",
 
  410         avio_printf(s->
pb, 
" initialization=\"%s\"", initialization_pattern);
 
  412         av_free(initialization_pattern);
 
  417         char *representation_id = 
NULL;
 
  428             if (!representation_id) 
return AVERROR(ENOMEM);
 
  431                                    representation_id, !width_in_as,
 
  432                                    !height_in_as, !sample_rate_in_as);
 
  457     enum { new_set, parsed_id, parsing_streams } 
state;
 
  467         else if (
state == new_set && !strncmp(p, 
"id=", 3)) {
 
  477             while (*p != 
',') *q++ = *p++;
 
  481         } 
else if (
state == parsed_id && !strncmp(p, 
"streams=", 8)) {
 
  483             state = parsing_streams;
 
  484         } 
else if (
state == parsing_streams) {
 
  487             while (*q != 
'\0' && *q != 
',' && *q != 
' ') q++;
 
  497             if (*q == 
'\0') 
break;
 
  498             if (*q == 
' ') 
state = new_set;
 
  528     for (i = 0; i < w->
nb_as; i++) {
 
  539     return ret < 0 ? ret : 0;
 
  553 #define OFFSET(x) offsetof(WebMDashMuxContext, x) 
  555     { 
"adaptation_sets", 
"Adaptation sets. Syntax: id=0,streams=0,1,2 id=1,streams=3,4 and so on", 
OFFSET(adaptation_sets), 
AV_OPT_TYPE_STRING, { 0 }, 0, 0, 
AV_OPT_FLAG_ENCODING_PARAM },
 
  561     { 
"time_shift_buffer_depth", 
"Smallest time (in seconds) shifting buffer for which any Representation is guaranteed to be available.", 
OFFSET(time_shift_buffer_depth), 
AV_OPT_TYPE_DOUBLE, { .dbl = 60.0 }, 1.0, DBL_MAX, 
AV_OPT_FLAG_ENCODING_PARAM },
 
  566 #if CONFIG_WEBM_DASH_MANIFEST_MUXER 
  575     .
name              = 
"webm_dash_manifest",
 
  577     .mime_type         = 
"application/xml",
 
  583     .priv_class        = &webm_dash_class,
 
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory. 
#define LIBAVUTIL_VERSION_INT
#define INITIALIZATION_RANGE
char * av_stristr(const char *s1, const char *s2)
Locate the first case-independent occurrence in the string haystack of the string needle...
enum AVCodecID codec_id
Specific type of the encoded data (the codec used). 
static int subsegment_alignment(AVFormatContext *s, AdaptationSet *as)
const char * av_default_item_name(void *ptr)
Return the context name. 
This struct describes the properties of an encoded stream. 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static av_cold int end(AVCodecContext *avctx)
AVStream ** streams
A list of all streams in the file. 
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key. 
#define AVERROR_EOF
End of file. 
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
static const AVOption options[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int webm_dash_manifest_write_packet(AVFormatContext *s, AVPacket *pkt)
enum AVMediaType codec_type
General type of the encoded data. 
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst. 
static int check_matching_sample_rate(AVFormatContext *s, AdaptationSet *as)
static struct tm * gmtime_r(const time_t *clock, struct tm *result)
int extradata_size
Size of the extradata content in bytes. 
static int webm_dash_manifest_write_header(AVFormatContext *s)
char * av_asprintf(const char *fmt,...)
unsigned int nb_streams
Number of elements in AVFormatContext.streams. 
static int write_header(AVFormatContext *s)
static int webm_dash_manifest_write_trailer(AVFormatContext *s)
double time_shift_buffer_depth
static void write_footer(AVFormatContext *s)
static int write_trailer(AVFormatContext *s1)
static double get_duration(AVFormatContext *s)
static const char * get_codec_name(int codec_id)
static int to_integer(char *p, int len)
char * av_strdup(const char *s)
Duplicate a string. 
AVIOContext * pb
I/O context. 
static const AVClass webm_dash_class
Describe the class of an AVClass context structure. 
static int parse_filename(char *filename, char **representation_id, char **initialization_pattern, char **media_pattern)
static int check_matching_height(AVFormatContext *s, AdaptationSet *as)
static void free_adaptation_sets(AVFormatContext *s)
int sample_rate
Audio only. 
#define AVERROR_UNKNOWN
Unknown error, typically from an external library. 
void * priv_data
Format private data. 
static int write_adaptation_set(AVFormatContext *s, int as_index)
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent. 
static int bitstream_switching(AVFormatContext *s, AdaptationSet *as)
AVCodecParameters * codecpar
Codec parameters associated with this stream. 
static int parse_adaptation_sets(AVFormatContext *s)
static int check_matching_width(AVFormatContext *s, AdaptationSet *as)
This structure stores compressed data. 
static int write_representation(AVFormatContext *s, AVStream *stream, char *id, int output_width, int output_height, int output_sample_rate)
int avio_printf(AVIOContext *s, const char *fmt,...) av_printf_format(2
int minimum_update_period