FFmpeg
Data Structures | Macros | Functions | Variables
dashdec.c File Reference
#include <libxml/parser.h>
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "libavutil/time.h"
#include "libavutil/parseutils.h"
#include "internal.h"
#include "avio_internal.h"
#include "dash.h"

Go to the source code of this file.

Data Structures

struct  fragment
 
struct  timeline
 
struct  representation
 
struct  DASHContext
 

Macros

#define INITIAL_BUFFER_SIZE   32768
 
#define OFFSET(x)   offsetof(DASHContext, x)
 
#define FLAGS   AV_OPT_FLAG_DECODING_PARAM
 

Functions

static int ishttp (char *url)
 
static int aligned (int val)
 
static uint64_t get_current_time_in_sec (void)
 
static uint64_t get_utc_date_time_insec (AVFormatContext *s, const char *datetime)
 
static uint32_t get_duration_insec (AVFormatContext *s, const char *duration)
 
static int64_t get_segment_start_time_based_on_timeline (struct representation *pls, int64_t cur_seq_no)
 
static int64_t calc_next_seg_no_from_timelines (struct representation *pls, int64_t cur_time)
 
static void free_fragment (struct fragment **seg)
 
static void free_fragment_list (struct representation *pls)
 
static void free_timelines_list (struct representation *pls)
 
static void free_representation (struct representation *pls)
 
static void free_video_list (DASHContext *c)
 
static void free_audio_list (DASHContext *c)
 
static void free_subtitle_list (DASHContext *c)
 
static int open_url (AVFormatContext *s, AVIOContext **pb, const char *url, AVDictionary *opts, AVDictionary *opts2, int *is_http)
 
static char * get_content_url (xmlNodePtr *baseurl_nodes, int n_baseurl_nodes, int max_url_size, char *rep_id_val, char *rep_bandwidth_val, char *val)
 
static char * get_val_from_nodes_tab (xmlNodePtr *nodes, const int n_nodes, const char *attrname)
 
static xmlNodePtr find_child_node_by_name (xmlNodePtr rootnode, const char *nodename)
 
static enum AVMediaType get_content_type (xmlNodePtr node)
 
static struct fragmentget_Fragment (char *range)
 
static int parse_manifest_segmenturlnode (AVFormatContext *s, struct representation *rep, xmlNodePtr fragmenturl_node, xmlNodePtr *baseurl_nodes, char *rep_id_val, char *rep_bandwidth_val)
 
static int parse_manifest_segmenttimeline (AVFormatContext *s, struct representation *rep, xmlNodePtr fragment_timeline_node)
 
static int resolve_content_path (AVFormatContext *s, const char *url, int *max_url_size, xmlNodePtr *baseurl_nodes, int n_baseurl_nodes)
 
static int parse_manifest_representation (AVFormatContext *s, const char *url, xmlNodePtr node, xmlNodePtr adaptionset_node, xmlNodePtr mpd_baseurl_node, xmlNodePtr period_baseurl_node, xmlNodePtr period_segmenttemplate_node, xmlNodePtr period_segmentlist_node, xmlNodePtr fragment_template_node, xmlNodePtr content_component_node, xmlNodePtr adaptionset_baseurl_node, xmlNodePtr adaptionset_segmentlist_node, xmlNodePtr adaptionset_supplementalproperty_node)
 
static int parse_manifest_adaptationset (AVFormatContext *s, const char *url, xmlNodePtr adaptionset_node, xmlNodePtr mpd_baseurl_node, xmlNodePtr period_baseurl_node, xmlNodePtr period_segmenttemplate_node, xmlNodePtr period_segmentlist_node)
 
static int parse_programinformation (AVFormatContext *s, xmlNodePtr node)
 
static int parse_manifest (AVFormatContext *s, const char *url, AVIOContext *in)
 
static int64_t calc_cur_seg_no (AVFormatContext *s, struct representation *pls)
 
static int64_t calc_min_seg_no (AVFormatContext *s, struct representation *pls)
 
static int64_t calc_max_seg_no (struct representation *pls, DASHContext *c)
 
static void move_timelines (struct representation *rep_src, struct representation *rep_dest, DASHContext *c)
 
static void move_segments (struct representation *rep_src, struct representation *rep_dest, DASHContext *c)
 
static int refresh_manifest (AVFormatContext *s)
 
static struct fragmentget_current_fragment (struct representation *pls)
 
static int read_from_url (struct representation *pls, struct fragment *seg, uint8_t *buf, int buf_size)
 
static int open_input (DASHContext *c, struct representation *pls, struct fragment *seg)
 
