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

Function parse_manifest_segmenturlnode

libavformat/dashdec.c:602–666  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

600}
601
602static int parse_manifest_segmenturlnode(AVFormatContext *s, struct representation *rep,
603 xmlNodePtr fragmenturl_node,
604 xmlNodePtr *baseurl_nodes,
605 char *rep_id_val,
606 char *rep_bandwidth_val)
607{
608 DASHContext *c = s->priv_data;
609 char *initialization_val = NULL;
610 char *media_val = NULL;
611 char *range_val = NULL;
612 int max_url_size = c ? c->max_url_size: MAX_URL_SIZE;
613 int err;
614
615 if (!av_strcasecmp(fragmenturl_node->name, "Initialization")) {
616 initialization_val = xmlGetProp(fragmenturl_node, "sourceURL");
617 range_val = xmlGetProp(fragmenturl_node, "range");
618 if (initialization_val || range_val) {
619 free_fragment(&rep->init_section);
620 rep->init_section = get_fragment(range_val);
621 xmlFree(range_val);
622 if (!rep->init_section) {
623 xmlFree(initialization_val);
624 return AVERROR(ENOMEM);
625 }
626 rep->init_section->url = get_content_url(baseurl_nodes, 4,
627 max_url_size,
628 rep_id_val,
629 rep_bandwidth_val,
630 initialization_val);
631 xmlFree(initialization_val);
632 if (!rep->init_section->url) {
633 av_freep(&rep->init_section);
634 return AVERROR(ENOMEM);
635 }
636 }
637 } else if (!av_strcasecmp(fragmenturl_node->name, "SegmentURL")) {
638 media_val = xmlGetProp(fragmenturl_node, "media");
639 range_val = xmlGetProp(fragmenturl_node, "mediaRange");
640 if (media_val || range_val) {
641 struct fragment *seg = get_fragment(range_val);
642 xmlFree(range_val);
643 if (!seg) {
644 xmlFree(media_val);
645 return AVERROR(ENOMEM);
646 }
647 seg->url = get_content_url(baseurl_nodes, 4,
648 max_url_size,
649 rep_id_val,
650 rep_bandwidth_val,
651 media_val);
652 xmlFree(media_val);
653 if (!seg->url) {
654 av_free(seg);
655 return AVERROR(ENOMEM);
656 }
657 err = av_dynarray_add_nofree(&rep->fragments, &rep->n_fragments, seg);
658 if (err < 0) {
659 free_fragment(&seg);

Callers 1

Calls 7

av_strcasecmpFunction · 0.85
free_fragmentFunction · 0.85
get_fragmentFunction · 0.85
get_content_urlFunction · 0.85
av_freepFunction · 0.85
av_dynarray_add_nofreeFunction · 0.85
av_freeFunction · 0.50

Tested by

no test coverage detected