aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/utils.c
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge commit '0337adfab5d14a17bf4d5060aa0425e4049a9862'James Almer2017-10-211-29/+0
|\| | | | | | | | | | | | | * commit '0337adfab5d14a17bf4d5060aa0425e4049a9862': lavc: Drop deprecated missing sample log function Merged-by: James Almer <jamrial@gmail.com>
| * lavc: Drop deprecated missing sample log functionVittorio Giovara2017-03-231-29/+0
| | | | | | | | Deprecated in 01/2013.
| * lavc: Add device context field to AVCodecContextMark Thompson2017-02-131-0/+1
| | | | | | | | For use by codec implementations which can allocate frames internally.
| * lavc: use av_cpu_max_align() instead of hardcoding alignment requirementsAnton Khirnov2017-02-111-9/+2
| |
* | Remove some unneeded casts of bit_rate.Carl Eugen Hoyos2017-09-221-2/+2
| |
* | lavc/utils: Calculate frame duration for little-endian G.726.Carl Eugen Hoyos2017-08-261-1/+1
| |
* | avcodec/utils: Fix signed integer overflow in rc_initial_buffer_occupancy ↵Vitaly Buka2017-08-231-1/+1
| | | | | | | | | | | | | | | | | | | | initialization Signed integer overflow is undefined behavior. Detected with clang and -fsanitize=signed-integer-overflow Signed-off-by: Vitaly Buka <vitalybuka@google.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | Merge commit '972c71e9cb63e24f57ee481e413199c7d88a8813'James Almer2017-04-221-0/+3
|\| | | | | | | | | | | | | * commit '972c71e9cb63e24f57ee481e413199c7d88a8813': lavc: add support for filtering packets before decoding Merged-by: James Almer <jamrial@gmail.com>
| * lavc: add support for filtering packets before decodingAnton Khirnov2016-12-141-0/+3
| |
* | Merge commit '061a0c14bb5767bca72e3a7227ca400de439ba09'James Almer2017-04-221-1/+21
|\| | | | | | | | | | | | | | | | | * commit '061a0c14bb5767bca72e3a7227ca400de439ba09': decode: restructure the core decoding code CUVID decoder adapted by wm4. Merged-by: James Almer <jamrial@gmail.com>
| * decode: restructure the core decoding codeAnton Khirnov2016-12-141-1/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, the new decoding API is pretty much just a wrapper around the old deprecated one. This is problematic, since it interferes with making full use of the flexibility added by the new API. The old API should also be removed at some future point. Reorganize the code so that the new send_packet/receive_frame functions call the actual decoding directly and change the old deprecated avcodec_decode_* functions into wrappers around the new API. The new internal API for decoders is now changing as well. Before this commit, it mirrors the public API, so the decoders need to implement send_packet() and receive_frame() callbacks. This turns out to require awkward constructs in both the decoders and the generic code. After this commit, the decoders only implement the receive_frame() callback and call a new internal function, ff_decode_get_packet() to obtain input data, in the same manner to how the bitstream filters now work. avcodec will now always make a reference to the input packet, which means that non-refcounted input packets will be copied. Keeping the previous behaviour, where this copy could sometimes be avoided, would make the code significantly more complex and fragile for only dubious gains, since packets are typically small and everyone who cares about performance should use refcounted packets anyway.
* | Merge commit '549d0bdca53af7a6e0c612ab4b03baecf3a5878f'James Almer2017-04-221-0/+8
|\| | | | | | | | | | | | | | | | | | | * commit '549d0bdca53af7a6e0c612ab4b03baecf3a5878f': decode: be more explicit about storing the last packet properties Also copy pkt->size in extract_packet_props(), as it's needed for AVFrame.pkt_size Merged-by: James Almer <jamrial@gmail.com>
| * decode: be more explicit about storing the last packet propertiesAnton Khirnov2016-12-141-0/+8
| | | | | | | | | | | | | | | | | | | | | | The current code stores a pointer to the packet passed to the decoder, which is then used during get_buffer() for timestamps and side data passthrough. However, since this is a pointer to user data which we do not own, storing it is potentially dangerous. It is also ill defined for the new decoding API with split input/output. Fix this problem by making an explicit internally owned copy of the packet properties.
* | Merge commit '0309ddcfb25fd44883bfcdb07509eb4907576b97'Clément Bœsch2017-04-171-0/+3
|\| | | | | | | | | | | | | * commit '0309ddcfb25fd44883bfcdb07509eb4907576b97': lavc: handle MP3 in get_audio_frame_duration() Merged-by: Clément Bœsch <u@pkh.me>
| * lavc: handle MP3 in get_audio_frame_duration()Anton Khirnov2016-12-141-0/+3
| |
* | Merge commit '3fe2a01df7f2c193805809f57b61d79607572351'James Almer2017-04-071-1521/+0
|\| | | | | | | | | | | | | * commit '3fe2a01df7f2c193805809f57b61d79607572351': lavc: move decoding-related code from utils.c to a new file Merged-by: James Almer <jamrial@gmail.com>
| * lavc: move decoding-related code from utils.c to a new fileAnton Khirnov2016-11-291-889/+0
| |
* | Merge commit '328cd2b599bc2d0d38f3c12606fa2a66eeec016e'James Almer2017-04-071-424/+0
|\| | | | | | | | | | | | | * commit '328cd2b599bc2d0d38f3c12606fa2a66eeec016e': lavc: move encoding-related code from utils.c to a new file Merged-by: James Almer <jamrial@gmail.com>
| * lavc: move encoding-related code from utils.c to a new fileAnton Khirnov2016-11-291-331/+0
| |
| * Add GBRAP12 pixel format supportKieran Kunhya2016-10-121-0/+2
| | | | | | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* | lavc: Add Content Light Level side metadata found in HEVCSteve Lhomme2017-04-061-0/+1
| | | | | | | | | | | | These data are necessary when transmitting HDR over HDMI. Signed-off-by: James Almer <jamrial@gmail.com>
* | pthread_frame: allow per-field ThreadFrame owners.Ronald S. Bultje2017-04-061-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This tries to handle cases where separate invocations of decode_frame() (each running in separate threads) write to respective fields in the same AVFrame->data[]. Having per-field owners makes interaction between readers (the referencing thread) and writers (the decoding thread) slightly more optimal if both accesses are field-based, since they will use the respective producer's thread objects (mutex/cond) instead of sharing the thread objects of the first field's producer. In practice, this fixes the following tsan-warning in fate-h264: WARNING: ThreadSanitizer: data race (pid=21615) Read of size 4 at 0x7d640000d9fc by thread T2 (mutexes: write M1006): #0 ff_thread_report_progress pthread_frame.c:569 (ffmpeg:x86_64+0x100f7cf54) [..] Previous write of size 4 at 0x7d640000d9fc by main thread (mutexes: write M1004): #0 update_context_from_user pthread_frame.c:335 (ffmpeg:x86_64+0x100f81abb)
* | lavc: fix usages of av_get_codec_tag_string()Clément Bœsch2017-03-291-6/+3
| |
* | avcodec: remove warning against using frame threading with hwaccelswm42017-03-211-5/+0
| | | | | | | | | | | | | | libavcodec now automatically serializes decoding for hwaccels which are not thread-safe. This means API users, which rely on the libavcodec native software fallback mechanism, can now simply enable threading without running into problems.
* | avcodec, avformat: deprecate anything related to side data mergingwm42017-03-211-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch deprecates anything that has to do with merging/splitting side data. Automatic side data merging (and splitting), as well as all API symbols involved in it, are removed completely. Two FF_API_ defines are dedicated to deprecating API symbols related to this: FF_API_MERGE_SD_API removes av_packet_split/merge_side_data in libavcodec, and FF_API_LAVF_KEEPSIDE_FLAG deprecates AVFMT_FLAG_KEEP_SIDE_DATA in libavformat. Since it was claimed that changing the default from merging side data to not doing it is an ABI change, there are two additional FF_API_ defines, which stop using the side data merging/splitting by default (and remove any code in avformat/avcodec doing this): FF_API_MERGE_SD in libavcodec, and FF_API_LAVF_MERGE_SD in libavformat. It is very much intended that FF_API_MERGE_SD and FF_API_LAVF_MERGE_SD are quickly defined to 0 in the next ABI bump, while the API symbols are retained for a longer time for the sake of compatibility. AVFMT_FLAG_KEEP_SIDE_DATA will (very much intentionally) do nothing for most of the time it will still be defined. Keep in mind that no code exists that actually tries to unset this flag for any reason, nor does such code need to exist. Code setting this flag explicitly will work as before. Thus it's ok for AVFMT_FLAG_KEEP_SIDE_DATA to do nothing once side data merging has been removed from libavformat. In order to avoid that anyone in the future does this incorrectly, here is a small guide how to update the internal code on bumps: - next ABI bump (probably soon): - define FF_API_LAVF_MERGE_SD to 0, and remove all code covered by it - define FF_API_MERGE_SD to 0, and remove all code covered by it - next API bump (typically two years in the future or so): - define FF_API_LAVF_KEEPSIDE_FLAG to 0, and remove all code covered by it - define FF_API_MERGE_SD_API to 0, and remove all code covered by it This forces anyone who actually wants packet side data to temporarily use deprecated API to get it all. If you ask me, this is batshit fucked up crazy, but it's how we roll. Making AVFMT_FLAG_KEEP_SIDE_DATA to be set by default was rejected as an ABI change, so I'm going all the way to get rid of this once and for all. Reviewed-by: James Almer <jamrial@gmail.com> Reviewed-by: Rostislav Pehlivanov <atomnuker@gmail.com> Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
* | Merge commit 'e9bfff1cc66c85b91b262c41e8aa5e8685606225'Clément Bœsch2017-03-181-2/+2
|\| | | | | | | | | | | | | | | | | | | | | * commit 'e9bfff1cc66c85b91b262c41e8aa5e8685606225': lavc: free buffer_frame/pkt on avcodec_open2() failure This commit is a noop, see 27adf9f9cdbc6f1dc0a1292dc97490eec6f2f068. Only reordered to reduce diff. Merged-by: Clément Bœsch <u@pkh.me>
| * lavc: free buffer_frame/pkt on avcodec_open2() failureAnton Khirnov2016-08-111-0/+2
| | | | | | | | Fixes memory leaks in some FATE tests.
| * lavc: align the linesize to 32 when AVX is enabledAnton Khirnov2016-08-031-1/+3
| |
* | avcodec: estimate output bitrate for uncompressed video codecsTobias Rapp2017-03-171-0/+21
| | | | | | | | | | | | | | | | | | | | | | Allows to get a more realistic total bitrate (and estimated file size) in avi_write_header. Previously a static default value of 200k was assumed. Adds an internal helper function for bitrate guessing. Signed-off-by: Tobias Rapp <t.rapp@noa-archive.com> Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
* | avcodec: fix uninitialized variable readwm42017-03-171-1/+1
| | | | | | | | | | | | | | This cna happen if the user tries to call the new decode API for subtitles. Fixes CID 1402071.
* | lavc/internal: Constify AVPacket* in AVCodecInternal.Carl Eugen Hoyos2017-03-161-2/+2
| | | | | | | | | | Fixes a gcc warning: libavcodec/utils.c:2244:26: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
* | Merge commit 'f65285aba0df7d46298abe0c945dfee05cbc6028'Clément Bœsch2017-03-121-0/+11
|\| | | | | | | | | | | | | * commit 'f65285aba0df7d46298abe0c945dfee05cbc6028': lavc: set sw_pix_fmt for hwaccel encoding Merged-by: Clément Bœsch <u@pkh.me>
| * lavc: set sw_pix_fmt for hwaccel encodingAnton Khirnov2016-07-221-0/+11
| |
* | aacdec: do not mutate input packet metadatawm42017-03-091-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently the demuxer outputs the wrong padding for HE-AAC (based on the raw sample rate, or so). aacdec contains a hack to adjust the muxer padding accordingly before it's used to trim the decoder output. This modified the packet side data, which in combination with the old decoding API would change the packet the user passed to the decoder. This is clearly not allowed, and it breaks running some gapless fate tests with "-fflags +keepside" applied (without keepside, the packet metadata is typically newly allocated, essentially making a copy and not modifying the user's input packet). This should probably be fixed in the demuxer (and consequently also the muxer), but for now only fix the immediate problem. Regression since 946ed78f5f8 (2012).
* | avcodec: consider an error during decoder draining as EOFwm42017-03-061-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | There is no reason that draining couldn't return an error or two. But some decoders don't handle this very well, and might always return an error. This can lead to API users getting into an infinite loop and burning CPU, because no progress is made and EOF is never returned. In fact, ffmpeg.c contains a hack against such a case. It is made unnecessary with this commit, and removed with the next one. (This particular error case seems to have been fixed since the hack was added, though.) This might lose frames if decoding returns errors during draining.
* | lavc/utils: Make second parameter to apply_param_change() const.Carl Eugen Hoyos2017-02-241-1/+1
| | | | | | | | | | Fixes a compilation warning: passing argument 2 of ‘apply_param_change’ discards ‘const’ qualifier from pointer target type
* | lavc: Add device context field to AVCodecContextMark Thompson2017-02-131-0/+1
| | | | | | | | For use by codec implementations which can allocate frames internally.
* | avcodec/utils: Fix memleak with subtitles and sidedataMichael Niedermayer2017-02-031-5/+7
| | | | | | | | | | | | | | Fixes: 454/fuzz-3-ffmpeg_SUBTITLE_AV_CODEC_ID_MOV_TEXT_fuzzer Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/targets/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avcodec/utils: correct align value for interplayMichael Niedermayer2017-01-251-1/+6
| | | | | | | | | | | | | | | | Fixes out of array access Fixes: 452/fuzz-1-ffmpeg_VIDEO_AV_CODEC_ID_INTERPLAY_VIDEO_fuzzer Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/targets/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avcodec: add pcm_f16le and pcm_f24le decoderPaul B Mahol2016-12-221-0/+2
| | | | | | | | Signed-off-by: Paul B Mahol <onemda@gmail.com>
* | lavc: Fix ticket 6024, truncated mode decodingPavel Koshevoy2016-12-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | The assumption that avcodec_send_packet makes regarding decoders consuming the entire packet is not true if the codec supports truncated decoding mode and the truncated flag is turned on. Steps to reproduce: ./ffmpeg_g -flags truncated \ -i "http://samples.ffmpeg.org/MPEG2/test-ebu-422.40000.pakets.ts" \ -c:v ffv1 -c:a copy -y /tmp/truncated.nut Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avcodec: Add max_pixels optionsMichael Niedermayer2016-12-101-6/+6
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | lavc: Add spherical packet side data APIVittorio Giovara2016-12-071-0/+1
| | | | | | | | Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* | lavc/utils.c: Make sure skip_samples never goes negative.Sasi Inguva2016-11-101-1/+1
| | | | | | | | | | | | Signed-off-by: Sasi Inguva <isasi@google.com> Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | lavc/utils: avcodec_string: dump field order when knownRodger Combs2016-10-241-0/+14
| |
* | avcodec/utils: Move emms_c() before memory allocation functions in ↵Michael Niedermayer2016-10-221-1/+2
| | | | | | | | | | | | avcodec_encode_video2() Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avcodec/utils: Clear MMX state before returning from avcodec_default_execute*()Michael Niedermayer2016-10-211-0/+2
| | | | | | | | Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* | avcodec/utils: print Chroma Location string in verbose log levelJames Almer2016-10-161-1/+1
| | | | | | | | | | | | | | | | It's container level information on some formats (Matroska, MXF, yuv4mpeg), so it should be printed at higher log levels than debug. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: James Almer <jamrial@gmail.com>
* | Merge commit '32c8359093d1ff4f45ed19518b449b3ac3769d27'Hendrik Leppkes2016-10-071-4/+20
|\| | | | | | | | | | | | | * commit '32c8359093d1ff4f45ed19518b449b3ac3769d27': lavc: export the timestamps when decoding in AVFrame.pts Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
| * lavc: export the timestamps when decoding in AVFrame.ptsAnton Khirnov2016-06-211-0/+10
| | | | | | | | | | | | | | | | | | | | | | Currently it's exported as AVFrame.pkt_pts, which is also the only use for that field. The reason it is done like this is that lavc used to export various codec-specific "timing" information in AVFrame.pts, which is not done anymore. Since it is confusing to the callers to have a separate field which is used only for decoder timestamps and nothing else, deprecate pkt_pts and use just AVFrame.pts everywhere.