ffmpeg.git
84 min agoavformat: fix apm makefile dependency master
Zane van Iperen [Tue, 26 May 2020 10:57:49 +0000 (10:57 +0000)]
avformat: fix apm makefile dependency

Uses ff_get_wav_header() in riffdec.c

Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2 hours agoavcodec/h264dec: Add FF_CODEC_CAP_INIT_CLEANUP
Limin Wang [Wed, 27 May 2020 04:35:28 +0000 (12:35 +0800)]
avcodec/h264dec: Add FF_CODEC_CAP_INIT_CLEANUP

then ff_h264_free_tables() and h264_decode_end() can be removed
in h264_decode_init() if it's failed.

The FF_CODEC_CAP_INIT_CLEANUP flag is need for single thread, For multithread,
it'll be cleanup still by AV_CODEC_CAP_FRAME_THREADS flag if have.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2 hours agoavcodec: Add FF_CODEC_CAP_INIT_CLEANUP
Limin Wang [Wed, 27 May 2020 03:45:49 +0000 (11:45 +0800)]
avcodec: Add FF_CODEC_CAP_INIT_CLEANUP

then ff_mpv_encode_end() will be unnecessary in ff_mpv_encode_init()
if it's failed.

The FF_CODEC_CAP_INIT_CLEANUP flag is need for single thread, For multithread,
it'll be cleanup still by AV_CODEC_CAP_FRAME_THREADS flag if have.

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2 hours agoavcodec/adpcmenc: Add FF_CODEC_CAP_INIT_CLEANUP
Limin Wang [Fri, 15 May 2020 15:25:59 +0000 (23:25 +0800)]
avcodec/adpcmenc: Add FF_CODEC_CAP_INIT_CLEANUP

then we can remove adpcm_encode_close() in adpcm_encode_init() if have failed.
so the goto error lable will be unnecessary and can be removed later.

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
3 hours agoconfigure: NotchLC depends on lzf
Paul B Mahol [Wed, 27 May 2020 13:22:35 +0000 (15:22 +0200)]
configure: NotchLC depends on lzf

3 hours agoavformat/mpegtsenc: cosmetic
Limin Wang [Wed, 20 May 2020 12:22:42 +0000 (20:22 +0800)]
avformat/mpegtsenc: cosmetic

Merge the short lines after the last commit

Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
3 hours agoavformat/mpegtsenc: simplify code by using OFFSET() and ENC macros
Limin Wang [Wed, 20 May 2020 12:16:53 +0000 (20:16 +0800)]
avformat/mpegtsenc: simplify code by using OFFSET() and ENC macros

Reviewed-by: Marton Balint <cus@passwd.hu>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
8 hours agoavcodec.h: move avcodec_get_{type,name} to codec_id.h
Anton Khirnov [Mon, 25 May 2020 13:06:14 +0000 (15:06 +0200)]
avcodec.h: move avcodec_get_{type,name} to codec_id.h

8 hours agoavcodec.h: split AVCodec API into its own header
Anton Khirnov [Mon, 25 May 2020 13:04:20 +0000 (15:04 +0200)]
avcodec.h: split AVCodec API into its own header

8 hours agodoc/APIchanges: fix typo in version number
Anton Khirnov [Fri, 22 May 2020 12:45:05 +0000 (14:45 +0200)]
doc/APIchanges: fix typo in version number

8 hours agolavf/mp3dec: don't adjust start time; packets are not adjusted.
Dale Curtis [Thu, 23 Apr 2020 23:18:18 +0000 (16:18 -0700)]
lavf/mp3dec: don't adjust start time; packets are not adjusted.

7546ac2fee4 made it so that the start_time for mp3 files is
adjusted for skip_samples. However, this appears incorrect because
subsequent packet timestamps are not adjusted and skip_samples are
applied by deleting data from a packet without changing the timestamp.

E.g., we are told the start_time is ~25ms and we get a packet with a
timestamp of 0 that has had the skip_samples discarded from it. As such
rendering engines may incorrectly discard everything prior to the
25ms thinking that is where playback should officially start. Since the
samples were deleted without adjusting timestamps though, the true
start_time is still 0.

Other formats like MP4 with edit lists will adjust both the start
time and the timestamps of subsequent packets to avoid this issue.

Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
9 hours agolavc/vaapi_hevc: add missing max_8bit_constraint_flag
Linjie Fu [Tue, 12 May 2020 13:46:40 +0000 (21:46 +0800)]
lavc/vaapi_hevc: add missing max_8bit_constraint_flag

This is accidentally missed while rebasing.

Signed-off-by: Linjie Fu <linjie.fu@intel.com>
9 hours agolavc/hevc_refs: Fix the logic of find_ref_idx()
Xu Guangxin [Tue, 12 May 2020 13:44:21 +0000 (21:44 +0800)]
lavc/hevc_refs: Fix the logic of find_ref_idx()

Currently find_ref_idx() would trigger 2 scans in DPB to find the
requested POC:
1. Firstly, ignore MSB of ref->poc and search for the requested POC;
2. Secondly, compare the entire ref->poc with requested POC;

