mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-05-17 06:58:45 +08:00

The MPEG-1 decoder has an update_thread_context function set, yet it was never enabled (missing AV_CODEC_CAP_FRAME_THREADS flag). So remove it and also the ff_thread_finish_setup() call as well as the progress reporting. (Simply setting the flag would not be enough. The main problems are: a) The update_thread_context function relies on memcpy'ing the whole context instead of only copying the necessary fields. This leads to data races which is undefined behaviour. (Btw: The check for whether the non-MpegEncContext fields of Mpeg1Context should be copied has been broken in 7f0efe232475d7a704924a3cb308281973e8add3.) b) Even an AVBufferRef* is simply copied, without creating a new reference. c) Copying the whole context happens only during init; when parameters change lateron, the change is not propagated to the next thread. This affects at least the quant matrix (for MPEG-1). d) The MPEG-1/2 decoders are made to decode both MPEG-1 and MPEG-2. When MPEG-2 is decoded, another complication arises: In case of coded fields, both fields can be in one AVPacket or they can be in separate AVPackets. One would need to parse enough of the data to be able to determine whether the next thread needs to start a new frame or decode the second field of the current frame; for this one would need to either postpone calling ff_thread_finish_setup() for coded slices altogether or implement some form of ff_h2645_packet_split(). One would also need a second ThreadProgress to signal progress of each field. e) One would need to reenable waiting in ff_mpv_reconstruct_mb() for MPEG-1/2 (and H.261). f) Probably lots of other stuff for invalid input that I am currently not thinking about. If this were done, nothing from the current update_thread_context would remain, so one can just nuke it altogether.) Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
…
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
andqt-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.
Languages
C
90.2%
Assembly
7.9%
Makefile
1.3%
C++
0.2%
Objective-C
0.1%
Other
0.1%