ffmpeg.git
23 min agoavcodec/aacdec_template: add support for 22.2 / channel_config 13 master
Jan Ekström [Sat, 13 Jun 2020 12:05:30 +0000 (15:05 +0300)]
avcodec/aacdec_template: add support for 22.2 / channel_config 13

23 min agoavcodec/aacdec_template: mark second LFE element as LFE2
Jan Ekström [Sat, 13 Jun 2020 11:34:44 +0000 (14:34 +0300)]
avcodec/aacdec_template: mark second LFE element as LFE2

We now have the capability to do this.

23 min agoavcodec/aacdectab: add mapping for 22.2
Jan Ekström [Wed, 10 Jun 2020 22:49:07 +0000 (01:49 +0300)]
avcodec/aacdectab: add mapping for 22.2

Utilizes the newly added 22.2 channel layout for channel_layout 13.

23 min agoavcodec/mpeg4audio: add newer channel_coding mappings
Jan Ekström [Wed, 10 Jun 2020 21:07:15 +0000 (00:07 +0300)]
avcodec/mpeg4audio: add newer channel_coding mappings

Additionally, add comments regarding their definitions. Based on
ARIB STD-B32, which bases on 14496-3:2009 and 14496-3:2009/AMD4.

23 min agoswresample/rematrix: treat 22.2 as 5.1 (back) when mixing
Jan Ekström [Fri, 31 Jul 2020 22:55:39 +0000 (01:55 +0300)]
swresample/rematrix: treat 22.2 as 5.1 (back) when mixing

Only this sub-set of channels actually follows the bit mask order
in the official 22.2 channel mapping. Additionally, the 5.1 channels
are there for backwards compatibility with the previous system.

This enables the utilization of 22.2 content until a proper down/up
matrix is added into swresample.

23 min agoswresample/matrix: switch internal clean_layout function to not drop high bits
Jan Ekström [Fri, 31 Jul 2020 22:52:08 +0000 (01:52 +0300)]
swresample/matrix: switch internal clean_layout function to not drop high bits

These bits are utilized by channel layouts such as 22.2. If those
are dropped, the returned channel layout is no longer a match
against the AV_CH_LAYOUT define when returned from this function.

23 min agoavutil/channel_layout: add 22.2 layout
Jan Ekström [Thu, 11 Jun 2020 19:08:30 +0000 (22:08 +0300)]
avutil/channel_layout: add 22.2 layout

Requires some extraneous top side and bottom front channels to be
defined.

According to STD-B59v2, the defined channel layout is:
- FL
- FR
- FC
- LFE1
- BL
- BR
- FLc
- FRc
- BC
- LFE2
- SiL
- SiR
- TpFL
- TpFR
- TpFC
- TpC
- TpBL
- TpBR
- TpSiL
- TpSiR
- TpBC
- BtFC
- BtFL
- BtFR

49 min agotest: hlsenc: Use unique init/segment file names for the fmp4_ac3 test
Martin Storsjö [Sat, 1 Aug 2020 21:28:18 +0000 (00:28 +0300)]
test: hlsenc: Use unique init/segment file names for the fmp4_ac3 test

Previously, the hls-fmp4 and hls-fmp4_ac3 tests used the same file
names for init and segment files, which occasionally could cause
corruption and failed tests, if the input files for both tests are
generated in parallel, as they could overwrite each other.

This happened to work some of the time, as the fmp4_ac3 test actually
only checked the init segment file (which the fmp4 test case never
wrote, due to using the incorrect hls_segment_type option) and the
fmp4 test case always regenerated the input files due to mismatched
target and file names.

Signed-off-by: Martin Storsjö <martin@martin.st>
49 min agotest: hlsenc: Make the hls_fmp4 sample file name match the target
Martin Storsjö [Sat, 1 Aug 2020 21:20:27 +0000 (00:20 +0300)]
test: hlsenc: Make the hls_fmp4 sample file name match the target

Previously, with the file name not matching the target, the files
were regenerated every time fate is rerun - contrary to the other
test targets in the same file. (While regenerating it every time
might be desireable, as that's what the test is about, the file
at least has a dependency on the ffmpeg executable, making them
regenerated every time the executable is updated - and this change
at least makes it consistent with the rest.)

Signed-off-by: Martin Storsjö <martin@martin.st>
56 min agoavcodec/cfhd: correct 71 tag usage
Paul B Mahol [Mon, 3 Aug 2020 20:41:45 +0000 (22:41 +0200)]
avcodec/cfhd: correct 71 tag usage

It stores input format and never codebook.

79 min agoavcodec/cfhdenc: fix setting default compression level
Paul B Mahol [Mon, 3 Aug 2020 20:18:47 +0000 (22:18 +0200)]
avcodec/cfhdenc: fix setting default compression level

79 min agoavcodec/cfhdenc: extend quantization table
Paul B Mahol [Mon, 3 Aug 2020 20:14:14 +0000 (22:14 +0200)]
avcodec/cfhdenc: extend quantization table

Should give better quality.

79 min agoavcodec/cfhd: use LUT for 9 and 18 codebook decompanding
Paul B Mahol [Mon, 3 Aug 2020 07:33:36 +0000 (09:33 +0200)]
avcodec/cfhd: use LUT for 9 and 18 codebook decompanding