For long term reference, we are able to only check LSB if MSB is not
presented(e.g. delta_poc_msb_present_flag == 0). However, for short
term reference, we should never ignore poc's MSB and it should be
kind of bit-exact. (Details in 8.3.2)

Otherwise this leads to decoding failures like:
[hevc @ 0x5638f4328600] Error constructing the frame RPS.
[hevc @ 0x5638f4328600] Error parsing NAL unit #2.
[hevc @ 0x5638f4338a80] Could not find ref with POC 21
Error while decoding stream #0:0: Invalid data found when processing input

Search the requested POC based on whether MSB is used, and avoid
the 2-times scan for DPB buffer. This benefits both native HEVC
decoder and integrated HW decoders.

Signed-off-by: Xu Guangxin <guangxin.xu@intel.com>
Signed-off-by: Linjie Fu <linjie.fu@intel.com>
9 hours agolavc/hevc: Add poc_msb_present filed in LongTermRPS
Xu Guangxin [Tue, 12 May 2020 13:42:49 +0000 (21:42 +0800)]
lavc/hevc: Add poc_msb_present filed in LongTermRPS

delta_poc_msb_present_flag is needed in find_ref_idx() to
indicate whether MSB of POC should be taken into account.

Details in 8.3.2.

Signed-off-by: Xu Guangxin <guangxin.xu@intel.com>
Signed-off-by: Linjie Fu <linjie.fu@intel.com>
19 hours agoavfilter/vf_blend: add support for float formats
Paul B Mahol [Tue, 26 May 2020 21:07:36 +0000 (23:07 +0200)]
avfilter/vf_blend: add support for float formats

19 hours agomfenc: Avoid including codecapi.h, fix building in UWP mode with clang
Martin Storsjö [Mon, 25 May 2020 10:26:04 +0000 (13:26 +0300)]
mfenc: Avoid including codecapi.h, fix building in UWP mode with clang

Including codecapi.h and uuids.h in UWP mode doesn't define all defines
properly, ending up with constructs that MSVC silently tolerates, but
that clang errors out on, like this:
    DEFINE_GUIDEX(CODECAPI_AVEncCommonFormatConstraint);

Just avoid including codecapi.h completely and hardcode the last few
enum values we use from there. We already use local versions of most
enums from there, due to older mingw-w64 headers being incomplete.

Signed-off-by: Martin Storsjö <martin@martin.st>
19 hours agomfenc: Remove an unused include
Martin Storsjö [Mon, 25 May 2020 10:18:03 +0000 (13:18 +0300)]
mfenc: Remove an unused include

This might have been used originally for the decoder parts of
the MediaFoundation wrapper, which aren't merged yet.

Signed-off-by: Martin Storsjö <martin@martin.st>
20 hours agofftools/ffmpeg: add new abort_on flag which aborts if there is a stream which receive...
Marton Balint [Tue, 12 May 2020 22:06:08 +0000 (00:06 +0200)]
fftools/ffmpeg: add new abort_on flag which aborts if there is a stream which received no packets

Signed-off-by: Marton Balint <cus@passwd.hu>
29 hours agohwcontext_vulkan: fix uploading and downloading from/to flipped images
Lynne [Tue, 26 May 2020 11:01:54 +0000 (12:01 +0100)]
hwcontext_vulkan: fix uploading and downloading from/to flipped images

We want to copy the lowest amount of bytes per line, but while the buffer
stride is sanitized, the src/dst stride can be negative, and negative numbers
of bytes do not make a lot of sense.

30 hours agoopusenc: add apply_phase_inv option
Lynne [Mon, 25 May 2020 13:41:33 +0000 (14:41 +0100)]
opusenc: add apply_phase_inv option

By popular request.
Does the same as in libopusenc.

30 hours agolavfi/vulkan: fix queue counts and set indices
Lynne [Mon, 25 May 2020 14:37:17 +0000 (15:37 +0100)]
lavfi/vulkan: fix queue counts and set indices

30 hours agolavfi/vulkan: use dedicated allocation for buffers when necessary
Lynne [Mon, 25 May 2020 14:36:41 +0000 (15:36 +0100)]
lavfi/vulkan: use dedicated allocation for buffers when necessary

30 hours agohwcontext_vulkan: check for dedicated allocation when mapping from drm/vaapi
Lynne [Mon, 25 May 2020 19:57:16 +0000 (20:57 +0100)]
hwcontext_vulkan: check for dedicated allocation when mapping from drm/vaapi

Some vendors (AMD) require dedicated allocation to be used for all imported
images.

30 hours agohwcontext_vulkan: initialize the frames context when deriving
Lynne [Mon, 25 May 2020 19:56:00 +0000 (20:56 +0100)]
hwcontext_vulkan: initialize the frames context when deriving

Otherwise, the frames context is considered to be ready to handle
mapping, and it doesn't get initialized the normal way through
.frames_init.

30 hours agohwcontext_vulkan: use dedicated allocation for buffers when necessary
Lynne [Tue, 26 May 2020 09:34:31 +0000 (10:34 +0100)]
hwcontext_vulkan: use dedicated allocation for buffers when necessary

