summaryrefslogtreecommitdiff
path: root/libavcodec/libx264.c
Commit message (Collapse)AuthorAge
* {configure,avcodec/libx264}: remove separate x264_csp_bgr checkJan Ekström2021-07-12
| | | | | | We already require X264_BUILD >= 118, which includes an unconditional definition of X264_CSP_BGR in itself, thus making this check effectively always true.
* avcodec/libx264: Separate headers not supported in AVC-Intra modeLimin Wang2021-06-25
| | | | Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
* avcodec/libx264: Add support for Sony XAVC Class 300 and 480Limin Wang2021-06-25
| | | | | Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
* avcodec/libx264: Avoid copying data, allow user-supplied buffersAndreas Rheinhardt2021-05-23
| | | | | | | | | | | Here the packet size is known before allocating the packet because the encoder provides said information (and works with internal buffers itself), so one can use this information to avoid the implicit use of another intermediate buffer for the packet data; and by switching to ff_get_encode_buffer() one can also allow user-supplied buffers. Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec/libx264: Fix redundant setting of caps_internalAndreas Rheinhardt2021-05-14
| | | | | | | | Exists since 8a129077cc37202a00dd666bd5365c3f61ea2e80. Fixes a -Winitializer-overrides warning when building with Clang. Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec: Remove redundant freeing of extradata of encodersAndreas Rheinhardt2021-04-28
| | | | | | | | AVCodecContext.extradata is freed generically by libavcodec for encoders, so it is unnecessary for an encoder to do it on its own. Reviewed-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
* avcodec: Constify AVCodecsAndreas Rheinhardt2021-04-27
| | | | | | | | | | Given that the AVCodec.next pointer has now been removed, most of the AVCodecs are not modified at all any more and can therefore be made const (as this patch does); the only exceptions are the very few codecs for external libraries that have a init_static_data callback. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec: Remove deprecated AVCodecContext.coded_frameAndreas Rheinhardt2021-04-27
| | | | | | | | | | Deprecated in 40cf1bbacc6220a0aa6bed5c331871d43f9ce370. (The currently disabled filter vf_mcdeint and vf_uspp were users of this field; they have not been changed, so that whoever wants to fix them can see the state of these filters when they were disabled.) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec: Remove private options from AVCodecContextAndreas Rheinhardt2021-04-27
| | | | | | | | | Several options that were too codec-specific were deprecated between 0e6c8532215790bbe560a9eea4f3cc82bb55cf92 and 0e9c4fe254073b209970df3e3cb84531bc388e99. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec: Remove deprecated coder type optionsAndreas Rheinhardt2021-04-27
| | | | | | | Deprecated in be00ec832c519427cd92218abac77dafdc1d5487. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* lavc: rename AV_CODEC_CAP_AUTO_THREADS->AV_CODEC_CAP_OTHER_THREADSAnton Khirnov2021-03-16
| | | | | | | | | | This cap is currently used to mark multithreading-capable codecs that wrap external libraries with their own multithreading code. The name is highly confusing for our API users, since libavcodec ALWAYS handles thread_count=0 (see commit message in previous commit). Therefore rename the cap and update its documentation to make its meaning clear. The old name is kept deprecated until next+1 major bump.
* lavc: replace internal use of AV_CODEC_CAP_AUTO_THREADS with an internal capAnton Khirnov2021-03-16
| | | | | | | | | | | | | | | | AV_CODEC_CAP_AUTO_THREADS was originally added in b4d44a45f9a to mark codecs that spawn threads internally and are able to select an optimal threads count by themselves (all such codecs are wrappers around external libraries). It is used by lavc generic code to check whether it should handle thread_count=0 itself or pass the zero directly to the codec implementation. Within this meaning, it is clearly supposed to be an internal cap rather than a public one, since from the viewpoint of a libavcodec user, lavc ALWAYS handles thread_count=0. Whether it happens in the generic code or within the codec internals is not a meaningful difference for the caller. External aspects of this flag will be dealt with in the following commit.
* avcodec/libx264: Don't use init_static_data for newer versionsAndreas Rheinhardt2021-02-28
| | | | | | | | | | | x264 versions >= 153 can support multiple bitdepths; they also don't export x264_bit_depth any more. The actual check whether a bitdepth is supported is therefore performed at runtime in x264_encoder_open. Ergo it is unnecessary to use init_static_data for these versions: One can already set ff_libx264_encoder.pix_fmts to the value that X264_init_static always sets it to. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
* avcodec: move ff_alloc_a53_sei() to atsc_53James Almer2020-08-15
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/libx264: fix chroma quantizer offset usageTakio Yamaoka2020-08-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The default for the chromaoffset field in AVCodecContext is zero, which until now always ended up overriding the AVOption-set value, thus leading to the AVOption not working. Additionally, the previous usage prevented the usage of negative values, while both the variable as well as x264's API would successfully handle such. Thus, the default value of the AVOption is changed to match the default of x264 (and what is currently the default for the AVCodecContext chromaoffset field), and the checks are changed to check for nonzero values. This way: 1. the library default is still utilized if the value is zero. 2. both negative and positive values are correctly passed to x264. For historical context, this was initially similarly implemented in 5764d38173661c29d954711dd5abfddf709e9ba4, and then b340bd8a58c32453172404a8e4240e3317e341da broke the value. Partially reverts commit b340bd8a58c32453172404a8e4240e3317e341da. Signed-off-by: Takio Yamaoka <y.takio@gmail.com>
* avcodec/libx264: call x264_param_cleanup() if availableJames Almer2020-07-17
| | | | | | | The documentation states it should be used to free any memory allocated by x264_param_parse(). Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/libx264: check for param allocation failure error codeJames Almer2020-07-17
| | | | | | And return the proper AVERROR value. Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/libx264: use a function to parse x264optsJames Almer2020-07-17
| | | | | | This is needed for the following patch. Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/internal: move packet related functions to their own headerJames Almer2020-06-02
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* lavc/libx264: misc style fixesJun Zhao2020-05-28
| | | | | | commit 4ed3a01d717 missed coding style fix. Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* avcodec/libx264: return error if unknown picture type encounteredLimin Wang2020-05-08
| | | | Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
* avcodec/libx264: return immediately if encode_nals return 0Limin Wang2020-05-08
| | | | | | | | x264_encoder_encode can return 0 with nnal 0. As a result, encode_nals will return 0. In this condition, it's better to return 0 immediately to avoid the following unneeded pict_type and flags setting. Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
* libavcodec/libx264: fix reference frame computation based on levelJosh Brewster2020-04-29
| | | | | | | | | | | | | | | The current implementation allows passing levels to libavcodec as integers (such as "31" instead of "3.1"). However, in this case, the maximum reference frame value per level was ignored because libavcodec converted the string to 310 instead of 31. Since libx264 has correctly parsed the level to int (x4->params.i_level_idc), we should rely on this value instead of attempting to parse the level string on our own. Signed-off-by: Josh Brewster <josh.brewster@protonmail.com> Signed-off-by: Josh de Kock <josh@itanimul.li>
* avcodec/libx264: add a check for the prft AVCodecContext export_side_data flagJames Almer2020-02-22
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/libx264: export Producer Reference Time as packet side dataJames Almer2020-01-15
| | | | | | Taken from Wallclock at the time the frame is submitted to the encoder. Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/libx264: use AV_OPT_TYPE_DICT for x264-paramsMarton Balint2020-01-01
| | | | Signed-off-by: Marton Balint <cus@passwd.hu>
* lavc/x264: Use FF_CODEC_CAP_INIT_THREADSAFE if x264 is new.Carl Eugen Hoyos2019-10-01
| | | | Usage of strtok() was removed from x264, see also b02490a4
* libavcodec/libx264: add a flag to output ROI warnings only once.Guo, Yejun2019-09-24
| | | | Signed-off-by: Guo, Yejun <yejun.guo@intel.com>
* lavc/x264: Also clean-up libx264rgb after init errors.Carl Eugen Hoyos2019-08-25
| | | | Missed in c180f0f6
* lavc/libx264: Cast cpb bit_rates to int64_t to avoid an integer overflow.Carl Eugen Hoyos2019-08-10
| | | | Fixes remaining part of ticket #8071 on next version bump.
* lavc/libx264: Cast bit_rate to int64_t to avoid an integer overflow.Carl Eugen Hoyos2019-08-10
| | | | Fixes ticket #8071.
* lavc/libx264: bit_rates > INT_MAX are not supported.Carl Eugen Hoyos2019-08-10
|
* libx264: Update ROI behaviour to match documentationMark Thompson2019-07-07
| | | | | | | | Fix the quantisation offset - use the whole range, and don't change the offset size based on bit depth. Iterate the list in reverse order. The first region in the list is the one that applies in the case of overlapping regions.
* lavc/libx264: Use avctx->framerate first for frame rate settingJun Zhao2019-05-11
| | | | | | | | | | perfer avctx->framerate first than use avctx->time_base when setting the frame rate to encoder. 1/time_base is not the average frame rate if the frame rate is not constant. In this case, we need to setting avctx->framerate and avctx->time_base both, but avctx->framerate not equal to 1/(avctx->time_base). Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* avcodec/libx264: add support for ROI-based encodingGuo, Yejun2019-01-17
| | | | | | | | This patch just enables the path from ffmpeg to libx264, the more encoders can be added later. Signed-off-by: Guo, Yejun <yejun.guo@intel.com> Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* libx264: Pass the reordered_opaque field through the encoderMartin Storsjö2018-11-05
| | | | | | | | | | | | | | libx264 does have a field for opaque data to pass along with frames through the encoder, but it is a pointer, while the libavcodec reordered_opaque field is an int64_t. Therefore, allocate an array within the libx264 wrapper, where reordered_opaque values in flight are stored, and pass a pointer to this array to libx264. Update the public libavcodec documentation for the AVCodecContext field to explain this usage, and add a codec capability that allows detecting whether an encoder handles this field. Signed-off-by: Martin Storsjö <martin@martin.st>
* avcodec/libx264: remove FF_CODEC_CAP_INIT_THREADSAFE flagMarton Balint2018-10-24
| | | | | | | | | | | | | Libx264 uses strtok which is not thread safe. Strtok is used in x264_param_default_preset in param_apply_tune in x264/common/base.c. Therefore the flag must be removed. x264 fixed the issue, once the fix is pushed to stable, an #if can be added to re-enable the flag based on X264_BUILD number. Fixes ticket #7446. Signed-off-by: Marton Balint <cus@passwd.hu>
* lavc/libx264: Support monochrome encoding.Carl Eugen Hoyos2018-08-07
|
* Merge commit 'c6558e8840fbb2386bf8742e4d68dd6e067d262e'James Almer2017-12-27
|\ | | | | | | | | | | | | | | | | | | | | * commit 'c6558e8840fbb2386bf8742e4d68dd6e067d262e': x264: Support version 153 See 2a111c99a60fdf4fe5eea2b073901630190c6c93 7e60c74329353db28db00552028bc88cd2a52346 Merged-by: James Almer <jamrial@gmail.com>
| * x264: Support version 153Luca Barbato2017-12-27
| | | | | | | | It has native simultaneus 8 and 10 bit support.
| * avcodec: add metadata to identify wrappers and hardware decoderswm42017-12-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Explicitly identify decoder/encoder wrappers with a common name. This saves API users from guessing by the name suffix. For example, they don't have to guess that "h264_qsv" is the h264 QSV implementation, and instead they can just check the AVCodec .codec and .wrapper_name fields. Explicitly mark AVCodec entries that are hardware decoders or most likely hardware decoders with new AV_CODEC_CAPs. The purpose is allowing API users listing hardware decoders in a more generic way. The proposed AVCodecHWConfig does not provide this information fully, because it's concerned with decoder configuration, not information about the fact whether the hardware is used or not. AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have software implementations in case the hardware is not capable. Based on a patch by Philip Langdale <philipl@overt.org>. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* | avcodec/libx264: set supported pix_fmts at runtime rather than build timeJames Almer2017-12-26
| | | | | | | | | | | | This partially reverts a change in behavior introduced in 2a111c99a60fdf4fe5eea2b073901630190c6c93. Signed-off-by: James Almer <jamrial@gmail.com>
* | avcodec/libx264: fix compilation with x264 builds >= 153James Almer2017-12-26
| | | | | | | | | | | | | | | | x264 now supports multibitdepth builds, with a slightly changed API to request bitdepth during initialization. Reviewed-by: Ricardo Constantino <wiiaboo@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* | avcodec/libx264: use the pixfmt descriptor to check for high bit depthsJames Almer2017-12-25
| | | | | | | | | | | | The x264_bit_depth constant has been removed in newer x264 builds. Signed-off-by: James Almer <jamrial@gmail.com>
* | avcodec: add metadata to identify wrappers and hardware decoderswm42017-12-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Explicitly identify decoder/encoder wrappers with a common name. This saves API users from guessing by the name suffix. For example, they don't have to guess that "h264_qsv" is the h264 QSV implementation, and instead they can just check the AVCodec .codec and .wrapper_name fields. Explicitly mark AVCodec entries that are hardware decoders or most likely hardware decoders with new AV_CODEC_CAPs. The purpose is allowing API users listing hardware decoders in a more generic way. The proposed AVCodecHWConfig does not provide this information fully, because it's concerned with decoder configuration, not information about the fact whether the hardware is used or not. AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have software implementations in case the hardware is not capable. Based on a patch by Philip Langdale <philipl@overt.org>. Merges Libav commit 47687a2f8aca3f65b6fdd117b1cb66a7409a7fd1.
* | Merge commit '94eed68ace9f2416af8457fcbf142b175928c06b'James Almer2017-10-23
|\| | | | | | | | | | | | | * commit '94eed68ace9f2416af8457fcbf142b175928c06b': lavc: Drop deprecated options moved to private contexts Merged-by: James Almer <jamrial@gmail.com>
| * lavc: Drop deprecated options moved to private contextsVittorio Giovara2017-03-23
| | | | | | | | Deprecated in 10/2014 and 07/2015.
* | avcodec/libx264: add me_method alias to set X264Context->motion_estJames Almer2017-10-23
| | | | | | | | | | | | | | | | | | Replaces the now dropped global option. Addresses ticket #6771. Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* | avcodec/libx264: fix forced_idr logicTimo Rothenpieler2016-11-22
| | | | | | | | | | | | | | | | Currently, it forces IDR frames for both true and false. Not entirely sure what the original idea behind the tri-state bool option is. Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
* | lavc: Enable a53cc by default for x264 and qsv_h264.Carl Eugen Hoyos2016-09-14
| |