idct_arm: remove use of ff_put/add_pixels_clamped function pointer.
Instead, hardcode the use of the _arm implementation of add_pixels,
and use the C version for put_pixels (as no arm-optimized version
exists). Since there's separate implementations of idct{,_put,_add}
for neon, this has no practical impact on performance.
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)
avformat/ftp: Solve a crash bug when network occur a exception
This fixes a proble where ffmpeg would cause crash to do a seek when the network disconnect.
The log like this:
01-01 10:53:03.441 6580 6580 F DEBUG : backtrace:
01-01 10:53:03.441 6580 6580 F DEBUG : #00 pc 0002942e /system/lib/libavformat.so (ffurl_write+9)
Signed-off-by: tiejun.peng <tiejun.peng@foxmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
huffyuv: assign correct per-thread avctx pointer to HYuvContext::avctx.
Fixes the following tsan warning when running fate-vsynth_lena-ffvhuff:
WARNING: ThreadSanitizer: data race (pid=6484)
Write of size 8 at 0x7d64000154b8 by main thread (mutexes: write M1331):
#0 update_context_from_user src/libavcodec/pthread_frame.c:331 (ffmpeg+0x000000dca887)
[..]
Previous read of size 8 at 0x7d64000154b8 by thread T2 (mutexes: write M1334):
#0 draw_slice src/libavcodec/huffyuvdec.c:857 (ffmpeg+0x000000bcc86f)
Damien Riegel [Fri, 31 Mar 2017 15:36:16 +0000 (11:36 -0400)]
rtp: rfc4175: add handler for YCbCr-4:2:2
This adds partial support for the RFC 4175 (raw video over RTP). The
only supported formats are the YCbCr-4:2:2 8 bit because it's natively
supported by FFmpeg with pixel format UYVY, and 10 bit which requires
the vrawdepay codec to convert the payload in a format handled by
FFmpeg.
* commit '2dbe2aa2c2d4f02d2669feae45dee4fc45414813':
rdt: Convert to the new bitstream reader
ogg: Convert to the new bitstream reader
mpegts: Convert to the new bitstream reader
xsubdec: Convert to the new bitstream reader
xan: Convert to the new bitstream reader
wnv1: Convert to the new bitstream reader
vima: Convert to the new bitstream reader
vble: Convert to the new bitstream reader
utvideodec: Convert to the new bitstream reader
twinvq: Convert to the new bitstream reader
tscc2: Convert to the new bitstream reader
truespeech: Convert to the new bitstream reader
tiertex: Convert to the new bitstream reader
truemotion2: Convert to the new bitstream reader
svq1dec: Convert to the new bitstream reader
smacker: Convert to the new bitstream reader
sipr: Convert to the new bitstream reader
rtjpeg: Convert to the new bitstream reader
ra288: Convert to the new bitstream reader
ra144: Convert to the new bitstream reader
This merge is a noop, see
http://ffmpeg.org/pipermail/ffmpeg-devel/2017-April/209609.html
* commit '12ab667e219e7fbf8e9aef3731039b75c822df25':
matroska: use av_stream_add_side_data() for stereo3d side data
mov: Use av_stream_add_side_data() for displaymatrix side data
utils: Add av_stream_add_side_data()
* commit '6427379f23eb4d2b82d8d274c616f68b65a2f723':
als: Restructure DEBUG ifdefs to avoid unused function parameter warnings
ac3enc: Restructure DEBUG ifdefs to avoid unused function parameter warnings
ape: Restructure DEBUG ifdefs to avoid unused function parameter warnings
These 3 commits are not merged.
These commits were actually controversial in Libav. A good rationale can
be found here:
https://lists.libav.org/pipermail/libav-devel/2016-November/080698.htm
png: set AVFrame flags/fields before calling setup_finished().
Fixes tsan warnings in fate-apng:
WARNING: ThreadSanitizer: data race (pid=51230)
Read of size 4 at 0x7d50000042fc by main thread (mutexes: write M1000):
#0 frame_copy_props frame.c:302 (ffmpeg:x86_64+0x1019a35d6)
[..]
Previous write of size 4 at 0x7d50000042fc by thread T1 (mutexes: write M997):
#0 decode_idat_chunk pngdec.c:708 (ffmpeg:x86_64+0x100f5562a)
* commit '0b5a26e8bcd219efe5da3a6d39b588fabf91f2b9': (35 commits)
qdm2: Convert to the new bitstream reader
qcelp: Convert to the new bitstream reader
pcx: Convert to the new bitstream reader
opus: Convert to the new bitstream reader
nellymoser: Convert to the new bitstream reader
jvdec: Convert to the new bitstream reader
hqx: Convert to the new bitstream header
hq_hqa: Convert to the new bitstream reader
gsm: Convert to the new bitstream reader
g72x: Convert to the new bitstream reader
g2meet: Convert to the new bitstream reader
fraps: Convert to the new bitstream reader
flashsv: Convert to the new bitstream reader
faxcompr: Convert to the new bitstream reader
exr: Convert to the new bitstream reader
escape130: Convert to the new bitstream reader
escape124: Convert to the new bitstream reader
dvdsubdec: Convert to the new bitstream reader
dss_sp: Convert to the new bitstream reader
cook: Convert to the new bitstream reader
...
This merge is a noop, see
http://ffmpeg.org/pipermail/ffmpeg-devel/2017-April/209609.html
png: split header state and data state in two separate variables.
Fixes a reported (but false) race condition in tsan for fate-apng:
WARNING: ThreadSanitizer: data race (pid=6274)
Read of size 4 at 0x7d680001ec78 by main thread (mutexes: write M1338):
#0 update_thread_context src/libavcodec/pngdec.c:1456 (ffmpeg+0x000000dacf0c)
[..]
Previous write of size 4 at 0x7d680001ec78 by thread T1 (mutexes: write M1335):
#0 decode_idat_chunk src/libavcodec/pngdec.c:737 (ffmpeg+0x000000dae951)
hevc: only write to max_ra and pocTid0 in the first slice.
Values from subsequent values are guaranteed to be identical (since
poc and nal_unit_type are checked to be the same between slices), so
this doesn't affect output in any way, but does resolve the remaining
reported race conditions (by tsan) in fate-hevc.
In practice, this fixes tsan warnings like this:
WARNING: ThreadSanitizer: data race (pid=25334)
Read of size 4 at 0x7d9c0001adcc by main thread (mutexes: write M1386):
#0 hevc_update_thread_context src/libavcodec/hevcdec.c:3310 (ffmpeg+0x000000b41c7c)
[..]
Previous write of size 4 at 0x7d9c0001adcc by thread T1 (mutexes: write M1383):
#0 hls_slice_header src/libavcodec/hevcdec.c:596 (ffmpeg+0x000000b43a22)
pthread_frame: call update_context_from_user() after acquiring lock.
Otherwise the thread may still be in the middle of decoding a previous
frame, which would effectively trigger a race condition on any field
concurrently read and written.
In practice, this fixes tsan warnings like the following:
WARNING: ThreadSanitizer: data race (pid=17380)
Write of size 4 at 0x7d64000160fc by main thread:
#0 update_context_from_user src/libavcodec/pthread_frame.c:335 (ffmpeg+0x000000dca515)
[..]
Previous read of size 4 at 0x7d64000160fc by thread T2 (mutexes: write M1821):
#0 ff_thread_report_progress src/libavcodec/pthread_frame.c:565 (ffmpeg+0x000000dcb08a)
Ronald S. Bultje [Fri, 31 Mar 2017 15:27:20 +0000 (11:27 -0400)]
ffmpeg: make transcode_init_done atomic.
Should fix tsan warnings in fate-fifo-muxer-h264/wav:
WARNING: ThreadSanitizer: data race (pid=26552)
Write of size 4 at 0x000001e0d7c0 by main thread:
#0 transcode_init src/ffmpeg.c:3761 (ffmpeg+0x00000050ca1c)
[..]
Previous read of size 4 at 0x000001e0d7c0 by thread T1:
#0 decode_interrupt_cb src/ffmpeg.c:460 (ffmpeg+0x0000004fde19)
codec_desc: mark some lossless audio codecs as intraonly.
Fixes tsan warnings in several audio codecs (flac, alac, wavpack, tta
and tak) that look like this:
WARNING: ThreadSanitizer: data race (pid=14340)
Read of size 4 at 0x7d64000169d8 by main thread (mutexes: write M1335):
#0 update_context_from_thread src/libavcodec/pthread_frame.c:284 (ffmpeg+0x000000dc795f)
[..]
Previous write of size 4 at 0x7d64000169d8 by thread T1 (mutexes: write M1333):
#0 wavpack_decode_block src/libavcodec/wavpack.c:1012 (ffmpeg+0x00000112b175)
This is how the ref list manager links bitstream IDs to H264Picture/Ref
objects, and is local to the producer thread. There is no need for the
consumer thread to know the bitstream IDs of its references in their
respective producer threads.
In practice, this fixes tsan warnings when running fate-h264:
WARNING: ThreadSanitizer: data race (pid=19295)
Read of size 4 at 0x7dbc0000e614 by main thread (mutexes: write M1914):
#0 ff_h264_ref_picture src/libavcodec/h264_picture.c:112 (ffmpeg+0x0000013b3709)
[..]
Previous write of size 4 at 0x7dbc0000e614 by thread T2 (mutexes: write M1917):
#0 build_def_list src/libavcodec/h264_refs.c:91 (ffmpeg+0x0000013b46cf)