30 hours agohwcontext_vulkan: use host mapped buffers when uploading and downloading
Lynne [Sat, 23 May 2020 18:02:08 +0000 (19:02 +0100)]
hwcontext_vulkan: use host mapped buffers when uploading and downloading

Speeds up both use cases by 30%.

31 hours agopngdec: add ability to check chunk CRC
Lynne [Thu, 7 Mar 2019 18:15:23 +0000 (18:15 +0000)]
pngdec: add ability to check chunk CRC

By default now, if AV_EF_CRCCHECK or AV_EF_IGNORE_ERR are enabled the decoder
will skip the chunk and carry on with the next one. This should make the
decoder able to decode more corrupt files because the functions which decode
individual chunks will very likely error out if fed invalid data and stop the
decoding of the entire image.

31 hours agompegaudiodec_template: add ability to check CRC
Lynne [Wed, 6 Mar 2019 17:04:04 +0000 (17:04 +0000)]
mpegaudiodec_template: add ability to check CRC

A lot of files have CRC included.
The CRC only covers 34 bytes at most from the frame but it should still be
enough for some amount of error detection.

31 hours agoapedec: add ability to check CRC
Lynne [Wed, 6 Mar 2019 11:01:01 +0000 (11:01 +0000)]
apedec: add ability to check CRC

The CRC flag is only signalled once every few minutes but CRC is still
always present so the patch uses the file version instead.
CRC on 24-bit files wants non-padded samples so skip such files.
Some corrupt samples may have been output before the final check
depending on the -max_samples setting.

35 hours agoavutil/mem: Use max_alloc_size as-is
Andreas Rheinhardt [Thu, 21 May 2020 00:03:56 +0000 (02:03 +0200)]
avutil/mem: Use max_alloc_size as-is

The size of a single allocation performed by av_malloc() or av_realloc()
is supposed to be bounded by max_alloc_size, which defaults to INT_MAX
and can be set by the user; yet currently this is not completely
honoured: The actual value used is max_alloc_size - 32. How this came
to be can only be understood historically:

a) 0ecca7a49f8e254c12a3a1de048d738bfbb614c6 disallowed allocations
> INT_MAX. At that time the size parameter of av_malloc() was an
unsigned and the commentary added ("lets disallow possible ambiguous
cases") indicates that this was done as a precaution against calling the
functions with negative int values. Genuinely limiting the size of
allocations to INT_MAX doesn't seem to have been the intention given
that at this time the memalign hack introduced in commit
da9b170c6f06184a5114dc66afb8385cd0ffff83 (which when enabled increased
the size of allocations slightly so that one can return a correctly
aligned pointer that actually does not point to the beginning of the
allocated buffer) was already present.
b) Said memalign hack allocated 17 bytes more than actually desired, yet
allocating 16 bytes more is actually enough and so this was changed in
a9493601638b048c44751956d2360f215918800c; this commit also replaced
INT_MAX by INT_MAX - 16 (and made the limit therefore a limit on the size
of the allocated buffer), but kept the comment, although there is nothing
ambiguous about allocating (INT_MAX - 16)..INT_MAX.
c) 13dfce3d44f99a2d7df71aba8ae003d58db726f7 then increased 16 to 32 for
AVX, 6b4c0be5586acad3bbafd7d2dd02a8328a5ab632 replaced INT_MAX by
MAX_MALLOC_SIZE (which was of course defined to be INT_MAX) and
5a8e994287d8ef181c0a5eac537547d7059b4524 added max_alloc_size and made
it user-selectable.
d) 4fb311c804098d78e5ce5f527f9a9c37536d3a08 then dropped the memalign
hack, yet it kept the -32 (probably because the comment about ambiguous
cases was still present?), although it is no longer needed at all after
this commit. Therefore this commit removes it and uses max_alloc_size
directly.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
36 hours agoavformat/matroskadec: Beautify matroska_parse_laces()
Andreas Rheinhardt [Wed, 20 May 2020 19:24:34 +0000 (21:24 +0200)]
avformat/matroskadec: Beautify matroska_parse_laces()

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
41 hours agoavformat/oggparsevorbis: Error out on double init of vp
Michael Niedermayer [Sun, 19 Apr 2020 15:05:52 +0000 (17:05 +0200)]
avformat/oggparsevorbis: Error out on double init of vp

Fixes: memleak
Fixes: 19949/clusterfuzz-testcase-minimized-ffmpeg_DEMUXER_fuzzer-5743636058210304

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2 days agoavcodec/mediacodec_wrapper: use MediaFormat to probe frame color characteristics
Matthieu Bouron [Mon, 26 Aug 2019 13:15:05 +0000 (15:15 +0200)]
avcodec/mediacodec_wrapper: use MediaFormat to probe frame color characteristics

2 days agoavcodec/frame_thread_encoder: remove usage of avcodec_encode_video2()
James Almer [Fri, 15 May 2020 23:24:19 +0000 (20:24 -0300)]
avcodec/frame_thread_encoder: remove usage of avcodec_encode_video2()