Also fix codebook 9 decompanding, fixing artifact with codebook 9
samples. Reused Gagandeep Singh patch.

4 hours agoavcodec/cfhdenc: fix PrescaleTable for YUV422P10
Paul B Mahol [Mon, 3 Aug 2020 17:31:31 +0000 (19:31 +0200)]
avcodec/cfhdenc: fix PrescaleTable for YUV422P10

7 hours agoavcodec/mpegaudiodec_template: disable CRC checking for layers 1 and 2
James Almer [Mon, 3 Aug 2020 13:40:10 +0000 (10:40 -0300)]
avcodec/mpegaudiodec_template: disable CRC checking for layers 1 and 2

Layers 1 and 2 use lengths in bits which are not a multiple of 8,
and our CRC works on a per-byte basis.

Based on b48397e7b8

Reviewed-by: Lynne <dev@lynne.ee>
Signed-off-by: James Almer <jamrial@gmail.com>
8 hours agoRevert "mpegaudiodec_template: disable CRC checking for layers 1 and 2"
James Almer [Mon, 3 Aug 2020 13:27:21 +0000 (10:27 -0300)]
Revert "mpegaudiodec_template: disable CRC checking for layers 1 and 2"

This reverts commit b48397e7b84864f2d4c70361a4c4bed93e826753.

The change did not disable crc checks for layer 1 & 2, it removed reading
the CRC field.

Fixes decoding some mp2 samples and FATE test failures.

Signed-off-by: James Almer <jamrial@gmail.com>
8 hours agofate/aac: add missing bitexact flag to some encoder tests
James Almer [Sun, 2 Aug 2020 23:38:58 +0000 (20:38 -0300)]
fate/aac: add missing bitexact flag to some encoder tests

Will prevet FATE from breaking once LIBAVCODEC_VERSION_MINOR is bumped to 100.

Reported-by: zane
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
24 hours agompegaudiodec_template: disable CRC checking for layers 1 and 2
Lynne [Sun, 2 Aug 2020 20:45:00 +0000 (22:45 +0200)]
mpegaudiodec_template: disable CRC checking for layers 1 and 2

Layers 1 and 2 use lengths in bits which are not a multiple of 8,
and our CRC works on a per-byte basis.

24 hours agohwcontext_vulkan: remove plane size alignment checks when host importing
Lynne [Mon, 20 Jul 2020 12:36:47 +0000 (12:36 +0000)]
hwcontext_vulkan: remove plane size alignment checks when host importing

The process space is guaranteed to be aligned to the page size, hence we're
never going to map outside of our address space.
There are more optimizations to do with respect to chroma plane alignment and
buffer offsets, but that can be done later.

27 hours agoavcodec/v4l2_m2m: reindent after last commit
Andriy Gelman [Sun, 2 Aug 2020 18:36:04 +0000 (14:36 -0400)]
avcodec/v4l2_m2m: reindent after last commit

Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
27 hours agoavcodec/v4l2_m2m: adapt to call close() on init fail
Andriy Gelman [Sun, 2 Aug 2020 18:31:22 +0000 (14:31 -0400)]
avcodec/v4l2_m2m: adapt to call close() on init fail

This fixes several mem leaks when init of encoder/decoder failed.

Fixes ticket #8285

Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
38 hours agoavcodec/cfhd: set correct bits_per_raw_sample
Paul B Mahol [Sun, 2 Aug 2020 06:39:37 +0000 (08:39 +0200)]
avcodec/cfhd: set correct bits_per_raw_sample

38 hours agoavcodec/cfhd: add more tag names
Paul B Mahol [Sat, 1 Aug 2020 09:08:34 +0000 (11:08 +0200)]
avcodec/cfhd: add more tag names

38 hours agoavcodec: add CFHD encoder
Paul B Mahol [Sat, 25 Jul 2020 16:18:18 +0000 (18:18 +0200)]
avcodec: add CFHD encoder

38 hours agoavcodec/cfhd: improve decompanding quality with reference implementation
Paul B Mahol [Sat, 1 Aug 2020 08:47:07 +0000 (10:47 +0200)]
avcodec/cfhd: improve decompanding quality with reference implementation

38 hours agoavcodec/cfhd: fix non-aligned to 8 height decoding
Paul B Mahol [Fri, 31 Jul 2020 07:42:47 +0000 (09:42 +0200)]
avcodec/cfhd: fix non-aligned to 8 height decoding

38 hours agoavcodec/cfhd: move if/else out of loop in inverse transform
Paul B Mahol [Wed, 29 Jul 2020 08:01:35 +0000 (10:01 +0200)]
avcodec/cfhd: move if/else out of loop in inverse transform

42 hours agolavc/libkvazaar: fix framerate setting
Jun Zhao [Sun, 26 Jul 2020 10:51:19 +0000 (18:51 +0800)]
lavc/libkvazaar: fix framerate setting

fix framerate setting.

Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
2 days agoavcodec/g723_1enc: Avoid skip_put_bits()
Andreas Rheinhardt [Fri, 31 Jul 2020 08:45:48 +0000 (10:45 +0200)]
avcodec/g723_1enc: Avoid skip_put_bits()

