summaryrefslogtreecommitdiffstats
path: root/libavcodec/decode.c
Commit message (Collapse)AuthorAgeFilesLines
* avcodec/decode: Also consider channels in max_samples checkMichael Niedermayer2019-11-091-1/+1
| | | | | | | | Fixes: Timeout (109sec -> 0.6sec) Fixes: 18309/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_INTERPLAY_ACM_fuzzer-6226598168100864 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/decode: fix indentationJun Zhao2019-10-061-1/+1
| | | | | | | | fix indentation. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Reviewed-by: Gyan Doshi <ffmpeg@gyani.pro> Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
* avcodec/decode: Check max_samples in get_buffer_internal()Michael Niedermayer2019-09-251-0/+5
| | | | | | This checks max_samples at the same level as max_pixels Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/decode: add a flags parameter to ff_reget_buffer()James Almer2019-09-041-4/+4
| | | | | | | | | | Some decoders may not need a writable buffer in some specific cases, but only a reference to the existing buffer with updated frame properties instead, for the purpose of returning duplicate frames. For this, the FF_REGET_BUFFER_FLAG_READONLY flag is added, which will prevent potential allocations and buffer copies when they are not needed. Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec: remove some dead assignmentsMarton Balint2019-08-221-1/+0
| | | | Signed-off-by: Marton Balint <cus@passwd.hu>
* avcodec: add AV_CODEC_FLAG_DROPCHANGED to flagsGyan Doshi2019-04-201-1/+46
| | | | Discard decoded frames which differ from first decoded frame in stream.
* lavc/decode: Initialize return value for get_format() failure.Carl Eugen Hoyos2018-12-101-0/+1
| | | | | Silences a warning: libavcodec/decode.c:1378:13: warning: variable 'ret' is used uninitialized whenever 'if' condition is true
* lavc/decode: Fix the error number report if av_image_fill_pointers fail.Jun Zhao2018-10-301-1/+1
| | | | | | | | | | -1 will be map to error number "EPERM", and will be map to the error message like "Error while decoding stream #0:0: Operation not permitted", it's a strange error message when debug update_frame_pool fail, now only return the error code from av_image_fill_pointers in case of av_image_fill_pointers failure. Signed-off-by: Jun Zhao <mypopydev@gmail.com>
* Revert "avcodec/decode: copy the output parameters from the last bsf in the ↵James Almer2018-10-241-4/+0
| | | | | | | | | | | | | | | | | | | chain back to the AVCodecContext" This reverts commit f631c328e680a3dd491936b92f69970c20cdcfc7. The avcodec_parameters_to_context() call was freeing and reallocating AVCodecContext->extradata, essentially taking ownership of it, which according to the doxy is user owned. This is an API break and has produced crashes in some library users like Firefox[1]. Revert until a better solution is found to internally propagate the filtered extradata back into the decoder context, or a decision is made to change the API. [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1486080 Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/decode: copy the output parameters from the last bsf in the chain ↵James Almer2018-08-161-0/+4
| | | | | | | | | back to the AVCodecContext Certain AVCodecParameters, like the contents of the extradata, may be changed by the init() function of any of the bitstream filters in the chain. Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/decode: flush the internal bsfs instead of constantly reinitalizing themJames Almer2018-08-161-10/+10
| | | | | | | Initialize the bsfs once when opening the codec and uninitialize them once when closing it, instead of at every codec flush/seek. Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec: parse options from AVCodec.bsfsAman Gupta2018-07-191-7/+42
| | | | | | | | | Fixes a bug that would prevent using multiple comma-separated filters, and allows options to be passed to each filter. Based on similar loop in ffmpeg_opt.c's new_output_stream(). Signed-off-by: Aman Gupta <aman@tmm1.net>
* avcodec/decode: Consider STRIDE_ALIGN in get_buffer_internal() when checking ↵Michael Niedermayer2018-06-151-1/+1
| | | | | | | | | | | | width STRIDE_ALIGN is not known in libavutil so av_image_check_size* cannot consider it Fixes: OOM Fixes: 8291/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_SNOW_fuzzer-5176528009691136 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
* avcodec/decode: fix warning when decoding pseudo paletted formatswm42018-04-051-0/+2
| | | | | | The pseudo palette allocation is optional now. But if it's still allocated (like the internal get_buffer2 implementation does, for compatibility), it shouldn't print a warning.
* avutil/pixdesc: deprecate AV_PIX_FMT_FLAG_PSEUDOPALwm42018-04-031-4/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PSEUDOPAL pixel formats are not paletted, but carried a palette with the intention of allowing code to treat unpaletted formats as paletted. The palette simply mapped the byte values to the resulting RGB values, making it some sort of LUT for RGB conversion. It was used for 1 byte formats only: RGB4_BYTE, BGR4_BYTE, RGB8, BGR8, GRAY8. The first 4 are awfully obscure, used only by some ancient bitmap formats. The last one, GRAY8, is more common, but its treatment is grossly incorrect. It considers full range GRAY8 only, so GRAY8 coming from typical Y video planes was not mapped to the correct RGB values. This cannot be fixed, because AVFrame.color_range can be freely changed at runtime, and there is nothing to ensure the pseudo palette is updated. Also, nothing actually used the PSEUDOPAL palette data, except xwdenc (trivially changed in the previous commit). All other code had to treat it as a special case, just to ignore or to propagate palette data. In conclusion, this was just a very strange old mechnaism that has no real justification to exist anymore (although it may have been nice and useful in the past). Now it's an artifact that makes the API harder to use: API users who allocate their own pixel data have to be aware that they need to allocate the palette, or FFmpeg will crash on them in _some_ situations. On top of this, there was no API to allocate the pseuo palette outside of av_frame_get_buffer(). This patch not only deprecates AV_PIX_FMT_FLAG_PSEUDOPAL, but also makes the pseudo palette optional. Nothing accesses it anymore, though if it's set, it's propagated. It's still allocated and initialized for compatibility with API users that rely on this feature. But new API users do not need to allocate it. This was an explicit goal of this patch. Most changes replace AV_PIX_FMT_FLAG_PSEUDOPAL with FF_PSEUDOPAL. I first tried #ifdefing all code, but it was a mess. The FF_PSEUDOPAL macro reduces the mess, and still allows defining FF_API_PSEUDOPAL to 0. Passes FATE with FF_API_PSEUDOPAL enabled and disabled. In addition, FATE passes with FF_API_PSEUDOPAL set to 1, but with allocation functions manually changed to not allocating a palette.
* avcodec: add a subcharenc mode that disables UTF-8 checkwm42018-03-251-1/+2
| | | | | | | | This is for applications which want to explicitly check for invalid UTF-8 manually, and take actions that are better than dropping invalid subtitles silently. (It's pretty much silent because sporadic avcodec error messages are so common that you can't reasonably display them in a prominent and meaningful way in a application GUI.)
* avcodec: remove unnecessary calls to ff_init_buffer_info()James Almer2018-02-141-9/+2
| | | | | | | | And remove the function altogether while at it. It's a duplicate of another. Reviewed-by: wm4 <nfxjfg@googlemail.com> Signed-off-by: James Almer <jamrial@gmail.com>
* Merge commit 'cad739dace55e3446ef7180de688173cd19fb000'Mark Thompson2018-02-121-4/+5
|\ | | | | | | | | | | | | * commit 'cad739dace55e3446ef7180de688173cd19fb000': lavc: Add per-thread surfaces in get_hw_frame_parameters() Merged-by: Mark Thompson <sw@jkqxz.net>
| * lavc: Add per-thread surfaces in get_hw_frame_parameters()Mark Thompson2018-02-111-4/+5
| | | | | | | | | | | | | | | | This number is definitely required when frame threading is enabled, so add it here rather than forcing all users to handle it themselves. DXVA2 contained this addition in specific code as well (therefore being added twice in the internal case) - just remove it from there.
* | Merge commit '5b145290df2998a9836a93eb925289c6c8b63af0'Mark Thompson2018-02-121-0/+9
|\ \ | |/ | | | | | | | | | | * commit '5b145290df2998a9836a93eb925289c6c8b63af0': lavc: Add support for increasing hardware frame pool sizes Merged-by: Mark Thompson <sw@jkqxz.net>
| * lavc: Add support for increasing hardware frame pool sizesMark Thompson2018-02-111-0/+9
| | | | | | | | | | | | | | | | | | | | AVCodecContext.extra_hw_frames is added to the size of hardware frame pools created by libavcodec for APIs which require fixed-size pools. This allows the user to keep references to a greater number of frames after decode, which may be necessary for some use-cases. It is also added to the initial_pool_size value returned by avcodec_get_hw_frames_parameters() if a fixed-size pool is required.
| * lavc: Mark all AVHWAccel structures as constMark Thompson2017-12-191-1/+1
| |
| * lavc: Use hardware config information in ff_get_format()Mark Thompson2017-12-191-77/+204
| | | | | | | | | | | | | | | | | | | | | | This removes the dependency that hardware pixel formats previously had on AVHWAccel instances, meaning only those which actually do something need exist after this patch. Also updates avcodec_default_get_format() to be able to choose hardware formats if either a matching device has been supplied or no additional external configuration is required, and avcodec_get_hw_frames_parameters() to use the hardware config rather than searching the old hwaccel list.
| * lavc: fix hw_device_ctx operationwm42017-10-231-4/+2
| | | | | | | | | | | | | | Commit b46a77f19d accidentally broke this (requested change that was added to the patch later and which was not fully tested). Signed-off-by: Mark Thompson <sw@jkqxz.net>
* | avcodec/decode: reset codec on receiving packet after EOF in compat_decodeJames Cowgill2017-12-091-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In commit 061a0c14bb57 ("decode: restructure the core decoding code"), the deprecated avcodec_decode_* APIs were reworked so that they called into the new avcodec_send_packet / avcodec_receive_frame API. This had the side effect of prohibiting sending new packets containing data after a drain packet, but in previous versions of FFmpeg this "worked" and some applications relied on it. To restore some compatibility, reset the codec if we receive a new non-drain packet using the old API after draining has completed. While this does not give the same behaviour as the old API did, in the majority of cases it works and it does not require changes to any other part of the decoding code. Fixes ticket #6775 Signed-off-by: James Cowgill <jcowgill@debian.org> Signed-off-by: Marton Balint <cus@passwd.hu>
* | lavc: Mark all AVHWAccel structures as constMark Thompson2017-11-261-1/+1
| |
* | lavc: Use hardware config information in ff_get_format()Mark Thompson2017-11-261-80/+205
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This removes the dependency that hardware pixel formats previously had on AVHWAccel instances, meaning only those which actually do something need exist after this patch. Also updates avcodec_default_get_format() to be able to choose hardware formats if either a matching device has been supplied or no additional external configuration is required, and avcodec_get_hw_frames_parameters() to use the hardware config rather than searching the old hwaccel list. The FF_CODEC_CAP_HWACCEL_REQUIRE_CLASS mechanism is deleted because it no longer does anything (the codec already contains the pointers to the matching hwaccels).
* | Merge commit 'b46a77f19ddc4b2b5fa3187835ceb602a5244e24'James Almer2017-11-111-0/+80
|\ \ | |/ | | | | | | | | | | | | | | * commit 'b46a77f19ddc4b2b5fa3187835ceb602a5244e24': lavc: external hardware frame pool initialization Includes the fix from e724bdfffbd3c27aac53d1f32f20f105f37caef0 Merged-by: James Almer <jamrial@gmail.com>
| * lavc: external hardware frame pool initializationwm42017-10-191-0/+82
| | | | | | | | | | | | | | | | | | | | | | | | This adds a new API, which allows the API user to query the required AVHWFramesContext parameters. This also reduces code duplication across the hwaccels by introducing ff_decode_get_hw_frames_ctx(), which uses the new API function. It takes care of initializing the hw_frames_ctx if needed, and does additional error handling and API usage checking. Support for VDA and Cuvid missing. Signed-off-by: Anton Khirnov <anton@khirnov.net>
| * decode: add a per-frame private data for hwaccel useAnton Khirnov2017-07-261-0/+3
| | | | | | | | | | | | This will be useful in the CUVID hwaccel. It should also eventually replace current decoder-specific mechanisms used by various other hwaccels.
| * decode: add a mechanism for performing delayed processing on the decoded framesAnton Khirnov2017-07-261-0/+11
| | | | | | | | This will be useful in the CUVID hwaccel.
| * decode: add a method for attaching lavc-internal data to framesAnton Khirnov2017-07-261-0/+57
| | | | | | | | | | | | | | | | Use the AVFrame.opaque_ref field. The original user's opaque_ref is wrapped in the lavc struct and then unwrapped before the frame is returned to the caller. This new struct will be useful in the following commits.
| * decode: avoid leaks on failure in ff_get_buffer()Anton Khirnov2017-07-261-0/+3
| | | | | | | | | | | | | | If the get_buffer() call fails, the frame might have some side data already set. Make sure it gets freed. CC: libav-stable@libav.org
| * lavc, lavu: move frame cropping to a convenience functionwm42017-07-261-87/+2
| | | | | | | | Signed-off-by: Anton Khirnov <anton@khirnov.net>
| * hwframe: Allow hwaccel frame allocators to align surface sizesAnton Khirnov2017-06-271-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Hardware accelerated decoding generally uses AVHWFramesContext for pool allocation of hardware surfaces. These are setup to allocate surfaces aligned to hardware and hwaccel API requirements. Due to the architecture, av_hwframe_get_buffer() will return AVFrames with the dimensions set to the aligned sizes. This causes some decoders (like hevc) return these aligned size as final frame size, instead of cropping them to the video's actual dimensions. To make sure this doesn't happen, crop the frame to the size the decoder expects when ff_get_buffer() is called. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
| * lavc: set avctx->hwaccel before initwm42017-06-081-2/+2
| | | | | | | | | | | | | | | | | | So a hwaccel can access avctx->hwaccel in init for whatever reason. This is for the new d3d hwaccel API. We could create separate entrypoints for each of the 3 hwaccel types (dxva2, d3d11va, new d3d11va), but this seems nicer. Signed-off-by: Diego Biurrun <diego@biurrun.de>
| * decode: fix the code reducing cropping to preserve alignmentAnton Khirnov2017-05-201-1/+7
| | | | | | | | | | | | Currently it does not work at all. Bug-Id: 1058
| * decode: Initialize ret before using itVittorio Giovara2017-04-101-1/+1
| | | | | | | | | | libavcodec/decode.c:608:9: warning: variable 'ret' is used uninitialized whenever 'if' condition is false
| * lavc: Drop deprecated time_base variable for decodingVittorio Giovara2017-03-231-5/+0
| | | | | | | | Deprecated in 10/2015.
* | avcodec/decode: always free private_refTimo Rothenpieler2017-11-111-3/+3
| | | | | | | | | | | | There is no reason to keep this intact when decoding failed, specially as private_ref is supposed to always be NULL when a frame is returned to the user.
* | avcodec/decode: add missing \n to log messagewm42017-11-101-1/+1
| |
* | avcodec: allow multiple hwaccels for the same codec/pixfmtwm42017-11-101-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, AVHWAccels are looked up using a (codec_id, pixfmt) tuple. This means it's impossible to have 2 decoders for the same codec and using the same opaque hardware pixel format. This breaks merging Libav's CUVID hwaccel. FFmpeg has its own CUVID support, but it's a full stream decoder, using NVIDIA's codec parser. The Libav one is a true hwaccel, which is based on the builtin software decoders. Fix this by introducing another field to disambiguate AVHWAccels, and use it for our CUVID decoders. FF_CODEC_CAP_HWACCEL_REQUIRE_CLASS makes this mechanism backwards compatible and optional.
* | decode: add a per-frame private data for hwaccel useAnton Khirnov2017-11-101-0/+3
| | | | | | | | | | | | | | | | This will be useful in the CUVID hwaccel. It should also eventually replace current decoder-specific mechanisms used by various other hwaccels. Merges Libav commit 704311b2946d74a80f65906961cd9baaa18683a3.
* | decode: add a mechanism for performing delayed processing on the decoded framesAnton Khirnov2017-11-101-0/+15
| | | | | | | | | | | | This will be useful in the CUVID hwaccel. Merges Libav commit badf0951f54c1332e77455dc40398f3512540c1b.
* | decode: add a method for attaching lavc-internal data to framesAnton Khirnov2017-11-101-2/+49
| | | | | | | | | | | | | | | | Use the AVFrame.private_ref field. This new struct will be useful in the following commits. Merges Libav commit 359a8a3e2d1194b52b6c386f94fd0929567dfb67.
* | decode: avoid leaks on failure in ff_get_buffer()Anton Khirnov2017-10-291-0/+3
| | | | | | | | | | | | | | | | | | If the get_buffer() call fails, the frame might have some side data already set. Make sure it gets freed. Merges Libav commit de77671438c24ffea93398c8dc885d4dd04477de. Signed-off-by: James Almer <jamrial@gmail.com>
* | avcodec: remove ABI portion of the side data merging APIJames Almer2017-10-221-62/+6
| | | | | | | | | | | | The actual API is left in place until the deprecation period ends. Signed-off-by: James Almer <jamrial@gmail.com>
* | Merge commit '7b917041184874e7d7cba4450813de7e0bb28a33'James Almer2017-10-211-4/+0
|\ \ | |/ | | | | | | | | | | * commit '7b917041184874e7d7cba4450813de7e0bb28a33': lavc: Drop deprecated VDPAU codec capability Merged-by: James Almer <jamrial@gmail.com>
* | avcodec/decode: Pass on the Closed Captions Side DataKarthick J2017-09-281-0/+1
| | | | | | | | | | Signed-off-by: Karthick J <kjeyapal@akamai.com> Signed-off-by: Marton Balint <cus@passwd.hu>
* | avcodec: add AV_HWACCEL_CODEC_CAP_EXPERIMENTAL flagJames Almer2017-09-041-1/+1
| | | | | | | | | | | | | | | | This flag replaces the deprecated, non-prefixed HWACCEL_CODEC_CAP_EXPERIMENTAL one. Reviewed-by: Michael Niedermayer <michael@niedermayer.cc> Signed-off-by: James Almer <jamrial@gmail.com>
OpenPOWER on IntegriCloud