Call the encoder's internal AVCodec.encode2() function instead.

Signed-off-by: James Almer <jamrial@gmail.com>
2 days agoavformat: Replace ffurl_close() by ffurl_closep() where appropriate
Andreas Rheinhardt [Fri, 3 Apr 2020 15:03:38 +0000 (17:03 +0200)]
avformat: Replace ffurl_close() by ffurl_closep() where appropriate

It avoids leaving dangling pointers behind in memory.

Also remove redundant checks for whether the URLContext to be closed is
already NULL.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2 days agolibavformat/flacdec: Workaround for truncated metadata picture size
Mattias Wadman [Tue, 19 May 2020 09:27:11 +0000 (11:27 +0200)]
libavformat/flacdec: Workaround for truncated metadata picture size

Some flac muxers write truncated metadata picture size if the picture
data do not fit in 24 bits. Detect this by truncting the size found inside
the picture block and if it matches the block size use it and read rest
of picture data.

This workaround is only for flac files and not ogg files with flac
METADATA_BLOCK_PICTURE comments and it can be disabled with strict level
above normal. Currently there is a 500MB limit on truncate size to protect
from large memory allocations.

The truncation bug in lavf flacenc was fixed in e447a4d112bcfee10126c54eb4481fa8712957c8
but based on existing broken files other unknown flac muxers seems to truncate also.
Before the fix a broken flac file for reproduction could be generated with:
ffmpeg -f lavfi -i sine -f lavfi -i color=red:size=2400x2400 -map 0:0 -map 1:0 -c:v:0 bmp -disposition:1 attached_pic -t 1 test.flac

Fixes ticket 6333

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2 days agofate: add tests for h264 and vp9 video enc parameters export
Anton Khirnov [Mon, 11 May 2020 15:06:11 +0000 (17:06 +0200)]
fate: add tests for h264 and vp9 video enc parameters export

2 days agoh264dec: support exporting QP tables through the AVVideoEncParams API
Anton Khirnov [Tue, 10 Mar 2020 17:26:00 +0000 (18:26 +0100)]
h264dec: support exporting QP tables through the AVVideoEncParams API

2 days agoavformat/id3v2: Remove unnecessary indirection
Andreas Rheinhardt [Tue, 19 May 2020 10:09:48 +0000 (12:09 +0200)]
avformat/id3v2: Remove unnecessary indirection

ff_id3v2_parse_apic/chapters/priv/priv_dict all had a parameter
extra_meta of type ID3v2ExtraMeta ** as if the functions wanted to make
*extra_meta point to something else. But they don't, so just use an
ID3v2ExtraMeta *.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2 days agoavformat/id3v2: Avoid allocations for ID3v2ExtraMeta
Andreas Rheinhardt [Tue, 19 May 2020 09:43:48 +0000 (11:43 +0200)]
avformat/id3v2: Avoid allocations for ID3v2ExtraMeta

Up until now, the ID3v2ExtraMeta structure (which is used when parsing
ID3v2 tags containing attached pictures, chapters etc.) contained a
pointer to separately allocated data that depended on the type of the
tag. Yet the difference of the sizes of the largest and the smallest of
these structures is fairly small, so that it is better to simply include
a union of all the possible types of tag-dependent structures in
ID3v2ExtraMeta. This commit implements this.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
2 days agoavformat/aiffenc: Don't forget chapters
Andreas Rheinhardt [Tue, 19 May 2020 04:10:27 +0000 (06:10 +0200)]
avformat/aiffenc: Don't forget chapters

If the write_id3v2 option is set, the aiff muxer would write id3v2 tags
if there is global metadata or if there are attached pics to write.
Chapters are ignored in this check that precedes writing id3v2 tags.
Yet 47ac344970f1d6ef149c4b8a883b68cdb15112c2 added support for writing
chapters as id3v2 tags, so one should check for the existence of chapters,
too; otherwise the chapters would only be written in case there is
global metadata or an attached pic.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 days agoavcodec: move avcodec_flush_buffers from decode.c to utils.c
James Almer [Sat, 16 May 2020 22:17:13 +0000 (19:17 -0300)]
avcodec: move avcodec_flush_buffers from decode.c to utils.c

It's not a decoding exclusive function anymore.

Signed-off-by: James Almer <jamrial@gmail.com>
3 days agolibavcodec/libvpxenc: Don't free user-provided AVPacket
Andreas Rheinhardt [Sat, 23 May 2020 10:13:26 +0000 (12:13 +0200)]
libavcodec/libvpxenc: Don't free user-provided AVPacket

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 days agolibavcodec/libmp3lame: Don't free user-provided AVPacket
Andreas Rheinhardt [Sat, 23 May 2020 10:11:30 +0000 (12:11 +0200)]
libavcodec/libmp3lame: Don't free user-provided AVPacket

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 days agoavcodec/libopusenc: Don't free user-provided AVPacket
Andreas Rheinhardt [Sat, 23 May 2020 09:40:23 +0000 (11:40 +0200)]
avcodec/libopusenc: Don't free user-provided AVPacket

Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
3 days agomfenc: Fix building with clang in MSVC mode
Martin Storsjö [Sat, 23 May 2020 18:14:40 +0000 (21:14 +0300)]
mfenc: Fix building with clang in MSVC mode