If a bit is reserved, it matters very much what value it has, because
otherwise a decoder conforming to a future version of the standard might
interpret the output file in an unintended manner. This implies that
one must not use skip_put_bits() for it (which does not give any
guarantees wrt what ends up in the output (in case of a little-endian
bitstream writer (as here) it writes a 0 bit)); given that the reference
encoder as well as the earlier code write a zero bit at this place, the
new code does, too.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2 days agoavcodec, avfilter, avformat: Remove redundant avpriv_align_put_bits
Andreas Rheinhardt [Thu, 30 Jul 2020 19:44:51 +0000 (21:44 +0200)]
avcodec, avfilter, avformat: Remove redundant avpriv_align_put_bits

flush_put_bits() already fills the bitstream with zeroes, so it is
unnecessary to align the bitstream before.

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2 days agovaapi_encode: Delete unused field
Mark Thompson [Tue, 28 Jul 2020 22:50:23 +0000 (23:50 +0100)]
vaapi_encode: Delete unused field

2 days agovaapi_encode_h265: Don't require uniform_spacing_flag
Mark Thompson [Tue, 28 Jul 2020 22:50:22 +0000 (23:50 +0100)]
vaapi_encode_h265: Don't require uniform_spacing_flag

Though still use it if the tile arrangement matches.  Also try to keep the
fields in the same order as the standard.

2 days agovaapi_encode_h265: Fix ordering of tile dimensions
Mark Thompson [Tue, 28 Jul 2020 22:50:21 +0000 (23:50 +0100)]
vaapi_encode_h265: Fix ordering of tile dimensions

Dimensions are normally specified as width x height, and this will match
the same option to libaom-av1.

Remove the indirection through the private context at the same time.

2 days agovaapi_encode_h265: Remove confusing and redundant tile options
Mark Thompson [Tue, 28 Jul 2020 22:50:20 +0000 (23:50 +0100)]
vaapi_encode_h265: Remove confusing and redundant tile options

The tile_rows/cols options currently do a confusingly different thing to
the options of the same name on other encoders like libvpx and libaom.
There is no backward-compatibility reason to implement the log2 behaviour
as there was for libaom, so just get rid of them entirely.

3 days agolibsvtav1: Fix the documentation to match the actual options
Mark Thompson [Thu, 30 Jul 2020 21:32:00 +0000 (22:32 +0100)]
libsvtav1: Fix the documentation to match the actual options

3 days agolibsvtav1: Use _ rather than - in options
Mark Thompson [Thu, 30 Jul 2020 21:31:59 +0000 (22:31 +0100)]
libsvtav1: Use _ rather than - in options

3 days agolibsvtav1: Rename without a _
Mark Thompson [Thu, 30 Jul 2020 21:31:58 +0000 (22:31 +0100)]
libsvtav1: Rename without a _

The external library is called libsvtav1, so use this name everywhere.

3 days agotests/imgutils: test the output of av_image_fill_* functions
James Almer [Sat, 25 Jul 2020 03:10:38 +0000 (00:10 -0300)]
tests/imgutils: test the output of av_image_fill_* functions

Signed-off-by: James Almer <jamrial@gmail.com>
4 days agoavformat/apm: fix APM_FILE_HEADER_SIZE value
Zane van Iperen [Wed, 29 Jul 2020 12:06:50 +0000 (22:06 +1000)]
avformat/apm: fix APM_FILE_HEADER_SIZE value

Value was incorrectly changed in 3bf1be210150b435c51c7c8eb8fd05a1fca08814.

Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
4 days agoavcodec/options_table: make AVCodecContext->level search for child constants
James Almer [Wed, 29 Jul 2020 22:08:17 +0000 (19:08 -0300)]
avcodec/options_table: make AVCodecContext->level search for child constants

This change makes it possible for child encoders to define custom level
option names which can be used for setting the AVCodecContext->level.

Based on 337fe4bcc2

Reviewed-by: jkqxz
Signed-off-by: James Almer <jamrial@gmail.com>
4 days agolibavcodec/pgxdec Fix pix format selection error
Gautam Ramakrishnan [Wed, 29 Jul 2020 15:49:11 +0000 (21:19 +0530)]
libavcodec/pgxdec Fix pix format selection error

This patch makes the pgx decoder select the correct
byte order instead of selecting big endian format for
16 bit images.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agolibavcodec/j2kenc: Encoding up to 16 bits
Gautam Ramakrishnan [Wed, 29 Jul 2020 15:49:10 +0000 (21:19 +0530)]
libavcodec/j2kenc: Encoding up to 16 bits

This patch allows the JPEG2000 encoder to
encode images to up to 16 bits.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agoavcodec/mips: Fix segfault in imdct36_mips_float.
Shiyou Yin [Wed, 29 Jul 2020 10:11:01 +0000 (18:11 +0800)]
avcodec/mips: Fix segfault in imdct36_mips_float.

'li.s' is a synthesized instruction, it does not work properly
when compiled with clang on mips, and A segfault occurred.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agoavcodec/mips/cabac: Fix a bug in get_cabac_inline_mips.
Shiyou Yin [Wed, 29 Jul 2020 10:11:00 +0000 (18:11 +0800)]
avcodec/mips/cabac: Fix a bug in get_cabac_inline_mips.