static int update_init_section (struct representation *pls)
 
static int64_t seek_data (void *opaque, int64_t offset, int whence)
 
static int read_data (void *opaque, uint8_t *buf, int buf_size)
 
static int save_avio_options (AVFormatContext *s)
 
static int nested_io_open (AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **opts)
 
static void close_demux_for_component (struct representation *pls)
 
static int reopen_demux_for_component (AVFormatContext *s, struct representation *pls)
 
static int open_demux_for_component (AVFormatContext *s, struct representation *pls)
 
static int is_common_init_section_exist (struct representation **pls, int n_pls)
 
static int copy_init_section (struct representation *rep_dest, struct representation *rep_src)
 
static int dash_read_header (AVFormatContext *s)
 
static void recheck_discard_flags (AVFormatContext *s, struct representation **p, int n)
 
static int dash_read_packet (AVFormatContext *s, AVPacket *pkt)
 
static int dash_close (AVFormatContext *s)
 
static int dash_seek (AVFormatContext *s, struct representation *pls, int64_t seek_pos_msec, int flags, int dry_run)
 
static int dash_read_seek (AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
 
static int dash_probe (const AVProbeData *p)
 

Variables

static const AVOption dash_options []
 
static const AVClass dash_class
 
AVInputFormat ff_dash_demuxer
 

Macro Definition Documentation

#define INITIAL_BUFFER_SIZE   32768

Definition at line 31 of file dashdec.c.

Referenced by reopen_demux_for_component().

#define OFFSET (   x)    offsetof(DASHContext, x)

Definition at line 2374 of file dashdec.c.

#define FLAGS   AV_OPT_FLAG_DECODING_PARAM

Definition at line 2375 of file dashdec.c.

Function Documentation

static int ishttp ( char *  url)
static

Definition at line 172 of file dashdec.c.

Referenced by resolve_content_path().

static int aligned ( int  val)
static
static uint64_t get_current_time_in_sec ( void  )
static

Definition at line 183 of file dashdec.c.

Referenced by calc_cur_seg_no(), calc_max_seg_no(), and calc_min_seg_no().

static uint64_t get_utc_date_time_insec ( AVFormatContext s,
const char *  datetime 
)
static

Definition at line 188 of file dashdec.c.

Referenced by parse_manifest().

static uint32_t get_duration_insec ( AVFormatContext s,
const char *  duration 
)
static

Definition at line 218 of file dashdec.c.

Referenced by parse_manifest().

static int64_t get_segment_start_time_based_on_timeline ( struct representation pls,
int64_t  cur_seq_no 
)
static

Definition at line 262 of file dashdec.c.

Referenced by calc_cur_seg_no(), get_current_fragment(), and refresh_manifest().

static int64_t calc_next_seg_no_from_timelines ( struct representation pls,
int64_t  cur_time 
)
static

Definition at line 297 of file dashdec.c.

Referenced by calc_cur_seg_no(), and refresh_manifest().

static void free_fragment ( struct fragment **  seg)
static

Definition at line 327 of file dashdec.c.

Referenced by free_fragment_list(), free_representation(), and read_data().

static void free_fragment_list ( struct representation pls)
static

Definition at line 336 of file dashdec.c.

Referenced by free_representation(), and move_segments().

static void free_timelines_list ( struct representation pls)
static

Definition at line 347 of file dashdec.c.

Referenced by free_representation(), and move_timelines().

static void free_representation ( struct representation pls)
static
static void free_video_list ( DASHContext c)
static

Definition at line 376 of file dashdec.c.

Referenced by dash_close(), and refresh_manifest().

static void free_audio_list ( DASHContext c)
static

Definition at line 387 of file dashdec.c.

Referenced by dash_close(), and refresh_manifest().

static void free_subtitle_list ( DASHContext c)
static

Definition at line 398 of file dashdec.c.

Referenced by refresh_manifest().

static int open_url ( AVFormatContext s,
AVIOContext **  pb,
const char *  url,
AVDictionary opts,
AVDictionary opts2,
int is_http 
)
static

Definition at line 409 of file dashdec.c.

Referenced by open_input().

static char* get_content_url ( xmlNodePtr *  baseurl_nodes,
int  n_baseurl_nodes,
int  max_url_size,
char *  rep_id_val,
char *  rep_bandwidth_val,
char *  val 
)
static

Definition at line 475 of file dashdec.c.

Referenced by parse_manifest_representation(), and parse_manifest_segmenturlnode().

static char* get_val_from_nodes_tab ( xmlNodePtr *  nodes,
const int  n_nodes,
const char *  attrname 
)
static

Definition at line 531 of file dashdec.c.

Referenced by parse_manifest_representation().

static xmlNodePtr find_child_node_by_name ( xmlNodePtr  rootnode,
const char *  nodename 
)
static

Definition at line 547 of file dashdec.c.

Referenced by parse_manifest(), and parse_manifest_representation().

static enum AVMediaType get_content_type ( xmlNodePtr  node)
static

Definition at line 564 of file dashdec.c.

Referenced by parse_manifest_representation().

static struct fragment* get_Fragment ( char *  range)
static

Definition at line 590 of file dashdec.c.

Referenced by parse_manifest_segmenturlnode().

static int parse_manifest_segmenturlnode ( AVFormatContext s,
struct representation rep,
xmlNodePtr  fragmenturl_node,
xmlNodePtr *  baseurl_nodes,
char *  rep_id_val,
char *  rep_bandwidth_val 
)
static

Definition at line 608 of file dashdec.c.

Referenced by parse_manifest_representation().

static int parse_manifest_segmenttimeline ( AVFormatContext s,
struct representation rep,
xmlNodePtr  fragment_timeline_node 
)
static

Definition at line 675 of file dashdec.c.

Referenced by parse_manifest_representation().

static int resolve_content_path ( AVFormatContext s,
const char *  url,
int max_url_size,
xmlNodePtr *  baseurl_nodes,
int  n_baseurl_nodes 
)
static

Definition at line 711 of file dashdec.c.

Referenced by parse_manifest_representation().

static int parse_manifest_representation ( AVFormatContext s,
const char *  url,
xmlNodePtr  node,
xmlNodePtr  adaptionset_node,
xmlNodePtr  mpd_baseurl_node,
xmlNodePtr  period_baseurl_node,
xmlNodePtr  period_segmenttemplate_node,
xmlNodePtr  period_segmentlist_node,
xmlNodePtr  fragment_template_node,
xmlNodePtr  content_component_node,
xmlNodePtr  adaptionset_baseurl_node,
xmlNodePtr  adaptionset_segmentlist_node,
xmlNodePtr  adaptionset_supplementalproperty_node 
)
static

Definition at line 830 of file dashdec.c.

Referenced by parse_manifest_adaptationset().

static int parse_manifest_adaptationset ( AVFormatContext s,
const char *  url,
xmlNodePtr  adaptionset_node,
xmlNodePtr  mpd_baseurl_node,
xmlNodePtr  period_baseurl_node,
xmlNodePtr  period_segmenttemplate_node,
xmlNodePtr  period_segmentlist_node 
)
static

Definition at line 1119 of file dashdec.c.

Referenced by parse_manifest().

static int parse_programinformation ( AVFormatContext s,
xmlNodePtr  node 
)
static

Definition at line 1181 of file dashdec.c.

Referenced by parse_manifest().

static int parse_manifest ( AVFormatContext s,
const char *  url,
AVIOContext in 
)
static

Definition at line 1210 of file dashdec.c.

Referenced by dash_read_header(), and refresh_manifest().

static int64_t calc_cur_seg_no ( AVFormatContext s,
struct representation pls 
)
static

Definition at line 1398 of file dashdec.c.

Referenced by get_current_fragment(), and open_demux_for_component().

static int64_t calc_min_seg_no ( AVFormatContext s,
struct representation pls 
)
static

Definition at line 1436 of file dashdec.c.

Referenced by get_current_fragment().

static int64_t calc_max_seg_no ( struct representation pls,
DASHContext c 
)
static
static void move_timelines ( struct representation rep_src,
struct representation rep_dest,
DASHContext c 
)
static

Definition at line 1476 of file dashdec.c.

Referenced by refresh_manifest().

static void move_segments ( struct representation rep_src,
struct representation rep_dest,
DASHContext c 
)
static

Definition at line 1490 of file dashdec.c.

Referenced by refresh_manifest().

static int refresh_manifest ( AVFormatContext s)
static

Definition at line 1508 of file dashdec.c.

Referenced by get_current_fragment().

static struct fragment* get_current_fragment ( struct representation pls)
static

Definition at line 1607 of file dashdec.c.

Referenced by read_data().

static int read_from_url ( struct representation pls,
struct fragment seg,
uint8_t buf,
int  buf_size 
)
static

Definition at line 1682 of file dashdec.c.

Referenced by read_data(), and update_init_section().

static int open_input ( DASHContext c,
struct representation pls,
struct fragment seg 
)
static

Definition at line 1698 of file dashdec.c.

Referenced by read_data(), and update_init_section().

static int update_init_section ( struct representation pls)
static

Definition at line 1730 of file dashdec.c.

Referenced by read_data().

static int64_t seek_data ( void opaque,
int64_t  offset,
int  whence 
)
static

Definition at line 1777 of file dashdec.c.

Referenced by reopen_demux_for_component().

static int read_data ( void opaque,
uint8_t buf,
int  buf_size 
)
static
static int save_avio_options ( AVFormatContext s)
static

Definition at line 1850 of file dashdec.c.

Referenced by dash_read_header().

static int nested_io_open ( AVFormatContext s,
AVIOContext **  pb,
const char *  url,
int  flags,
AVDictionary **  opts 
)
static

Definition at line 1877 of file dashdec.c.

Referenced by reopen_demux_for_component().

static void close_demux_for_component ( struct representation pls)
static

Definition at line 1887 of file dashdec.c.

Referenced by recheck_discard_flags(), and reopen_demux_for_component().

static int reopen_demux_for_component ( AVFormatContext s,
struct representation pls 
)
static
static int open_demux_for_component ( AVFormatContext s,
struct representation pls 
)
static

Definition at line 1971 of file dashdec.c.

Referenced by dash_read_header().

static int is_common_init_section_exist ( struct representation **  pls,
int  n_pls 
)
static

Definition at line 2004 of file dashdec.c.

Referenced by dash_read_header().

static int copy_init_section ( struct representation rep_dest,
struct representation rep_src 
)
static

Definition at line 2026 of file dashdec.c.

Referenced by dash_read_header().

static int dash_read_header ( AVFormatContext s)
static

Definition at line 2042 of file dashdec.c.

static void recheck_discard_flags ( AVFormatContext s,
struct representation **  p,
int  n 
)
static

Definition at line 2166 of file dashdec.c.

Referenced by dash_read_packet().

static int dash_read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 2191 of file dashdec.c.

static int dash_close ( AVFormatContext s)
static

Definition at line 2254 of file dashdec.c.

static int dash_seek ( AVFormatContext s,
struct representation pls,
int64_t  seek_pos_msec,
int  flags,
int  dry_run 
)
static

Definition at line 2264 of file dashdec.c.

Referenced by dash_read_seek().

static int dash_read_seek ( AVFormatContext s,
int  stream_index,
int64_t  timestamp,
int  flags 
)
static

Definition at line 2328 of file dashdec.c.

static int dash_probe ( const AVProbeData p)
static

Definition at line 2356 of file dashdec.c.

Variable Documentation

const AVOption dash_options[]
static
Initial value:
= {
{"allowed_extensions", "List of file extensions that dash is allowed to access",
OFFSET(allowed_extensions), AV_OPT_TYPE_STRING,
{.str = "aac,m4a,m4s,m4v,mov,mp4,webm"},
INT_MIN, INT_MAX, FLAGS},
{NULL}
}
#define FLAGS
Definition: dashdec.c:2375
#define NULL
Definition: coverity.c:32
#define OFFSET(x)
Definition: dashdec.c:2374

Definition at line 2376 of file dashdec.c.

const AVClass dash_class
static
Initial value:
= {
.class_name = "dash",
.item_name = av_default_item_name,
.option = dash_options,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
static const AVOption dash_options[]
Definition: dashdec.c:2376

Definition at line 2384 of file dashdec.c.

AVInputFormat ff_dash_demuxer
Initial value:
= {
.name = "dash",
.long_name = NULL_IF_CONFIG_SMALL("Dynamic Adaptive Streaming over HTTP"),
.priv_class = &dash_class,
.priv_data_size = sizeof(DASHContext),
}
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
Definition: libcdio.c:153
static int dash_close(AVFormatContext *s)
Definition: dashdec.c:2254
static av_cold int read_close(AVFormatContext *ctx)
Definition: libcdio.c:145
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int dash_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
Definition: dashdec.c:2328
static int dash_probe(const AVProbeData *p)
Definition: dashdec.c:2356
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:530
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Definition: avio_reading.c:42
static int dash_read_header(AVFormatContext *s)
Definition: dashdec.c:2042
static int dash_read_packet(AVFormatContext *s, AVPacket *pkt)
Definition: dashdec.c:2191
#define flags(name, subs,...)
Definition: cbs_av1.c:561
static int read_probe(const AVProbeData *pd)
Definition: jvdec.c:55
static const AVClass dash_class
Definition: dashdec.c:2384
#define AVFMT_NO_BYTE_SEEK
Format does not allow seeking by bytes.
Definition: avformat.h:475

Definition at line 2391 of file dashdec.c.