Just including icodecapi.h + codecapi.h apparently misses some bits,
that MSVC doesn't complain about, but Clang does. Thus add a missing
header to the custom hacky include path (required for keeping
ICodecAPI visible when building in UWP mode, as it is intended to).

The issue in Windows SDK headers about ICodecAPI availability in
UWP/app mode has been reported upstream at
https://developercommunity.visualstudio.com/content/problem/1037125/icodecapi-not-visible-when-compiling-in-uwp-mode.html,
and later also filed in Feedback Hub (which can't be linked to
externally).

Signed-off-by: Martin Storsjö <martin@martin.st>
3 days agolavfi/vulkan: use all enabled queues in the queue family
Lynne [Wed, 13 May 2020 23:37:21 +0000 (00:37 +0100)]
lavfi/vulkan: use all enabled queues in the queue family

This should significantly improve the performance with certain
filterchains.

3 days agolavfi/vulkan: fix 2 minor memory leaks
Lynne [Thu, 14 May 2020 20:52:53 +0000 (21:52 +0100)]
lavfi/vulkan: fix 2 minor memory leaks

3 days agohwcontext_vulkan: move physical device feature discovery to device_init
Lynne [Fri, 15 May 2020 12:21:10 +0000 (13:21 +0100)]
hwcontext_vulkan: move physical device feature discovery to device_init

Otherwise custom vulkan device contexts won't work.

3 days agohwcontext_vulkan: split uploading and downloading contexts
Lynne [Thu, 14 May 2020 23:01:08 +0000 (00:01 +0100)]
hwcontext_vulkan: split uploading and downloading contexts

This allows us to speed up only-uploading or only-downloading use cases.

3 days agohwcontext_vulkan: set usage for DRM imports to the frames context usage
Lynne [Thu, 14 May 2020 23:21:51 +0000 (00:21 +0100)]
hwcontext_vulkan: set usage for DRM imports to the frames context usage

They're nothing special, and there's no reason they should always use the
default flags.

3 days agohwcontext_vulkan: do not OR the user-specified usage with our default flags
Lynne [Thu, 14 May 2020 23:16:58 +0000 (00:16 +0100)]
hwcontext_vulkan: do not OR the user-specified usage with our default flags

Some users may need special formats that aren't available when the STORAGE
flag bit is set, which would result in allocations failing.

3 days agohwcontext_vulkan: actually use the frames exec context for prep/import/export
Lynne [Thu, 14 May 2020 22:37:14 +0000 (23:37 +0100)]
hwcontext_vulkan: actually use the frames exec context for prep/import/export

This was never actually used, likely due to confusion, as the device context
also had one used for uploads and downloads.
Also, since we're only using it for very quick image barriers (which are
practically free on all hardware), use the compute queue instead of the
transfer queue.

3 days agohwcontext_vulkan: support user-provided pools
Lynne [Thu, 14 May 2020 22:59:22 +0000 (23:59 +0100)]
hwcontext_vulkan: support user-provided pools

If an external pool was provided we skipped all of frames init,
including the exec context.

3 days agohwcontext_vulkan: use all enabled queues for transfers, make uploads async
Lynne [Wed, 13 May 2020 23:28:00 +0000 (00:28 +0100)]
hwcontext_vulkan: use all enabled queues for transfers, make uploads async

This commit makes full use of the enabled queues to provide asynchronous
uploads of images (downloads remain synchronous).
For a pure uploading use cases, the performance gains can be significant.

3 days agohwcontext_vulkan: wrap ImageBufs into AVBufferRefs
Lynne [Thu, 14 May 2020 20:53:22 +0000 (21:53 +0100)]
hwcontext_vulkan: wrap ImageBufs into AVBufferRefs

Makes it easier to support multiple queues

3 days agohwcontext_vulkan: improve public header documentation
Lynne [Fri, 22 May 2020 18:54:00 +0000 (19:54 +0100)]
hwcontext_vulkan: improve public header documentation

Some things like using ImageLists were from a really old version that
still used multiplanar images.

3 days agohwcontext_vulkan: expose the enabled device features
Lynne [Wed, 13 May 2020 15:39:00 +0000 (16:39 +0100)]
hwcontext_vulkan: expose the enabled device features

With this, the puzzle of making libplacebo, ffmpeg and any other Vulkan
API users interoperable is complete.
Users of both libraries can initialize one another's contexts without having
to create a new one.

3 days agohwcontext_vulkan: expose the amount of queues for each queue family
Lynne [Wed, 13 May 2020 15:20:15 +0000 (16:20 +0100)]
hwcontext_vulkan: expose the amount of queues for each queue family

This, along with the next patch, are the last missing pieces to being
interoperable with libplacebo.