Failed fate case: fate-h264-conformance-caba2_sony_e
Clang is more strict in the use of register constraint.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agoavutil/mips/generic_macros_msa: Fix prob that 'ulw' and 'uld' unsupported by clang.
Shiyou Yin [Wed, 29 Jul 2020 10:10:59 +0000 (18:10 +0800)]
avutil/mips/generic_macros_msa: Fix prob that 'ulw' and 'uld' unsupported by clang.

GCC support these two synthesized instruction, but clang does not yet.
Use machine instruction instead to adapt clang compiler.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agoavcodec/mips: Fix register constraint error reported by clang.
Shiyou Yin [Wed, 29 Jul 2020 10:10:58 +0000 (18:10 +0800)]
avcodec/mips: Fix register constraint error reported by clang.

Clang report following error in aacsbr_mips.c,ac3dsp_mips.c and aacdec_mips.c:
"couldn't allocate output register for constraint 'r'"

Use 'f' constraint for float variable.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
5 days agoavformat/hlsenc: increase initial program date time precision
Marton Balint [Sat, 18 Jul 2020 21:57:42 +0000 (23:57 +0200)]
avformat/hlsenc: increase initial program date time precision

Also query time only once, not for every variant stream, otherwise variant
streams might get a slightly different initial program date time. And we can
set this unconditionally because HLS_PROGRAM_DATE_TIME flag is checked
elsewhere.

Signed-off-by: Marton Balint <cus@passwd.hu>
5 days agofftools/ffmpeg: make specifying thread_queue_size turn on threaded input
Marton Balint [Sat, 4 Jul 2020 21:43:12 +0000 (23:43 +0200)]
fftools/ffmpeg: make specifying thread_queue_size turn on threaded input

Threaded input can increase smoothness of e.g. x11grab significantly. Before
this patch, in order to activate threaded input the user had to specify a
"dummy" additional input, with this change it is no longer required.

Signed-off-by: Marton Balint <cus@passwd.hu>
5 days agoavcodec/libsvt_av1: remove forced-idr option
Lynne [Wed, 29 Jul 2020 20:38:44 +0000 (22:38 +0200)]
avcodec/libsvt_av1: remove forced-idr option

This option is directly copy-pasted from the SVT1-HEVC wrapper and has
no place in the options for an AV1 encoder.

AV1 has no H.264/5 IDR frames nor anything like them.
All this option does is change all real keyframes to an intra-only
AV1 frame, which is not seekable. Hence, any streams encoded with
this option enabled will not be seekable.

5 days agoavcodec: Add an SVT-AV1 encoder wrapper
Daryl Seah [Fri, 18 Jan 2019 02:11:38 +0000 (02:11 +0000)]
avcodec: Add an SVT-AV1 encoder wrapper

Signed-off-by: Daryl Seah <daryl.seah@intel.com>
Signed-off-by: Jing SUN <jing.a.sun@intel.com>
Signed-off-by: ZhiZhen Tang <zhizhen.tang@intel.com>
Signed-off-by: Zhong Li <zhong.li@intel.com>
Signed-off-by: Xu Guangxin <guangxin.xu@intel.com>
Signed-off-by: James Almer <jamrial@gmail.com>
5 days agoavcodec/cavsdec, h264*, hevc_parser: Use get_ue_golomb_31 where possible
Andreas Rheinhardt [Tue, 14 Jul 2020 13:20:09 +0000 (15:20 +0200)]
avcodec/cavsdec, h264*, hevc_parser: Use get_ue_golomb_31 where possible

instead of get_ue_golomb(). The difference between the two is that the
latter also has to take into account the case in which the read code is
more than 9 bits (four preceding zeroes + at most five value bits) long,
leading to more code.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
5 days agoavcodec/golomb: Document return value of get_ue_golomb_31 on error
Andreas Rheinhardt [Tue, 14 Jul 2020 12:59:47 +0000 (14:59 +0200)]
avcodec/golomb: Document return value of get_ue_golomb_31 on error

get_ue_golomb_31() reads nine bits and an array with 512 entries to
parse golomb codes. The longest golomb codes that fit into 9 bits use
four leading zeroes and five value bits and can encode numbers in the
0..30 range. 31 meanwhile is encoded on 11 bits and if the nine bits
read coincide with the first nine bits of the encoding of 31,
get_ue_golomb_31() returns 31 (and skips 11 bits).

But looking at the first nine bits only makes it impossible to distinguish
31 from 32..34. Therefore the documentation of get_ue_golomb_31() simply
states that the return value is undefined if the value of the encountered
exp golomb code was outside the 0..31 range.

But actually get_ue_golomb_31() does not behave that bad: If the returned
value is in the range of 0..30, then this is the actually encountered value,
so that this function can be used without any problems to parse and validate
parameters whose legal values are a subset of the 0..30 range.

This commit documents this fact.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
5 days agoavcodec/golomb: Prevent shift by negative number
Andreas Rheinhardt [Fri, 10 Jul 2020 13:12:26 +0000 (15:12 +0200)]
avcodec/golomb: Prevent shift by negative number

