Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-05-06MAINTAINERS: Add myself to libopenh264encLinjie Fu
Reviewed-by: Martin Storsjö <martin@martin.st> Signed-off-by: Linjie Fu <linjie.fu@intel.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2020-05-06avformat/utils: move is_intra_only() to header and rename to ff_is_intra_only()Limin Wang
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-06avformat/rtmpproto: use av_reallocp_array()Limin Wang
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-06avformat/smoothstreamingenc: use av_reallocp_array()Limin Wang
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-06fftools/ffmpeg: use local variable with same contents directlyLimin Wang
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-06avformat/matroskaenc: Check allocations implicit in dynamic buffersAndreas Rheinhardt
Failures of the allocations that happen under the hood when using dynamic buffers are usually completely unchecked and the Matroska muxer is no exception to this. The API has its part in this, because there is no documented way to actually check for errors: The return value of both avio_get_dyn_buf() as well as avio_close_dyn_buf() is only documented as "the length of the byte buffer", so that using this to return errors would be an API break. Therefore this commit uses the only reliable way to check for errors with avio_get_dyn_buf(): The AVIOContext's error flag. (This is one of the advantages of avio_get_dyn_buf(): By not destroying the AVIOContext it is possible to inspect this value.) Checking whether the size or the pointer vanishes is not enough as it does not check for truncated output (the dynamic buffer API is int based and so has to truncate the buffer even when enough memory would be available; it's current actual limit is even way below INT_MAX). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-06avformat/matroskaenc: Simplify writing bufferAndreas Rheinhardt
If one already has the contents of a master elements in a buffer of known size, then writing a EBML master element is no different from writing an EBML binary element. It is overtly complicated to use start/end_ebml_master() as these functions first write an unkown-length size field of the appropriate length, then write the buffer's contents, followed by a seek to the length field to overwrite it with the real size (obtained via avio_tell() although it was already known in advance), followed by another seek to the previous position. Just use put_ebml_binary() instead. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-06avformat/matroskaenc: Avoid dynamic buffer when writing ColourAndreas Rheinhardt
There is a good upper bound for the maximum length of the Colour master element; it is therefore unnecessary to use a dynamic buffer for it. A simple buffer on the stack is enough. This commit implements this. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-06avformat/matroskaenc: Unify writing level 1 elements preliminarilyAndreas Rheinhardt
The Matroska muxer updates several header elements when the output is seekable; if unseekable, the buffer containing the contents of the element is immediately freed after writing. Before this commit, there were three places doing exactly the same: Checking whether the output is seekable and calling the function that writes and frees or the function that just writes the EBML master. This has been unified; adding SeekHead entries for these elements has been unified, too. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-06avformat/matroskaenc: Move adding SeekEntry into end_ebml_master_crc32()Andreas Rheinhardt
Up until now, SeekEntries were already added before start_ebml_master_crc32() was even called and before we were actually sure that we really write the element the SeekHead references: After all, we might also error out later; and given that the allocations implicit in dynamic buffers should be checked, end_ebml_master_crc32() will eventually have to return errors itself, so that it is the right place to add SeekHead entries. The earlier behaviour is of course a remnant of the time in which start_ebml_master_crc32() really did output something, so that the position before start_ebml_master_crc32() needed to be recorded. Erroring out later is also not as dangerous as it seems because in this case no SeekHead will be written (if it happened when writing the header, the whole muxing process would abort; if it happened when writing the trailer (when writing chapters not available initially), writing the trailer would be aborted and no SeekHead containing the bogus chapter entry would be written). This commit does not change the way the SeekEntries are added for those elements that are output preliminarily; this is so because the SeekHead is written before those elements are finally output and doing it otherwise would increase the amount of seeks. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-06avformat/hlsenc: Improve checks for invalid stream mappingsAndreas Rheinhardt
The mapping of streams to the various variant streams to be created by the HLS muxer is roughly as follows: Space and tab separate variant stream group maps while the entries in each variant stream group map are separated by ','. The parsing process of each variant stream group proceeded as follows: At first the number of occurences of "a:", "v:" and "s:" in each variant stream group is calculated so that one can can allocate an array of streams with this number of entries. Then each entry is checked and the check for stream numbers was deficient: It did check that there is a number beginning after the ":", but it did not check that the number extends until the next "," (or until the end). This means that an invalid variant stream group like v:0_v:1 will not be rejected; the problem is that the variant stream in this example is supposed to have two streams associated with it (because it contains two "v:"), yet only one stream is actually associated with it (because there is no ',' to start a second stream specifier). This discrepancy led to segfaults (null pointer dereferencing) in the rest of the code (when the nonexistent second stream associated to the variant stream was inspected). Furthermore, this commit also removes an instance of using atoi() whose behaviour on a range error is undefined. Fixes ticket #8652. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-06lavf/dashdec: support larger manifestsrcombs
2020-05-06avformat/url: check url root node when rel include double dot and trim ↵Steven Liu
double dot fix ticket: 8625 and add testcase into url for double dot corner case Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2020-05-06avformat/hlsenc: resend full url of the init fragment mp4Steven Liu
fix ticket: 8651 because the init fragment mp4 file name is without base url name, so just modify it use the full url which splice after init function. Tested-by: matclayton Signed-off-by: Steven Liu <liuqi05@kuaishou.com>
2020-05-06libavformat/hlsenc: Allow usage of 'periodic-rekey' with multi-variant streamsYaroslav Pogrebnyak
This patch adds possibility to use 'periodic-rekey' option with multi-variant streams to hlsenc muxer. All streams variants use parameters from the same key_info_file. There are 2 sets of encryption options that kind of overlaps and add complexity, so I tried to do the thing without changing too much code. There is a little duplication of the key_file, key_uri, iv_string, etc in the VariantStream since we copy it from hls to each variant stream, but generally all the code remains the same to minimise appearing of unexpected bugs. Refactoring could be done as a separate patch then as needed. Signed-off-by: Yaroslav Pogrebnyak <yyyaroslav@gmail.com>
2020-05-06avformat/hlsenc: compute segment duration use current pts minus last segment ↵Steven Liu
end pts segment duration is using vs duration which compute by frame per second, that can not fix problem of VFR video stream, so compute the duration when split the segment, set the segment target duration use current packet pts minus the prev segment end pts.. Reported-by: Zhao Jun <barryjzhao@tencent.com> Reviewed-by: Zhao Jun <barryjzhao@tencent.com> Signed-off-by: Steven Liu <liuqi05@kuaishou.com>
2020-05-06tests/fate/hlsenc: rename fate macro define from FATE_AFILTER to FATE_HLSENCSteven Liu
and add fate-hlsenc for test all of the testcase Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2020-05-06lavc/bsf: add an Opus metadata bitstream filterLynne
The only adjustable field is the gain. Some ripping/transcoding programs have started to use it.
2020-05-05avcodec/wavpack: Check rate_x and sample rate for overflowMichael Niedermayer
Fixes: shift exponent 32 is too large for 32-bit type 'int' Fixes: 21647/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_WAVPACK_fuzzer-5686168323883008 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Reviewed-by: David Bryant <david@wavpack.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2020-05-05avformat: add demuxer for Pro Pinball Series' SoundbanksZane van Iperen
Adds support for the soundbank files used by the Pro Pinball series of games. https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2020-May/262094.html Signed-off-by: Zane van Iperen <zane@zanevaniperen.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2020-05-05libswscale: add output support for AV_PIX_FMT_GBRAPF32Mark Reid
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2020-05-05libswscale: add input support AV_PIX_FMT_GBRAPF32Mark Reid
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2020-05-05avformat/nutenc: Write size into right dynamic bufferAndreas Rheinhardt
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-05avformat/aviobuf, nutenc: Move ff_puv_v, ff_get_v_length to nutenc.cAndreas Rheinhardt
and make it static again. These functions have been moved from nutenc to aviobuf and internal.h in f8280ff4c00eeaa245085fa9691035203abd168c in order to use them in a forthcoming patch in utils.c. Said patch never happened, so this commit moves them back and makes them static, effectively reverting said commit as well as f8280ff4c00eeaa245085fa9691035203abd168c (which added the ff-prefix to these functions). Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-05avformat/nutenc: Add goto fail in nut_write_headers()Andreas Rheinhardt
It allows to combine several ffio_free_dyn_buf(). Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-05avformat/nutenc: Reuse dynamic buffers when possibleAndreas Rheinhardt
NUT uses variable-length integers in order to for length fields. Therefore the NUT muxer often writes data into a dynamic buffer in order to get the length of it, then writes the length field using the fewest amount of bytes needed. To do this, a new dynamic buffer was opened, used and freed for each element which involves lots of allocations. This commit changes this: The dynamic buffers are now resetted and reused. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-05libavformat/nutenc: Remove redundant function parameterAndreas Rheinhardt
calculate_checksum in put_packet() is always 1. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-05avcodec/avpacket: add missing entry for prft to av_packet_side_data_name()James Almer
Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-05lavc/vp9: fix reference frame dimensions check for SINGLE_REFERENCE modeLinjie Fu
With the description in frame size with refs semantics (SPEC 7.2.5), it is a requirement of bitstream conformance that for at least one reference frame has the valid dimensions. Modify the check to make sure the decoder works well in SINGLE_REFERENCE mode that not all reference frames have valid dimensions. Check and error out if invalid reference frame is used in inter_recon. One of the failure case is a 480x272 inter frame (SINGLE_REFERENCE mode) with following reference pool: 0. 960x544 LAST valid 1. 1920x1088 GOLDEN invalid, but not used in single reference mode 2. 1920x1088 ALTREF invalid, but not used in single reference mode 3~7 ... Unused Identical logic in libvpx: <https://github.com/webmproject/libvpx/blob/master/vp9/decoder/vp9_decodeframe.c#L736> Signed-off-by: Linjie Fu <linjie.fu@intel.com> Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2020-05-05avcodec/v4l2_m2m_enc: Support changing qmin/qmaxAndriy Gelman
Hard coded parameters for qmin and qmax are currently used to initialize v4l2_m2m device. This commit uses values from avctx->{qmin,qmax} if they are set. Reviewed-by: Ming Qian <ming.qian@nxp.com> Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
2020-05-05avcodec/utils: simplify, remove duplicate codeLimin Wang
Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-05avformat/mxfdec: reindent codeLimin Wang
Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-05avcodec/v4l2_m2m_enc: reindent codeLimin Wang
Reviewed-by: Andriy Gelman <andriy.gelman@gmail.com> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-05avcodec/prores_metadata_bsf: Use AVCOL_TRC_NB - 1 for the valid max rangeLimin Wang
Report by Marton after commit. Reviewed-by: Marton Balint <cus@passwd.hu> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2020-05-04lavc/vaapi_encode: add FF_CODEC_CAP_INIT_CLEANUP caps for encodersLinjie Fu
ff_vaapi_encode_close() is not enough to free the resources like cbs if initialization failure happens after codec->configure (except for vp8/vp9). We need to call avctx->codec->close() to deallocate, otherwise memory leak happens. Add FF_CODEC_CAP_INIT_CLEANUP for vaapi encoders and deallocate the resources at free_and_end inside avcodec_open2(). Reviewed-by: Timo Rothenpieler <timo@rothenpieler.org> Signed-off-by: Linjie Fu <linjie.fu@intel.com>
2020-05-04avformat/matroskadec: Free right buffer on errorAndreas Rheinhardt
Since commit 979b5b89594c7628bd846c63198cb64ef9d81d16, reverting the Matroska ContentCompression is no longer done inside matroska_parse_frame() (the function that creates AVPackets out of the parsed data (unless we are dealing with certain codecs that need special handling)), but instead in matroska_parse_block(). As a consequence, the data that matroska_parse_frame() receives is no longer always owned by an AVBuffer; it is owned by an AVBuffer iff no ContentCompression needed to be reversed; otherwise the data is independently allocated and needs to be freed on error. Whether the data is owned by an AVBuffer or not is indicated by a variable buf of type AVBufferRef *: If it is NULL, the data is independently allocated, if not it is owned by the underlying AVBuffer (and is used to avoid copying the data when creating the AVPackets). Because the allocation of the buffer holding the uncompressed data happens outside of matroska_parse_frame() (if a ContentCompression needs to be reversed), the data is passed as uint8_t ** in order to not leave any dangling pointers behind in matroska_parse_block() should the data need to be freed: In case of errors, said uint8_t ** would be av_freep()'ed in case buf indicated the data to be independently allocated. Yet there is a problem with this: Some codecs (namely WavPack and ProRes) need special handling: Their packets are only stored in Matroska in a stripped form to save space and the demuxer reconstructs full packets. This involved allocating a new, enlarged buffer. And if an error happens when trying to wrap this new buffer into an AVBuffer, this buffer needs to be freed; yet instead the given uint8_t ** (holding the uncompressed, yet still stripped form of the data) would be freed (av_freep()'ed) which certainly leads to a memleak of the new buffer; even worse, in case the track does not use ContentCompression the given uint8_t ** must not be freed as the actual data is owned by an AVBuffer and the data given to matroska_parse_frame() is not the start of the actual allocated buffer at all. Both of these issues are fixed by always freeing the current data in case it is independently allocated. Furthermore, while it would be possible to track whether the pointer from matroska_parse_block() needs to be reset or not, there is no gain in doing so, as the pointer is not used at all afterwards and the sematics are clear: If the data passed to matroska_parse_frame() is independently allocated, then ownership of the data passes to matroska_parse_frame(). So don't pass the data via uint8_t **. Fixes Coverity ID 1462661 (the issue as described by Coverity is btw a false positive: It thinks that this error can be triggered by ProRes with a size of zero after reconstructing the original packets, but the reconstructed packets can't have a size of zero). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-04doc/muxers: remove hls_fmp4_init_resend parameterSteven Liu
the parameter should boolean
2020-05-04avcodec/cbs_h265: add missing support for reserved_payload_extension_data ↵James Almer
SEI bits Fixes ticket #8622 Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Reviewed-by: Mark Thompson <sw@jkqxz.net> Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-04avcodec/cbs_h265: move the payload_extension_present check into its own functionJames Almer
Will be reused in the following patch. Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-04avcodec/cbs_h265: rename H265RawPSExtensionData to H265RawExtensionDataJames Almer
So that NAL types other than Parameter Set ones may use it. Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-04Revert "avcodec/proresenc_anatoliy: support for more color matrix for proresenc"Limin Wang
This reverts commit e0eed1fd523ec5d0cc390a08c468dbc57316378a.
2020-05-03avcodec/librav1e: Require a bitrate to be set when using 2-pass modeDerek Buitenhuis
Not requiring this leads to unexpected result, since Rav1e's current two pass API has no way to fail in such a case. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2020-05-03ffmpeg: Don't require a known device to pass a frames context to an encoderMark Thompson
The previous code here did not handle passing a frames context when ffmpeg itself did not know about the device it came from (for example, because it was created by device derivation inside a filter graph), which would break encoders requiring that input. Fix that by checking for HW frames and device context methods independently, and prefer to use a frames context method if possible. At the same time, revert the encoding additions to the device matching function because the additional complexity was not relevant to decoding. Also fixes #8637, which is the same case but with the device creation hidden in the ad-hoc libmfx setup code.
2020-05-03avcodec/h265_metadata: filter parameter sets in packet side dataJames Almer
Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-03avcodec/h264_metadata: filter parameter sets in packet side dataJames Almer
Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-03avcodec/av1_metadata: filter parameter sets in packet side dataJames Almer
Extradata included in packet side data is meant to replace the codec context extradata. So when muxing for example to MP4 without this change and if extradata is present in a packet side data, the result will be that the parameter sets present in keyframes will be filtered, but the parameter sets ultimately included in the av1C box will not. This is especially important for AV1 as both currently supported encoders don't export the Sequence Header in the codec context extradata, but as packet side data instead. Signed-off-by: James Almer <jamrial@gmail.com>
2020-05-03avformat/matroskaenc: Check mimetypes earlierAndreas Rheinhardt
This avoids errors lateron after the file header has already been partially written. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-03avformat/matroskaenc: Fix memleak upon encountering bogus chapterAndreas Rheinhardt
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-03avformat/matroskaenc: Make sure UIDs of delayed chapters are != 0Andreas Rheinhardt
This has previously only been checked if the chapters were initially available, but not if they were only written in the trailer. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2020-05-03avformat/vorbiscomment: Switch to AVIOContext from bytestream APIAndreas Rheinhardt
Up until now ff_vorbiscomment_write() used the bytestream API to write VorbisComments. Therefore the caller had to provide a sufficiently large buffer to write the output. Yet two of the three callers (namely the FLAC and the Matroska muxer) actually want the output to be written via an AVIOContext; therefore they allocated buffers of the right size just for this purpose (i.e. they get freed immediately afterwards). Only the Ogg muxer actually wants a buffer. But given that it is easy to wrap a buffer into an AVIOContext this commit changes ff_vorbiscomment_write() to use an AVIOContext for its output. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>