3 days agohwcontext: add av_hwdevice_ctx_create_derived_opts
Lynne [Wed, 20 May 2020 19:58:03 +0000 (20:58 +0100)]
hwcontext: add av_hwdevice_ctx_create_derived_opts

This allows for users who derive devices to set options for the
new device context they derive.
The main use case of this is to allow users to enable extensions
(such as surface drawing extensions) in Vulkan while deriving from
the device their frames are on. That way, users don't need to write
any initialization code themselves, since the Vulkan spec invalidates
mixing instances, physical devices and active devices.
Apart from Vulkan, other hwcontexts ignore the opts argument since they
don't support options at all (or in VAAPI and OpenCL's case, options are
currently only used for device selection, which device_derive overrides).

3 days agooggdec: remove the oggparsedaala subdemuxer
Lynne [Fri, 22 May 2020 09:30:41 +0000 (10:30 +0100)]
oggdec: remove the oggparsedaala subdemuxer

The Xiph foundation never standardized either Daala nor its mapping in Ogg,
and all files that were created are undecodable without knowledge of the
git hash.

4 days agolavfi: add untile filter.
Nicolas George [Thu, 16 Apr 2020 20:25:24 +0000 (22:25 +0200)]
lavfi: add untile filter.

4 days agolavfi/framesync: use av_gcd_q().
Nicolas George [Thu, 16 Apr 2020 19:36:35 +0000 (21:36 +0200)]
lavfi/framesync: use av_gcd_q().

4 days agolavu: add av_gcd_q().
Nicolas George [Thu, 16 Apr 2020 19:36:00 +0000 (21:36 +0200)]
lavu: add av_gcd_q().

4 days agolavfi/tests/formats: reindent.
Nicolas George [Thu, 16 Apr 2020 15:24:36 +0000 (17:24 +0200)]
lavfi/tests/formats: reindent.

4 days agolavfi/formats: remove dead code.
Nicolas George [Thu, 16 Apr 2020 14:55:36 +0000 (16:55 +0200)]
lavfi/formats: remove dead code.

Move the contents of all_channel_layouts.inc directly into
libavfilter/tests/formats.c.

4 days agolavfi/vf_crop: use ff_formats_pixdesc_filter().
Nicolas George [Thu, 16 Apr 2020 14:40:53 +0000 (16:40 +0200)]
lavfi/vf_crop: use ff_formats_pixdesc_filter().

4 days agolavfi/formats: add ff_formats_pixdesc_filter().
Nicolas George [Thu, 16 Apr 2020 14:40:40 +0000 (16:40 +0200)]
lavfi/formats: add ff_formats_pixdesc_filter().

4 days agoavformat/webm_chunk: Open AVIOContext before initializing sub-muxer
Andreas Rheinhardt [Sun, 17 May 2020 19:37:42 +0000 (21:37 +0200)]
avformat/webm_chunk: Open AVIOContext before initializing sub-muxer

The description of AVOutputFormat.init contains the statement that "this
method must not write output". Due to this, the webm_chunk muxer defers
opening the AVIOContext for the child muxer until avformat_write_header(),
i.e. there is no AVIOContext when the sub-muxer's avformat_init_output()
is called. But this violates the documentation of said function which
requires the AVFormatContext to have an already opened AVIOContext.
This commit fixes this.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/matroskaenc: Forward errors from avpriv_split_xiph_headers()
Andreas Rheinhardt [Sun, 17 May 2020 15:30:19 +0000 (17:30 +0200)]
avformat/matroskaenc: Forward errors from avpriv_split_xiph_headers()

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/matroskadec: Use proper context for logging
Andreas Rheinhardt [Sun, 17 May 2020 22:25:48 +0000 (00:25 +0200)]
avformat/matroskadec: Use proper context for logging

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavcodec/xiph: Return better error codes
Andreas Rheinhardt [Sun, 17 May 2020 16:04:52 +0000 (18:04 +0200)]
avcodec/xiph: Return better error codes

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/segment: Propagate disposition
Andreas Rheinhardt [Sat, 16 May 2020 21:31:08 +0000 (23:31 +0200)]
avformat/segment: Propagate disposition

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/segment: Access AVStream more directly
Andreas Rheinhardt [Sun, 17 May 2020 00:36:46 +0000 (02:36 +0200)]
avformat/segment: Access AVStream more directly

by storing s->streams[i] in a pointer instead of constantly using
s->streams[i]->...

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/webmdashenc: Simplify parsing strings
Andreas Rheinhardt [Mon, 18 May 2020 03:11:34 +0000 (05:11 +0200)]
avformat/webmdashenc: Simplify parsing strings

Don't use the functions for searching substrings when all one is
looking for is a char anyway. Given that there is already a standard
library function for "find last occurence of a char in a string" also
allows one to remove a custom loop.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/webmdashenc: Don't segfault on invalid arguments
Andreas Rheinhardt [Mon, 18 May 2020 02:43:25 +0000 (04:43 +0200)]
avformat/webmdashenc: Don't segfault on invalid arguments