This happened in get_ue_golomb() if the cached bitstream reader was in
use, because there was no check to handle the case of the read value
not being in the supported range.
For consistency with the uncached bitstream reader and for compliance
with the documentation, every value not in the 0-8190 range is treated as
error although the cached bitstream reader could actually read values in
the range 0..65534 without problems.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
6 days agolibavcodec/jpeg2000dec: Support for PPM marker
Gautam Ramakrishnan [Sat, 25 Jul 2020 14:16:34 +0000 (19:46 +0530)]
libavcodec/jpeg2000dec: Support for PPM marker

This patch adds support for PPM marker for JPEG2000
decoder. It allows the samples p1_03.j2k and p1_05.j2k
to be decoded.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
6 days agoavcodec/jpeg2000dec: Move reslevelno check before use in case JPEG2000_PGOD_RPCL
Michael Niedermayer [Sun, 26 Jul 2020 17:41:30 +0000 (19:41 +0200)]
avcodec/jpeg2000dec: Move reslevelno check before use in case JPEG2000_PGOD_RPCL

Fixes: division by zero
Fixes: 24201/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_JPEG2000_fuzzer-5665813827420160
Fixes: 24245/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_JPEG2000_fuzzer-6285831682392064

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Gautam Ramakrishnan <gautamramk@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
6 days agolavc/libxavs2.c: mark key-frame packets
hwren [Mon, 27 Jul 2020 06:21:35 +0000 (14:21 +0800)]
lavc/libxavs2.c: mark key-frame packets

Signed-off-by: hwren <hwrenx@126.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
6 days agoavcodec/nvenc: fix B-Ref-Mode support check for recent HEVC
Timo Rothenpieler [Tue, 28 Jul 2020 19:44:11 +0000 (21:44 +0200)]
avcodec/nvenc: fix B-Ref-Mode support check for recent HEVC

6 days agoavcodec/golomb: Don't emit error message in get_ue_golomb
Andreas Rheinhardt [Fri, 10 Jul 2020 15:48:06 +0000 (17:48 +0200)]
avcodec/golomb: Don't emit error message in get_ue_golomb

Said error message is not very informative and lacked a proper logging
context; furthermore, many callers already provided more descriptive
error messages of their own. So just drop this one.

Suggested-by: James Almer <jamrial@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
6 days agoavformat/smacker: Don't return packets for streams with AVDISCARD_ALL
Andreas Rheinhardt [Fri, 26 Jun 2020 07:09:01 +0000 (09:09 +0200)]
avformat/smacker: Don't return packets for streams with AVDISCARD_ALL

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
6 days agoavformat/smacker: Fix duration for PCM audio
Andreas Rheinhardt [Fri, 24 Jul 2020 07:43:02 +0000 (09:43 +0200)]
avformat/smacker: Fix duration for PCM audio

For non-PCM audio, a Smacker frame contains the size of the decoded
audio in the first four bytes of the audio packet data; for PCM data,
said information would be redundant and according to [1] this field does
not exist. Therefore this commit sets the duration and timestamps
properly for PCM audio.

[1]: https://wiki.multimedia.cx/index.php/Smacker#Audio_Track_Chunk

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
6 days agoavformat/smacker: Set audio duration
Andreas Rheinhardt [Fri, 24 Jul 2020 07:33:31 +0000 (09:33 +0200)]
avformat/smacker: Set audio duration

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
6 days agoavformat/smacker: Support seeking to first frame
Timotej Lazar [Wed, 17 Jun 2020 19:45:39 +0000 (21:45 +0200)]
avformat/smacker: Support seeking to first frame

Add .read_seek function to the smacker demuxer for the special case of
seeking to ts=0. This is useful because smacker – like bink, with a
similar implementation – was mostly used to encode clips in video
games, where random seeks are rare but looping media are common.

Signed-off-by: Timotej Lazar <timotej.lazar@araneo.si>
6 days agolavf/srt: fix build fail when used the libsrt 1.4.1
Jun Zhao [Sun, 12 Jul 2020 05:48:48 +0000 (13:48 +0800)]
lavf/srt: fix build fail when used the libsrt 1.4.1

libsrt changed the:
SRTO_SMOOTHER   -> SRTO_CONGESTION
SRTO_STRICTENC  -> SRTO_ENFORCEDENCRYPTION
and removed the front of deprecated options (SRTO_SMOOTHER/SRTO_STRICTENC)
in the header, it's lead to build fail

fix #8760

Signed-off-by: Jun Zhao <barryjzhao@tencent.com>
7 days agoRevert "lavc/vaapi_encode: add EQUAL_MULTI_ROWS support for slice structure"
Mark Thompson [Mon, 27 Jul 2020 21:27:14 +0000 (22:27 +0100)]
Revert "lavc/vaapi_encode: add EQUAL_MULTI_ROWS support for slice structure"

This reverts commit 489c5db0791f39518775b12eef6d48276c17f96f.

Treating EQUAL_MULTI_ROWS in the same way as the arbitrary-size cases is
just wrong.  Consider 9 rows, 4 slices - we pick 4 slices with sizes
{ 3, 2, 2, 2 }, which EQUAL_MULTI_ROWS does not allow.  It isn't possible
to split the frame into 4 slices at all with the EQUAL_MULTI_ROWS
structure - the closest options are 3 slices with sizes { 3, 3, 3 } or 5
slices with sizes { 2, 2, 2, 2, 1 }.

