| 600 | } |
| 601 | |
| 602 | static 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); |
no test coverage detected