The current parsing process for adaptation_sets does not guarantee
every adaptation set to contain at least one stream, because the loop
exits immediately as soon as the end of the string has been reached,
without checking whether the currently active adaptation set group is
lacking a stream. This would lead to segfaults lateron as the rest of
the code presumed that every adaptation set contains a stream. This
commit fixes this by erroring out when the last adaptation set group
is incomplete.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/webmdashenc: Remove possibility of infinite loop
Andreas Rheinhardt [Mon, 18 May 2020 02:19:32 +0000 (04:19 +0200)]
avformat/webmdashenc: Remove possibility of infinite loop

The WebM DASH manifest muxer uses a loop to parse the adaptation_sets
string (which is given by the user and governs which AVStreams are
mapped to what adaptation set) and the very beginning of this loop is
"if (*p == ' ') continue;". This of course leads to an infinite loop if
the condition is true. It is true if e.g. the string begins with ' ' or
if there are more than one ' ' between different adaptation set groups.

To fix this, the parsing process has been modified to consume the space
if it is at a place where it can legitimately occur, i.e. when a new
adaptation set group is expected. The latter restriction implies that an
error is returned if a space exists where none is allowed to exist.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/webmdashenc: Be more strict when parsing stream indices
Andreas Rheinhardt [Mon, 18 May 2020 01:17:50 +0000 (03:17 +0200)]
avformat/webmdashenc: Be more strict when parsing stream indices

The syntax of the adaptation_sets string by which the user determines
the mapping of AVStreams to adaptation sets is
"id=x,streams=a,b,c id=y,streams=d,e" (means: the streams with the
indices a, b and c belong to the adaptation set with id x). Yet there
was no check for whether these indices were actual numbers and if there
is a number whether it really extends to the next ',', ' ' or to the
end of the string or not. This commit adds a check for this.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/webmdashenc: Avoid allocation for parsing a number
Andreas Rheinhardt [Mon, 18 May 2020 00:48:49 +0000 (02:48 +0200)]
avformat/webmdashenc: Avoid allocation for parsing a number

In order to parse a number from a string, the WebM DASH manifest muxer
would duplicate (via heap-allocation) the part of the string that
contains the number, then read the number via atoi() and then free the
duplicate again. This has been replaced by simply using strtoll() (which
in contrast to atoi() has defined behaviour when the number is not
representable).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/mux: Remove unnecessary unreferencing of AVPacket
Andreas Rheinhardt [Sat, 9 May 2020 19:26:30 +0000 (21:26 +0200)]
avformat/mux: Remove unnecessary unreferencing of AVPacket

Since commit c5324d92c5f206dcdc2cf93ae237eaa7c1ad0a40 all custom
interleave_packet() functions always return clean packets (even on
error), so that unreferencing manually can be removed.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavformat/avformat: Remove redundant "NOT PART OF PUBLIC API"
Andreas Rheinhardt [Wed, 18 Mar 2020 13:49:50 +0000 (14:49 +0100)]
avformat/avformat: Remove redundant "NOT PART OF PUBLIC API"

AVStream.request_probe as well as AVStream.mux_ts_offset are below the
separator of public and private fields, so that a further "NOT PART OF
PUBLIC API" is redundant.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
4 days agoavfilter/vf_lut3d: initial float pixel format support
Mark Reid [Tue, 19 May 2020 02:00:25 +0000 (19:00 -0700)]
avfilter/vf_lut3d: initial float pixel format support

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agoavcodec/ass: explicitly set ScaledBorderAndShadow
Oneric [Thu, 16 Apr 2020 22:38:53 +0000 (00:38 +0200)]
avcodec/ass: explicitly set ScaledBorderAndShadow

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
4 days agoavcodec: move mpeg4 profiles to profiles.h
Marton Balint [Sun, 10 May 2020 19:58:35 +0000 (21:58 +0200)]
avcodec: move mpeg4 profiles to profiles.h

Also bump micro version after the recent option changes.

Signed-off-by: Marton Balint <cus@passwd.hu>
4 days agoavcodec: move msbc profile to encoder
Marton Balint [Sun, 10 May 2020 18:54:57 +0000 (20:54 +0200)]
avcodec: move msbc profile to encoder

Signed-off-by: Marton Balint <cus@passwd.hu>
4 days agoavcodec/options_table: remove dts profiles
Marton Balint [Sun, 10 May 2020 18:43:35 +0000 (20:43 +0200)]
avcodec/options_table: remove dts profiles

Our encoder (dcaenc) does not use any of these.

Signed-off-by: Marton Balint <cus@passwd.hu>
4 days agoavcodec: move aacenc profiles to profiles.h
Marton Balint [Sun, 10 May 2020 18:38:11 +0000 (20:38 +0200)]
avcodec: move aacenc profiles to profiles.h

Signed-off-by: Marton Balint <cus@passwd.hu>
4 days agoavcodec/options_table: make AVCodecContext->profile search for child constants
Marton Balint [Sun, 10 May 2020 18:08:40 +0000 (20:08 +0200)]
avcodec/options_table: make AVCodecContext->profile search for child constants

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

Also rename unit name to something rather unique, so it won't be used elsewhere.