7 days agohwcontext_vaapi: remove duplicate formats from sw_format list
Haihao Xiang [Fri, 24 Jul 2020 02:39:09 +0000 (10:39 +0800)]
hwcontext_vaapi: remove duplicate formats from sw_format list

hwcontext_vaapi maps different VA fourcc to the same pix_fmt for U/V
plane swap cases, however duplicate formats are not expected in sw_format
list when merging formats.

For example:
ffmpeg -loglevel debug -init_hw_device vaapi -filter_hw_device vaapi0 \
-f lavfi -i smptebars -vf \
"hwupload=derive_device=vaapi,scale_vaapi,hwdownload,format=yuv420p" \
-vframes 1 -f null -

Without this fix, an auto scaler is required for the above command
   Duplicate formats in ff_merge_formats detected
   [auto_scaler_0 @ 0x560df58f4550] Setting 'flags' to value 'bicubic'
   [auto_scaler_0 @ 0x560df58f4550] w:iw h:ih flags:'bicubic' interl:0
   [Parsed_hwupload_0 @ 0x560df58f0ec0] auto-inserting filter
   'auto_scaler_0' between the filter 'graph 0 input from stream 0:0' and
   the filter 'Parsed_hwupload_0'

Signed-off-by: Haihao Xiang <haihao.xiang@intel.com>
7 days agohwcontext_vaapi: avoid fd leak in vaapi_device_derive
Haihao Xiang [Fri, 24 Jul 2020 07:29:03 +0000 (15:29 +0800)]
hwcontext_vaapi: avoid fd leak in vaapi_device_derive

7 days agoavutil/imgutils: always zero data pointers in av_image_fill_pointers()
James Almer [Mon, 27 Jul 2020 00:50:25 +0000 (21:50 -0300)]
avutil/imgutils: always zero data pointers in av_image_fill_pointers()

This restores the relevant behavior of the function as it was before
3a8e927176.

Signed-off-by: James Almer <jamrial@gmail.com>
7 days agoavutil/imgutils: don't fill data pointers for missing planes
James Almer [Fri, 24 Jul 2020 18:04:05 +0000 (15:04 -0300)]
avutil/imgutils: don't fill data pointers for missing planes

The size for a previous plane doesn't signal the presence of another after it.
If the plane is present, av_image_fill_plane_sizes() will have returned a size
for it.

Fixes a regression since 3a8e927176.

Reported-by: Imad R. Faiad <irfaiad@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
8 days agoavformat/ape: Error out in case of EOF in the header
Michael Niedermayer [Fri, 24 Jul 2020 21:51:11 +0000 (23:51 +0200)]
avformat/ape: Error out in case of EOF in the header

Fixes: OOM
Fixes: 24375/clusterfuzz-testcase-minimized-ffmpeg_DEMUXER_fuzzer-6216862443241472

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
8 days agoavformat/segafilmenc: Avoid seek when writing header
Andreas Rheinhardt [Fri, 17 Jul 2020 10:04:03 +0000 (12:04 +0200)]
avformat/segafilmenc: Avoid seek when writing header

