Go to file
Andreas Rheinhardt 0ba058579f avcodec/vp9: Fix race when attaching side-data for show-existing frame
When outputting a show-existing frame, the VP9 decoder simply
created a reference to said frame and returned it immediately to
the caller, without waiting for it to have finished decoding.
In case of frame-threading it is possible for the frame to
only be decoded while it was waiting to be output.
This is normally benign.

But there is one case where it is not: If the user wants
video encoding parameters to be exported, said side data
will only be attached to the src AVFrame at the end of
decoding the frame that is actually being shown. Without
synchronisation adding said side data in the decoder thread
and the reads in av_frame_ref() in the output thread
constitute a data race. This happens e.g. when using the
venc_data_dump tool with vp90-2-10-show-existing-frame.webm
from the FATE-suite.

Fix this by actually waiting for the frame to be output.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2024-04-19 13:18:04 +02:00
compat avutil/common: Don't auto-include mem.h 2024-03-31 00:08:43 +01:00
doc doc/muxers: add mmf 2024-04-19 09:00:59 +02:00
ffbuild ffbuild/libversion.sh: add shebang 2024-04-09 15:34:53 +02:00
fftools fftools/ffmpeg_filter: implement filtergraph chaining 2024-04-09 10:34:18 +02:00
libavcodec avcodec/vp9: Fix race when attaching side-data for show-existing frame 2024-04-19 13:18:04 +02:00
libavdevice avutil/common: Don't auto-include mem.h 2024-03-31 00:08:43 +01:00
libavfilter lavfi/tonemap_vaapi: Add support for HDR to HDR tone mapping 2024-04-18 14:43:07 +08:00
libavformat lavf/matroskaenc: apply consistent style to options descriptions 2024-04-19 08:44:20 +02:00
libavutil avutil/frame: remove comment about avcodec_get_frame_class() 2024-04-18 12:24:43 -03:00
libpostproc avutil/common: Don't auto-include mem.h 2024-03-31 00:08:43 +01:00
libswresample avutil/common: Don't auto-include mem.h 2024-03-31 00:08:43 +01:00
libswscale swscale: [LA] Optimize swscale funcs in input.c 2024-04-11 23:53:59 +02:00
presets
tests avutil/frame: add a flag to allow overwritting existing entries 2024-04-11 09:18:19 -03:00
tools tools/target_dec_fuzzer: Adjust threshold for RV30 2024-04-03 00:44:37 +02:00
.gitattributes lavf/assenc: normalize line endings to \n 2024-02-11 17:01:07 -08:00
.gitignore
.mailmap .mailmap: Update my mailmap entry 2024-02-23 00:17:21 +01:00
.travis.yml
Changelog Changelog: Add pad_vaapi, drawbox_vaapi entry 2024-04-18 14:43:07 +08:00
configure lavfi: Add drawbox_vaapi filter 2024-04-18 14:43:07 +08:00
CONTRIBUTING.md
COPYING.GPLv2
COPYING.GPLv3
COPYING.LGPLv2.1
COPYING.LGPLv3
CREDITS
INSTALL.md
LICENSE.md
MAINTAINERS MAINTAINERS: add myself as dvdvideo demuxer, rcwt muxer maintainer 2024-03-10 15:21:23 +01:00
Makefile tools: Add target_sws_fuzzer.c 2024-02-21 18:24:17 +01:00
README.md
RELEASE RELEASE: update after 7.0 branch 2024-04-02 13:02:39 -03:00

FFmpeg README

FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.

Libraries

  • libavcodec provides implementation of a wider range of codecs.
  • libavformat implements streaming protocols, container formats and basic I/O access.
  • libavutil includes hashers, decompressors and miscellaneous utility functions.
  • libavfilter provides means to alter decoded audio and video through a directed graph of connected filters.
  • libavdevice provides an abstraction to access capture and playback devices.
  • libswresample implements audio mixing and resampling routines.
  • libswscale implements color conversion and scaling routines.

Tools

  • ffmpeg is a command line toolbox to manipulate, convert and stream multimedia content.
  • ffplay is a minimalistic multimedia player.
  • ffprobe is a simple analysis tool to inspect multimedia content.
  • Additional small tools such as aviocat, ismindex and qt-faststart.

Documentation

The offline documentation is available in the doc/ directory.

The online documentation is available in the main website and in the wiki.

Examples

Coding examples are available in the doc/examples directory.

License

FFmpeg codebase is mainly LGPL-licensed with optional components licensed under GPL. Please refer to the LICENSE file for detailed information.

Contributing

Patches should be submitted to the ffmpeg-devel mailing list using git format-patch or git send-email. Github pull requests should be avoided because they are not part of our review process and will be ignored.