Signed-off-by: Marton Balint <cus@passwd.hu>
4 days agoavutil/opt: add AV_OPT_FLAG_CHILD_CONSTS
Marton Balint [Sun, 10 May 2020 17:54:51 +0000 (19:54 +0200)]
avutil/opt: add AV_OPT_FLAG_CHILD_CONSTS

This will be used for AVCodecContext->profile. By specifying constants in the
encoders we won't have to use the common AVCodecContext options table and
different encoders can use the same profile name even with different values.

Signed-off-by: Marton Balint <cus@passwd.hu>
4 days agomovenc: Fix accidental leftover duplication from 1aec1fbcc595
Martin Storsjö [Fri, 22 May 2020 18:59:49 +0000 (21:59 +0300)]
movenc: Fix accidental leftover duplication from 1aec1fbcc595

Signed-off-by: Martin Storsjö <martin@martin.st>
4 days agomfenc: Fall back to avctx->time_base if avctx->framerate isn't set
Martin Storsjö [Wed, 20 May 2020 20:08:17 +0000 (23:08 +0300)]
mfenc: Fall back to avctx->time_base if avctx->framerate isn't set

The framerate field is the one users are supposed to set, but not
all users might be setting it, so it might be good to fall back
time_base in that case.

Signed-off-by: Martin Storsjö <martin@martin.st>
4 days agomfenc: Fix setting has_b_frames for max_b_frames == 1
Martin Storsjö [Wed, 20 May 2020 21:11:47 +0000 (00:11 +0300)]
mfenc: Fix setting has_b_frames for max_b_frames == 1

This was a mistake in my own additions in
050b72ab5ef318605b305aa6cb920e8b52f1002e.

Signed-off-by: Martin Storsjö <martin@martin.st>
4 days agomovenc: Fix conversion of the first frame for extradata-less H264/HEVC
Martin Storsjö [Thu, 21 May 2020 11:00:14 +0000 (14:00 +0300)]
movenc: Fix conversion of the first frame for extradata-less H264/HEVC

Move the copying of the frame to vos_data further up in the function,
so that when writing the actual frame data for the first frame, it's
clear that the stream really is in annex b format, for the cases where
we create extradata from the first frame.

Alternatively - we could invert the checks for bitstream format. If
extradata is missing, we can't pretend that the bitstream is in
mp4 form, because we can't even know the NAL unit length prefix size
in that case.

Also avoid creating extradata for AVC intra. If the track tag is
an AVC intra tag, don't copy the frame into vos_data - this matches
other existing cases of how vos_data and TAG_IS_AVCI interact in
other places.

Signed-off-by: Martin Storsjö <martin@martin.st>
4 days agocbs_h265: Fix use of an uninitialized variable
Martin Storsjö [Thu, 21 May 2020 08:03:35 +0000 (11:03 +0300)]
cbs_h265: Fix use of an uninitialized variable

This fixes test failures in fate-cbs-hevc-* in certain configurations
since c53f9f436440be4e18.

Signed-off-by: Martin Storsjö <martin@martin.st>
5 days agoavcodec/bsf: mention that av_bsf_send_packet() returning EAGAIN is not an error
James Almer [Thu, 9 Apr 2020 23:02:04 +0000 (20:02 -0300)]
avcodec/bsf: mention that av_bsf_send_packet() returning EAGAIN is not an error

EAGAIN is returned when input is provided but can't be consumed. The filtering
process is unaffected in this case, and the function will be able to consume
new input after retrieving filtered packets with av_bsf_receive_packet().

Remove the line about empty packets never failing added in
41b05b849f215b03eeb9e3608571ba47de64182a while at it. Even if it's currently
the case, it unnecessarily constrains the API and could be changed in the future
in case it needs to be extended.
The user should always check for errors and never expect a call to never fail.

Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
5 days agoavcodec.h: split bitstream filters API into its own header
Anton Khirnov [Tue, 7 Apr 2020 14:41:48 +0000 (16:41 +0200)]
avcodec.h: split bitstream filters API into its own header

5 days agolavc: rename bsf.h to bsf_internal.h
Anton Khirnov [Tue, 7 Apr 2020 14:49:28 +0000 (16:49 +0200)]
lavc: rename bsf.h to bsf_internal.h

This will allow adding a public header named bsf.h

5 days agoavcodec.h: split AVCodecParameters API into its own header
Anton Khirnov [Tue, 7 Apr 2020 14:41:48 +0000 (16:41 +0200)]
avcodec.h: split AVCodecParameters API into its own header

5 days agoStop hardcoding align=32 in av_frame_get_buffer() calls.
Anton Khirnov [Wed, 8 Feb 2017 08:51:17 +0000 (09:51 +0100)]
Stop hardcoding align=32 in av_frame_get_buffer() calls.

Use 0, which selects the alignment automatically.

5 days agocmdutils: drop libavformat/network.h include
Anton Khirnov [Sat, 20 May 2017 10:55:00 +0000 (12:55 +0200)]
cmdutils: drop libavformat/network.h include

It is not a public header and has not been used since
10173c0e58e557582dbd659f42c6aa164a8682db