summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
...
* avformat/matroskaenc: Don't implicitly mark WebVTT in WebM as EnglishAndreas Rheinhardt2020-04-02
| | | | | | | | | | | | | | | | | | | | Writing the language of WebVTT in WebM proceeded differently than the language of all other tracks: In case no language was given, it does not write anything instead of "und" (for undefined). Because the default value of the Language element in WebM (that inherited it from Matroska) is "eng" (for English), any such track will actually be flagged as English. Doing it this way goes back to commit 509642b4 (the commit adding support for WebVTT) and no reason for this has been given in the commit message or in the discussion about this patch on the mailing list; the best I can think of is this: the WebM wiki contains "The srclang attribute is stored as the Language sub-element." Someone unfamiliar with default values in Matroska/WebM could interpret this as meaning that no Language element should be written if the language is unknown. And this is wrong and this commit changes it. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Reindent after previous commitAndreas Rheinhardt2020-04-02
| | | | | | Also remove { } after an if if there is only one statement inside { }. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Combine checks for audioAndreas Rheinhardt2020-04-02
| | | | | | | | | mkv_write_track() currently has three places where it checks for whether the current codec type is audio: One in a switch and two outside of it. These checks can be combined by moving the code after the other two checks inside the audio-related part of the switch. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Simplify writing Void elementsAndreas Rheinhardt2020-04-02
| | | | | | | | | | | | | | | | | | | Reserving space in Matroska works by writing a Void element. And until now this worked as follows: The current position was recorded and the EBML ID as well as the length field written; then the new position was recorded to know how much more to write. Afterwards the actual writing has been performed via ffio_fill(). But it is unnecessary to explicitly use the positions (obtained via avio_tell()) to find out how much still needs to be written, because the length of the ID and the length field are known. So rewrite the function to no longer use them. Also, given that ffio_fill() uses an int parameter and given that no current caller (and no sane future caller) will want to reserve several GB of space, make the size parameter of put_ebml_void() itself an int. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Avoid seek when writing Cues at the frontAndreas Rheinhardt2020-04-02
| | | | | | | | | | When the Cues are written in front of the Cluster, the muxer would seek to the beginning (to where the Cues ought to be written) and write the Cues; afterwards it would seek back to the end of the file only to seek to the beginning once again to update several elements there. This commit removes the seek to the end. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Fix edge case of writing Cues at the beginningAndreas Rheinhardt2020-04-02
| | | | | | | | | | | | | | | | | | | | | | The Matroska muxer has the ability to write the Cues (the index) at the beginning of the file (in front of the Cluster): The user inputs the amount of space that should be reserved at the beginning of the file and if this is sufficient, the Cues will be written there and the part of the reserved space not used up by the Cues will be filled with a "Void" element. There is just one problem with this: One can not fill a single byte this way, because said Void element is minimally two bytes long (one byte ID, one byte length field). Up until now, if one reserved one byte more than needed, one would run into an assert when writing the Void element. There are two solutions for this: Error out if it happens. Or adjust the length field of the Cues in order to ensure that the above situation can't happen (i.e. write the length on one byte more than necessary). The first solution is very unsatisfactory, as enough space has been reserved. Therefore this commit implements the second solution. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Don't fail if reserved Cues space doesn't sufficeAndreas Rheinhardt2020-04-02
| | | | | | | | | | | | | | | | | | | | | | When the user opted to write the Cues at the beginning, the Cues were simply written without checking in advance whether enough space has been reserved for them. If it wasn't enough, the data following the space reserved for the Cues was simply overwritten, corrupting the file. This commit changes this by checking whether enough space has been reserved for the Cues before outputting anything. If it isn't enough, no Cues will be output at all and the file will be finalized normally, yet writing the trailer will nevertheless return an error to notify the user that his wish of having Cues at the front of the file hasn't been fulfilled. This change opens new usecases for this option: It is now safe to use this option to e.g. record live streams or to use it when muxing the output of an expensive encoding, because when the reserved space turns out to be insufficient, one ends up with a file that just lacks Cues but is otherwise fine. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avfilter/x86/vf_v360_init: add missing casesPaul B Mahol2020-04-02
|
* avfilter/vf_v360: add SIMD for lagrange9 interpolationPaul B Mahol2020-04-02
|
* avfilter/vf_v360: add lagrange9 interpolationPaul B Mahol2020-04-02
|
* avformat/matroskaenc: Update the default version of WavPackAndreas Rheinhardt2020-04-02
| | | | | | | | | The Matroska muxer currently assumed WavPack version 4.03 in case it was not explicitly signalled via extradata; but following a recommendation from David Bryant, the WavPack creator, this is changed to 4.10. Reviewed-by: David Bryant <david@wavpack.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/wvdec: Export version as extradataAndreas Rheinhardt2020-04-02
| | | | | | | | | It might be used by the Matroska muxer. This is also the reason why the FATE-tests for muxing WavPack into Matroska needed to be updated: They now write the correct version 4.07 and not 4.03 as before. Reviewed-by: David Bryant <david@wavpack.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskadec: Add a workaround for missing WavPack extradataAndreas Rheinhardt2020-04-02
| | | | | | | | | | | | | | | | | | | mkvmerge versions 6.2 to 40.0 had a bug that made it not propagate the WavPack extradata (containing the WavPack version) during remuxing from a Matroska file; currently our demuxer would treat every WavPack block encountered as invalid data (unless the WavPack stream is to be discarded (i.e. the streams discard is >= AVDISCARD_ALL)) and try to resync to the next level 1 element. Luckily, the WavPack version is currently not really important; so we fix this problem by assuming a version. David Bryant, the creator of WavPack, recommended using version 0x410 (the most recent version) for this. And this is what this commit does. A FATE-test for this has been added. Reviewed-by: David Bryant <david@wavpack.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* libavformat/mov.c: Free aes_decrypt to avoid leaking memoryJohn Rummell2020-04-01
| | | | | | Found by Chromium fuzzers (crbug.com/1057205). Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* libavformat/oggdec.c: Check return value from avio_read()John Rummell2020-04-01
| | | | | | | | If the buffer doesn't contain enough bytes when reading a stream, fail rather than continuing on with unitialized data. Caught by Chromium fuzzers (crbug.com/1054229). Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avformat/movenc: add write_clli flag to write clli atomMichael Bradshaw2020-04-01
| | | | | | | | | The clli atom isn't in ISO/IEC 14496-12:2015 so the flag is marked as experimental and the clli atom is not written by default. The clli atom is already parsed by FFmpeg in mov.c. Signed-off-by: Michael Bradshaw <mjbshaw@google.com>
* lavfi/deshake_opencl: Do not use bool, powerpc does not like it.Carl Eugen Hoyos2020-04-01
| | | | Fixes ticket #8591.
* avformat/avformat.h: Correct some commentsAndreas Rheinhardt2020-04-01
| | | | | | | | | | | | | | | | | 1. When set_parameters was removed from AVOutputFormat in 2fb75019, it was forgotten to remove the comment pertaining to it. Said comment now appeared to apply to interleave_packet(); it is of course nonsense and has been replaced by an accurate description. 2. The description of av_write_uncoded_frame() suggested av_interleaved_write_frame() as a replacement if the input is not already correctly interleaved; it also referred to said function for details. Given that said function can't write AVFrames and that the specifics of writing uncoded frames are explained in the description of av_interleaved_write_uncoded_frame(), both references have been fixed. 3. Removed an outdated comment about avformat_seek_file(). Reviewed-by: Marton Balint <cus@passwd.hu> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avcodec/v4l2_m2m_dec: Init reserved bytes to zero before ioctl callAndriy Gelman2020-03-31
| | | | | | | | | | struct v4l2_selection contains reserved bytes which should be set to zero before the ioctl call. Fixes valgrind error: Syscall param ioctl(VKI_V4L2_S_SELECTION) points to uninitialised byte(s) Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
* avformat/audiointerleave: Fix memleakAndreas Rheinhardt2020-04-01
| | | | | | | | | | | | If ff_interleave_add_packet failed, the content of the newly created packet new_pkt would leak. Also, it is unnecessary to zero-initialize a packet that will be put into av_new_packet lateron as the latter already initializes the packet. Therefore this has been removed, too. Reviewed-by: Marton Balint <cus@passwd.hu> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/mux: Only prepare input packet if there is a packetAndreas Rheinhardt2020-04-01
| | | | | | | | | It is unnecessary to call prepare_input_packet if there is no packet as it doesn't do anything, except when the currently inactive code guarded by !FF_API_COMPUTE_PKT_FIELDS2 || !FF_API_LAVF_AVCTX becomes active: Then attempting to access pkt->stream_index will crash. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avutil/opt: Don't use NULL for %s string in a log messageAndreas Rheinhardt2020-04-01
| | | | | | | | | | | | | | | If one calls av_opt_set() with an incorrect string to set the value of an option of type AV_OPT_TYPE_VIDEO_RATE, the given string is used in a log message via %s. This also happens when the string is actually a nullpointer in which case using it for %s is forbidden. This commit changes this by erroring out early in case of a nullpointer. This also fixes a warning from GCC 9.2: "‘%s’ directive argument is null [-Wformat-overflow=]" Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avcodec/v4l2_m2m: fix setting frame periodMing Qian2020-03-31
| | | | | | | | Currently the driver's frame period is incorrectly set to the frame rate. This is fixed in the commit. Signed-off-by: Ming Qian <ming.qian@nxp.com> Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
* avcodec/hcadec: Check scale_factorsMichael Niedermayer2020-03-31
| | | | | | | | | Fixes: out of array read Fixes: 21286/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_HCA_fuzzer-5683183715876864 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* mailmap: fix 3-address entriesrcombs2020-03-31
| | | | git only supports <new> <old>, not <new> <old1> <old2>
* ffmpeg: Print an error instead of a debug message on exit.Carl Eugen Hoyos2020-03-31
| | | | Reported-by: Forum user NewPlaza
* avformat/mxfdec: Correct confusing struct tagAndreas Rheinhardt2020-03-30
| | | | | | | | Don't use typedef struct MXFTrack {...} MXFTimecodeComponent, in particular given the fact that MXFTrack is a type of its own. Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Check that Cluster has been openedAndreas Rheinhardt2020-03-30
| | | | | | before setting the field indicating that a Cluster has been opened. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Remove unused function parameterAndreas Rheinhardt2020-03-30
| | | | | | | | | | end_ebml_master_crc32_preliminary() has a MatroskaMuxContext as parameter that isn't used at all. So remove it. Furthermore it doesn't close its dynamic buffer; it just uses the underlying buffer and therefore it only needs a pointer to the dynamic buffer, not a pointer to a pointer. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Write level 1 elements in one goAndreas Rheinhardt2020-03-30
| | | | | | | | | | | | | | | | | | | | | Up until now, writing level 1 elements proceeded as follows: First, the element id was written to the ordinary output AVIOContext and a dynamic buffer was opened for the content of the level 1 element in start_ebml_master_crc32(). Then this buffer was actually used and after it was closed (in end_ebml_master_crc32()), the size field corresponding to the buffer's size was written, after which the actual data was written. This commit changes this: Nothing is written to the main AVIOContext any more in start_ebml_master_crc32(). end_ebml_master_crc32() now writes both the id, the length field as well as the data. This implies that one can start a level 1 element in memory without outputting anything. This is done to enable to test whether enough space has been reserved for the Cues (if space has been reserved for them) before writing them. A large duration between outputting the header and outputting the rest could also break certain streaming usecases like the one from #8578 (which this commit fixes). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Simplify writing CuesAndreas Rheinhardt2020-03-30
| | | | | | | | | | | | | | | | | | | | | | | | | When the Matroska muxer writes the Cues (the index), it groups index entries with the same timestamp into the same CuePoint to save space. But given Matroska's variable-length length fields, it either needs to have an upper bound of the final size of the CuePoint before writing it or the CuePoint has to be assembled in a different buffer, so that after having assembled the CuePoint (when the real size is known), the CuePoint's header can be written and its data copied after it. The first of these approaches is the currently used one. This entails finding out the number of entries in a CuePoint before starting the CuePoint and therefore means that the list is read at least twice. Furthermore, a worst-case upper-bound for the length of a single entry was used, so that sometimes bytes are wasted on length fields. This commit switches to the second approach. This is no longer more expensive than the current approach if one only resets the dynamic buffer used to write the CuePoint's content instead of opening a new buffer for every CuePoint: Writing the trailer of a file with 540.000 CuePoints improved actually from 219054414 decicycles to 2164379394 decicycles (based upon 50 iterations). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/aviobuf: Add function to reset dynamic bufferAndreas Rheinhardt2020-03-30
| | | | | | | | | Resetting a dynamic buffer means to keep the AVIOContext and the internal buffer used by the dynamic buffer. This is done in order to save (re)allocations when one has a workflow where one opens and closes dynamic buffers in sequence. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Avoid allocation for CuesAndreas Rheinhardt2020-03-30
| | | | | | | | | | | | Up until now, the Matroska muxer would allocate a structure containing three members: The segment offset, a pointer to an array containing Cue (index) entries and a counter for said array. It is unnecessary to allocate it separately and it is unnecessary to contain the segment offset in said structure, as it duplicates another field contained in the MatroskaMuxContext. This commit implements the corresponding changes. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: CosmeticsAndreas Rheinhardt2020-03-30
| | | | Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Avoid unnecessary seekAndreas Rheinhardt2020-03-30
| | | | | | | | | | | | | | | | When writing the SeekHead (a form of index) at the end of the muxing process, mkv_write_seekhead() would first seek to the position where the SeekHead ought to be written, then write it there and seek back to the original position afterwards. Which means: To the end of the file. Afterwards, a seek to the beginning of the file is performed to update further values. This of course means that the second seek in mkv_write_seekhead() was unnecessary. This has been changed: A new parameter was added to mkv_write_seekhead() containing the destination for the second seek, effectively eliminating the seek to the end of the file after writing the SeekHead. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Check for failure when writing SeekHeadAndreas Rheinhardt2020-03-30
| | | | | | | | | | | | | | | mkv_write_seekhead() would up until now try to seek to the position where the SeekHead ought to be written, write the SeekHead and seek back. The first of these seeks was checked as was writing, yet the seek back was unchecked. Moreover the return value of mkv_write_seekhead() was unchecked (the ordinary return value was the position where the SeekHead was written). This commit changes this: Everything is checked. In the unseekable case (where the first seek may nevertheless work when it happens in the buffer) a failure at the first seek is not considered an error. In any case, failure to seek back is an error. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avformat/matroskaenc: Improve calculating EBML ID sizeAndreas Rheinhardt2020-03-30
| | | | | | | | | | | | | | | | | | | | | When the Matroska muxer writes an EBML ID, it calculates the length of said ID before; and it does this as if this were a number that needs to be encoded as EBML number: The formula used is (av_log2(id + 1) - 1) / 7 + 1. But the constants used already contain the VINT_MARKER (the leading bit indicating the length of the EBML number) and therefore the algorithm used makes no sense. Instead the position of the most significant byte set gives the desired length. The algorithm used until now worked because EBML numbers are subject to restrictions: If the EBML number takes up k bytes, then the bit 1 << (7 * k) is set and av_log2(id) is 7 * k. So the current algorithm produces the correct result unless the EBML ID is of the form 7 * k - 1 because of the "id + 1". But contrary to encoding lengths as EBML number (where the + 1 exists to avoid the encodings reserved for unknown length), such EBML numbers are simply forbidden as EBML IDs and as such none of them were ever written. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avfilter/vf_v360: fix swapped variablesPaul B Mahol2020-03-29
|
* avfilter/vf_v360: speedup fisheye outputPaul B Mahol2020-03-29
|
* avfilter/vf_v360: reduce unnecessary negationsPaul B Mahol2020-03-29
|
* avformat/avformat: Update av_read_frame() documentationAndreas Rheinhardt2020-03-29
| | | | | | | | | | | | | This commit updates the documentation of av_read_frame() to match its actual behaviour in several ways: 1. On success, av_read_frame() always returns refcounted packets. 2. It can handle uninitialized packets. 3. On error, it always returns blank packets. This will allow callers to not initialize or unref unnecessarily. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* 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>
* doc/filters: add tpad default valuesLou Logan2020-03-28
| | | | Signed-off-by: Lou Logan <lou@lrcd.com>
* avfilter/vf_showinfo: limit the max number of timecodeLimin Wang2020-03-28
| | | | | Signed-off-by: Limin Wang <lance.lmwang@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avfilter: add vf_overlay_cudaYaroslav Pogrebnyak2020-03-28
| | | | Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
* avutil/frame: make frame copy functions hwframe awareTimo Rothenpieler2020-03-28
|
* avutil/hwcontext: correctly set extended_data on hwframe_get_bufferTimo Rothenpieler2020-03-28
|
* nvdec: attach real hw_frames to post-processed framesTimo Rothenpieler2020-03-28
|
* ffplay, avcodec, avformat: Don't initialize before av_packet_ref()Andreas Rheinhardt2020-03-28
| | | | | | | It already initializes the packet. Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avcodec/avcodec, avpacket: Return blank packet on av_packet_ref() failureAndreas Rheinhardt2020-03-28
| | | | | | | | | | | | Up until now, it was completely unspecified what the content of the destination packet dst was on error. Depending upon where the error happened calling av_packet_unref() on dst might be dangerous. This commit changes this by making sure that dst is blank on error, so unreferencing it again is safe (and still pointless). This behaviour is documented. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>