Up until now, the Sega FILM muxer would first write all the packet data,
then shift the data (in the muxer's write_trailer function) by the amount
necessary to write the header at the front (which entails a seek to the
front), then seek back to the beginning and actually write the header.

This commit changes this: The dynamic buffer that is used to write the
sample table (containing information about each sample in the file) is
now used to write the complete header. This is possible because the size
of everything in the header except the sample table is known in advance.
Said buffer can then be used as one of the two temporary buffers used
for shifting which also reduces the amount one has to allocate for this.
Thereby the header will be written when shifting, so that the second
seek to the beginning is unnecessary.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/segafilmenc: Don't store packet info in linked list
Andreas Rheinhardt [Fri, 17 Jul 2020 07:25:24 +0000 (09:25 +0200)]
avformat/segafilmenc: Don't store packet info in linked list

Up until now, the Sega FILM muxer would store some information about
each packet in a linked list. When writing the trailer, the information
in said linked list would be used to write a table in the file header.
Each entry in said table is 16 bytes long, but each entry of the linked
list is 32 bytes long (assuming 64 bit pointer and no padding).
Therefore it makes sense to remove the linked list and write the array
entries directly into a dynamic buffer while writing the packet (this is
possible because the table entries don't depend on any information not
available when writing the packet (the offset is not relative to the
beginning of the file, but to the end of the table). This also
simplifies writing the array at the end (there is no need to traverse a
linked list).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/segafilmenc: Simplify writing two bytes
Andreas Rheinhardt [Fri, 17 Jul 2020 07:11:53 +0000 (09:11 +0200)]
avformat/segafilmenc: Simplify writing two bytes

Use avio_wb16() instead of avio_write() to write two zero bytes.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/segafilmenc: Remove write-only variable
Andreas Rheinhardt [Fri, 17 Jul 2020 06:06:15 +0000 (08:06 +0200)]
avformat/segafilmenc: Remove write-only variable

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/segafilm: Reorder elements of struct to make it smaller
Andreas Rheinhardt [Fri, 17 Jul 2020 05:47:44 +0000 (07:47 +0200)]
avformat/segafilm: Reorder elements of struct to make it smaller

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/daudenc: Return proper error codes instead if -1
Andreas Rheinhardt [Fri, 17 Jul 2020 05:38:52 +0000 (07:38 +0200)]
avformat/daudenc: Return proper error codes instead if -1

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/daudenc: Turn write_header function into init function
Andreas Rheinhardt [Fri, 17 Jul 2020 05:36:11 +0000 (07:36 +0200)]
avformat/daudenc: Turn write_header function into init function

daud_write_header() doesn't write anything.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/webmdashenc: Cosmetics
Andreas Rheinhardt [Fri, 17 Jul 2020 05:32:52 +0000 (07:32 +0200)]
avformat/webmdashenc: Cosmetics

Mostly using intermediate pointers for accesses (i.e. storing s->pb in a
variable pb and then using pb for writing instead of s->pb) to improve
readability. Furthermore, the opening brace '{' of a function has been
moved into a line of its own in instances where it wasn't before.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/webmdashenc: Only check for existence of metadata if it is used
Andreas Rheinhardt [Fri, 17 Jul 2020 04:17:44 +0000 (06:17 +0200)]
avformat/webmdashenc: Only check for existence of metadata if it is used

Also return proper error codes when it is absent: AVERROR(EINVAL)
instead of AVERROR_INVALIDDATA.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/webmdashenc: Avoid allocations, fix memleak
Andreas Rheinhardt [Tue, 14 Jul 2020 22:06:10 +0000 (00:06 +0200)]
avformat/webmdashenc: Avoid allocations, fix memleak

When using the WebM DASH Manifest muxer, every stream of each adaptation
set has to contain a metadata entry containing the filename of the
source file. In case of live stream manifests, said filename has to
conform to a pattern of
<file_description>_<representation_id>.<extension>. These pieces are
used to create the other strings that are actually output. Up until now,
these other strings would be allocated, used once and then freed
directly after usage. This commit changes this: The function that
allocated and assembled these strings now returns pointers to the '_'
and '.' delimiters and so that the caller can easily pick substrings
from it without needing to copy the string.

Avoiding allocations also fixes a memleak: One of the allocated strings
would leak upon a subsequent allocation failure.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/webmdashenc: Fix segfault when no filename is given when live
Andreas Rheinhardt [Tue, 14 Jul 2020 20:49:15 +0000 (22:49 +0200)]
avformat/webmdashenc: Fix segfault when no filename is given when live

by checking a bit earlier.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
8 days agoavformat/riffenc: correct calculation for extradata size
Gyan Doshi [Sat, 25 Jul 2020 05:09:32 +0000 (10:39 +0530)]
avformat/riffenc: correct calculation for extradata size

In 1ec2b3de5a, the extradata size was affected when the raster was
signaled as flipped due to user-set option rather than via extradata.
This resulted in a wrong header size being written. Fixed.

9 days agoswscale/yuv2rgb: cosmetics
Limin Wang [Tue, 21 Jul 2020 16:07:50 +0000 (00:07 +0800)]
swscale/yuv2rgb: cosmetics

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
9 days agoavformat/mpegtsenc: use local variable store st->codecpar->codec_id
Limin Wang [Wed, 8 Jul 2020 03:19:13 +0000 (11:19 +0800)]
avformat/mpegtsenc: use local variable store st->codecpar->codec_id

Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
9 days agoavformat/mpegtsenc: reindent the last commit
Limin Wang [Wed, 8 Jul 2020 02:40:33 +0000 (10:40 +0800)]
avformat/mpegtsenc: reindent the last commit

Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
9 days agoavformat/mpegtsenc: simplify code for condition checks
Limin Wang [Wed, 8 Jul 2020 02:40:10 +0000 (10:40 +0800)]
avformat/mpegtsenc: simplify code for condition checks

Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
9 days agolibavcodec/libaomenc.c: Add command-line options for inter-coding tools
Wang Cao [Wed, 22 Jul 2020 23:11:12 +0000 (16:11 -0700)]
libavcodec/libaomenc.c: Add command-line options for inter-coding tools

Signed-off-by: Wang Cao <wangcao@google.com>
Signed-off-by: James Zern <jzern@google.com>
9 days agolibavcodec/libaomenc.c: Add command-line options for tx tools.
Wang Cao [Wed, 22 Jul 2020 23:12:01 +0000 (16:12 -0700)]
libavcodec/libaomenc.c: Add command-line options for tx tools.

Signed-off-by: Wang Cao <wangcao@google.com>
Signed-off-by: James Zern <jzern@google.com>
10 days agolibavcodec/jpeg2000dec: Fix codeblock decode check
Gautam Ramakrishnan [Thu, 23 Jul 2020 17:11:10 +0000 (22:41 +0530)]
libavcodec/jpeg2000dec: Fix codeblock decode check

The codeblock decoder checks whether the mqc decoder
has decoded the right number of bytes. However, this
check does not account for the fact that the mqc encoder's
flush routine adds 2 bytes of data which does not have to be
read by the decoder. The check is modified to account for
this. This patch solves issue #4827

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
10 days agoavcodec/alac: Check decorr_shift to avoid invalid shift
Michael Niedermayer [Thu, 23 Jul 2020 21:41:27 +0000 (23:41 +0200)]
avcodec/alac: Check decorr_shift to avoid invalid shift

Later the decorrelate_stereo call is guarded by channels == 2
and non-zero decorr_left_weight. Make sure decorr_shift is in
the expected shift range for that case.

Fixes: shift exponent 128 is too large for 32-bit type 'int'
Fixes: 23860/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_ALAC_fuzzer-5751138914402304

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Alexander Strasser <eclipse7@gmx.net>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
10 days agolavc/vaapi_encode: Add render target support for 422 10-bit
Linjie Fu [Mon, 22 Jun 2020 07:41:35 +0000 (15:41 +0800)]
lavc/vaapi_encode: Add render target support for 422 10-bit

This enables VAAPI encoding support for 422 10-bit(Y210).

Signed-off-by: Linjie Fu <linjie.justin.fu@gmail.com>
10 days agovaapi_encode_h265: Enable 4:2:2 support
Mark Thompson [Thu, 5 Mar 2020 00:25:28 +0000 (00:25 +0000)]
vaapi_encode_h265: Enable 4:2:2 support

10 days agoavformat/matroskadec: Slightly simplify version check
Andreas Rheinhardt [Mon, 20 Jul 2020 17:14:38 +0000 (19:14 +0200)]
avformat/matroskadec: Slightly simplify version check

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
10 days agoavformat/matroskadec: Avoid undefined pointer arithmetic
Andreas Rheinhardt [Sun, 19 Jul 2020 08:16:33 +0000 (10:16 +0200)]
avformat/matroskadec: Avoid undefined pointer arithmetic

The Matroska demuxer currently always opens a GetByteContext to read the
content of the projection's private data buffer; it does this even if
there is no private data buffer in which case opening the GetByteContext
will lead to a NULL + 0 which is undefined behaviour.
Furthermore, in this case the code relied both on the implicit checks
of the bytestream2 API as well as on the fact that it returns zero
if there is not enough data available.

Both of these issues have been addressed by not using the bytestream API
any more; instead the data is simply read directly by using AV_RB. This
is possible because the offsets are constants.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
10 days agoavformat/mxfdec: Fix memleak upon repeating tags
Andreas Rheinhardt [Mon, 20 Jul 2020 05:24:53 +0000 (07:24 +0200)]
avformat/mxfdec: Fix memleak upon repeating tags

When parsing MXF encountering some tags leads to allocations. And when
these tags were encountered repeatedly, this could lead to memleaks,
because the pointer to the old data got simply overwritten with a
pointer to the new data (or to NULL on allocation failure). This has
been fixed.

Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
10 days agoavformat/mxfdec: Fix memleak when parsing tag fails
Andreas Rheinhardt [Mon, 20 Jul 2020 04:20:29 +0000 (06:20 +0200)]
avformat/mxfdec: Fix memleak when parsing tag fails

The MXF demuxer uses an array of pointers to different structures of
metadata (all containing a common initial sequence containing a type
field to distinguish them) and some of these structures contain pointers
to separately allocated subelements. If an error happens while reading
and creating the tags, the semi-finished new tag is freed using the
function to free these tags. But this function doesn't free the already
allocated subelements, because the type has not been set yet. This commit
changes this.

Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
10 days agoavformat/mxfdec: Fix memleak when adding element to array fails
Andreas Rheinhardt [Mon, 20 Jul 2020 00:46:09 +0000 (02:46 +0200)]
avformat/mxfdec: Fix memleak when adding element to array fails

Said array contains pointers to other structs and both the designated
new element as well as other stuff contained in it (e.g. strings) leak
if the new element can't be added to the array.

Reviewed-by: Tomas Härdin <tjoppen@acc.umu.se>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
11 days agoavutil: bump version after addition of MIPS cpu flags
James Almer [Thu, 23 Jul 2020 17:00:31 +0000 (14:00 -0300)]
avutil: bump version after addition of MIPS cpu flags

And add the missing doc/APIchanges entry.

Signed-off-by: James Almer <jamrial@gmail.com>
11 days agolibavcodec: MIPS: MMI: Move sp out of the clobber list
Jiaxun Yang [Sat, 18 Jul 2020 15:35:42 +0000 (23:35 +0800)]
libavcodec: MIPS: MMI: Move sp out of the clobber list

GCC complains:
warning: listing the stack pointer register ‘$29’ in a clobber
list is deprecated [-Wdeprecated]

Actually stack pointer was restored at the end of the inline assembly
so there is no reason to add it to the clobber list.

Also use $sp insted of $29 to make our intention much more clear.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reviewed-by: Shiyou Yin <yinshiyou-hf@loongson.cn>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
11 days agolibavcodec: MIPS: MMI: Fix type mismatches
Jiaxun Yang [Sat, 18 Jul 2020 15:35:41 +0000 (23:35 +0800)]
libavcodec: MIPS: MMI: Fix type mismatches

GCC complains about them.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reviewed-by: Shiyou Yin <yinshiyou-hf@loongson.cn>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
11 days agolibavcodec: Enable runtime detection for MIPS MMI & MSA
Jiaxun Yang [Sat, 18 Jul 2020 15:35:40 +0000 (23:35 +0800)]
libavcodec: Enable runtime detection for MIPS MMI & MSA

Apply optimized functions according to cpuflags.
MSA is usually put after MMI as it's generally faster than MMI.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reviewed-by: Shiyou Yin <yinshiyou-hf@loongson.cn>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>