summaryrefslogtreecommitdiff
path: root/libavformat/dashdec.c
Commit message (Collapse)AuthorAge
* avformat/dashdec: check the root url lengthSteven Liu2020-10-20
| | | | | | | if the length of the root url is 0, unnecessary process the root_url Signed-off-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: liuqi05 <liuqi05@kuaishou.com>
* avformat/dashdec: Reset pointer to NULL after freeing itAndreas Rheinhardt2020-10-08
| | | | | | | | | | This is currently safe here, because the effective lifetime of adaptionset_lang is parse_manifest_adaptationset() (i.e. the pointer gets overwritten each time on entry to the function and gets freed before exiting the function), but it is nevertheless safer to reset the pointer. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* libavformat/dashdec: Fix issue with dash on WindowsChristopher Degawa2020-10-08
| | | | | | | | | | | | | | | | | | Use xmlFree instead of av_freep snip from libxml2: * xmlGetProp: ... * Returns the attribute value or NULL if not found. * It's up to the caller to free the memory with xmlFree(). According to libxml2, you are supposed to use xmlFree instead of free on the pointer returned by it, and also using av_freep on Windows will call _aligned_free instead of normal free, causing _aligned_free to raise SIGTRAP and crashing ffmpeg and ffplay. Signed-off-by: Christopher Degawa <ccom@randomderp.com>
* avformat/dashdec: Avoid duplicating stringAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix memleak on allocation error, avoid allocationAndreas Rheinhardt2020-09-21
| | | | | | | | | | get_content_url() allocates two buffers for temporary strings and when one of them couldn't be allocated, it simply returns, although one of the two allocations could have succeeded and would leak in this scenario. This can be fixed by avoiding one of the temporary buffers. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: CosmeticsAndreas Rheinhardt2020-09-21
| | | | | | | | | | | | | 1. Perform the necessary reindentations after the last few commits. 2. Adapt switches to the ordinary indentation style. 3. Now that the effective lifetimes of the variables containing the freshly allocated strings used when parsing the representation are disjoint, the variables can be replaced by a single variable. Doing so has the advantage of making it more clear that these are throwaway variables, hence it has been done. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Remove redundant casts to constAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Return early for unsupported representationsAndreas Rheinhardt2020-09-21
| | | | | | | | | This allows to reduce the level of indentation for parsing the supported representations (audio, video and subtitles). It also allows to avoid some allocations and frees for unsupported representations. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Remove redundant checksAndreas Rheinhardt2020-09-21
| | | | | | | | | | | | | This commit removes two always-true checks as well as a dead default case of a switch. The check when parsing manifests is always true, because we now jump to the cleaning code in case the format of the representation is unknown. The default case of the switch is dead, because the type of the representation is already checked at the beginning of parse_manifest_representation(). The check when reading the header is dead, because we error out if an error happened before. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix memleaks on error to add representation to dynarrayAndreas Rheinhardt2020-09-21
| | | | | | | | | | | | | | Up until now, the DASH demuxer used av_dynarray_add() to add audio/video/subtitles representations to arrays. Yet av_dynarray_add() frees the array upon failure, leading to leaks of its elements; furthermore, the element to be added leaks, too. This has been fixed by using av_dynarray_add_nofree() instead and by freeing the elements that could not be added to the list. Furthermore, errors from this are now checked and returned. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix leak of representation languagesAndreas Rheinhardt2020-09-21
| | | | | | | | | | These languages are normally freed after having been added as metadata to their respective AVStreams. Yet if one never reaches said point, they leak. This can happen as a result of an error when reading the header or as a result of refreshing the manifests. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix leak of string on error when parsing representationAndreas Rheinhardt2020-09-21
| | | | | | | | | | | | | | | | | The DASH demuxer currently extracts several strings at once from an xml document before processing them one by one; these strings are allocated, stored in local variables and need to be freed by the demuxer itself. So if an error happens when processing one of them, all strings need to be freed before returning. This has simply not been done, leading to leaks. A simple fix would be to add the necessary code for freeing; yet there is a better solution: Avoid having several strings at the same time by extracting a string, processing it and immediately freeing it. That way one only has to free at most one string on error. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix leak of representation on errorAndreas Rheinhardt2020-09-21
| | | | | | | | | | | If parsing a representation fails, it is not added to the list of representations and is therefore not freed in dash_close(); it therefore leaked in most error paths in parse_manifest_representation() (some error paths had (incomplete) code for freeing). This commit fixes freeing the representation in this case. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Remove unused index of representationAndreas Rheinhardt2020-09-21
| | | | | | | It is always zero. Also remove other unused elements. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix memleaks upon read_header failureAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Check allocation of AVProgramAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec, hls: Update correct pointer to AVDictionaryAndreas Rheinhardt2020-09-21
| | | | | | | | | | | | | | | | | | | | | | open_url() in the DASH as well in the hls demuxer share a common bug: They modify an AVDictionary (i.e. set a new entry) given to them as AVDictionary *, yet if this new entry leads to reallocation and relocation of the AVDictionary, the caller's pointer will become dangling, leading to use-after-frees. So pass an AVDictionary **. (With the current implementation of AVDictionary the above can only happen if the AVDictionary was empty initially (in which case the new AVDictionary leaks); furthermore if the I/O is ordinary (i.e. opened by avio_open2() or ffio_open_whitelist()), the dict is never empty (it contains an rw_timeout entry from save_avio_options()). So this issue could only happen if the caller sets a nondefault io_open callback, but no AVIOContext (the AVFMT_FLAG_CUSTOM_IO flag won't be set in this case). In case of the HLS demuxer, it was also necessary that setting the "seekable" entry failed. Yet one should simply not rely on internals of the AVDict API.) Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Fix leak of AVDictionary on errorAndreas Rheinhardt2020-09-21
| | | | | | | | Just postpone the allocation of the dict until it is really needed (after the checks that can fail). Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Free subtitle representations on exitAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Free strings as soon as they aren't needed anymoreAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Don't overwrite and leak old initialization fragmentsAndreas Rheinhardt2020-09-21
| | | | | Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Don't leave representation in inconsistent state on errorAndreas Rheinhardt2020-09-21
| | | | | | | | | This currently doesn't cause any trouble, because the only caller did not clean up the representation upon error at all; but fixing this is a prerequisite for doing so. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Remove dead codeAndreas Rheinhardt2020-09-21
| | | | | | | | | | | | | The code in question seems to have been copied from about 70 lines above; yet the code here is only executed if some of the variables (namely representation_segmenttemplate_node and fragment_template_node) are NULL, so it makes no sense to check them for a child element. Also remove a redundant resetting of a pointer to an AVFormatContext after avformat_close_input() (which already sets the pointer to NULL). Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: Avoid double free on errorAndreas Rheinhardt2020-09-21
| | | | | | | | | When using one of the AV_DICT_DONT_STRDUP_KEY/VAL flags, av_dict_set() already frees the key/value on error, so that freeing it again would lead to a double free. Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/dashdec: drop arbitrary DASH manifest size limitJan Ekström2020-09-05
| | | | | | | | | | | | | | | | | | | Currently the utilized AVBPrint API is internally limited to unsigned integers, so if we limit the file size as well as the amount to read to UINT_MAX - 1, we do not require additional limiting to be performed on the values. This change is based on the fact that initially the 8*1024 value added in 96d70694aea64616c68db8be306c159c73fb3980 was only for the case where the file size was not known. It was not a maximum file size limit. In 29121188983932f79aef8501652630d322a9974c this was reworked to be a maximum manifest file size limit, while its commit message appears to only note that it added support for larger manifest file sizes. This should enable various unfortunately large MPEG-DASH manifests, such as Youtube's multi-megabyte live stream archives to load up as well as bring back the original intent of the logic.
* lavf/dashdec: enable custom interrup callback in sub-demuxerJun Zhao2020-07-20
| | | | | | | Enable the custom callback in sub-demuxer Reviewed-by: Steven Liu <lq@chinaffmpeg.org> Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* lavf/dashdec: Add missed side data/dispositionJun Zhao2020-06-18
| | | | | | | | dash demuxer get the stream info from sub-stream, but missed side data/disposition part, e,g, missed the DOVI side data when the stream is Dolby Vision streams Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* avformat/dashdec: compute the segment size use current pos minus offset plus oneSteven Liu2020-05-07
| | | | | | | | because the offset should use one byte Reviewed-by: Zhao Jun <barryjzhao@tencent.com> Reported-by: Zhao Jun <barryjzhao@tencent.com> Signed-off-by: Steven Liu <liuqi05@kuaishou.com>
* lavf/dashdec: support larger manifestsrcombs2020-05-06
|
* avformat/dashdec: add attribute lang for audio and subtitle streamsSteven Liu2020-04-15
| | | | | | There should have language in the metadata of streams which show to user Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/dashdec: Don't allocate and leak strings that are never usedAndreas Rheinhardt2020-03-29
| | | | | | | | | | | Since commit e134c203 strdups of several elements of a manifest are kept in the DASHContext; but said commit completely forgot to free these strings again (with xmlFree()). Given that these strings are never used at all, this commit closes this leak by reverting said commit. This reverts commit e134c20374ee3cbc6d04885d306b02c9871683a2. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* lavf/dashdec: add 3GPP TS26.247 probe in dash demuxerJun Zhao2020-03-05
| | | | | | | Enabled the 3GP-DASH Release-10/Relase-11(3GPP TS26.247) profile to dash demuxer probe. Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* lavf/dashdec: Add ts to the list of allowed extensions.Jun Zhao2020-03-05
| | | | | | | | Dashdec can able to handle MPEG-2 TS streams by default as well, used MP4Box to create the segmented MPEG-2 TS files for verification. Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* avformat/dashdec: propagate icy to child AVIOContextsMarvin Scholz2019-12-27
| | | | | | | | | | | When the user decides they do not want to to send the Icy-MetaData header, this should be respected for all requests, not just the first one. Fix #5578 Reviewed-by: Liu Steven <lq@chinaffmpeg.org> Signed-off-by: James Almer <jamrial@gmail.com>
* Remove redundant ;Michael Niedermayer2019-12-10
| | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* lavf/dashdec: drop unnecessary check before ff_format_io_closeJun Zhao2019-11-08
| | | | | | | ff_format_io_close will check the AVIOContext pointer pb, so drop the unnecessary check before ff_format_io_close. Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* lavf/dashenc: enable probesize/max_analyze_duration setting in sub-demuxerJun Zhao2019-11-08
| | | | | | | Enable probesize/max_analyze_duration setting when open the sub-demuxer, it's will be used to minimizing the initial delay. Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* avformat/dashdec: fix segfault when parsing segmentlistvectronic2019-09-23
| | | | | | | | | index into segmentlists_tab was specified as 4 instead of 3 causing invalid access further fix to: 8135 Reviewed-by: Steven Liu <lq@onvideo.cn> Signed-off-by: vectronic <hello.vectronic@gmail.com>
* avformat/dashdec: fix pointer being freed was not allocatedvectronic2019-09-23
| | | | | | | | prevent attempt to call xmlFree if val was not allocated fixes: 8135 Reviewed-by: Steven Liu <lq@onvideo.cn> Signed-off-by: vectronic <hello.vectronic@gmail.com>
* avformat/dashdec: reindent code at parse_manifestSteven Liu2019-09-14
|
* avformat/dashdec: add startNumber parser for segmentlistSteven Liu2019-09-12
| | | | | | | | and get start_number for compute current segment number. fix ticket: 7976 Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/dashdec: start from the root uri when baseURL is start with '/'Steven Liu2019-09-02
| | | | | | fix ticket: 8097 Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/dashdec: fix code style and remove some empty lineSteven Liu2019-07-10
|
* avformat/dashdec: fix code style in dash_read_packetSteven Liu2019-07-05
|
* avformat/dashdec: refine and fix code style of dash_read_headerSteven Liu2019-07-04
| | | | | move the temp variable to the top of the expression paragraph rename the pls to rep(representation)
* avformat/dashdec: simplified code in open_demux_for_componentSteven Liu2019-07-04
| | | | | | change from pls->ctx->streams[i]->codecpar to ist->codecpar Signed-off-by: Steven Liu <lq@onvideo.cn>
* avformat/dashdec: Fix reading values from SegmentTimeline inside Periodsfan52019-07-01
| | | | This was missed in commit e752da546463e693865d92a837fc0e8d2b28db2e.
* avformat/dashdec: check copy_init_section memory alloc resultSteven Liu2019-06-14
| | | | Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* avformat/dashdec: add http_proxy, referer and rw_timeout http method support ↵Steven Liu2019-06-14
| | | | | | for segments Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
* lavf/dashdec: refactoring error handle logic for open_inputJun Zhao2019-05-14
| | | | | | | refactoring error handle logic for open_input. Reviewed-by: Steven Liu <lq@onvideo.cn> Signed-off-by: Jun Zhao <barryjzhao@tencent.com>