1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-02-09 14:14:39 +02:00

62 Commits

Author SHA1 Message Date
James Almer
5bab794e4a avcodec/libaomenc: add init cleanup flag
Signed-off-by: James Almer <jamrial@gmail.com>
2022-08-25 14:28:27 -03:00
James Almer
22514527d3 avcodec/libaomenc: use av_fast_realloc() to resize the stats buffer
Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2022-08-24 15:22:15 -03:00
James Almer
b0cd979a0b avcodec/libaomenc: support AV_CODEC_CAP_ENCODER_RECON_FRAME
Signed-off-by: James Almer <jamrial@gmail.com>
2022-08-02 09:56:27 -03:00
Andreas Rheinhardt
6aad1204cc avcodec: Add FF_CODEC_CAP_NOT_INIT_THREADSAFE
This is in preparation of switching the default init-thread-safety
to a codec being init-thread-safe.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-07-18 19:58:56 +02:00
Wan-Teh Chang
38bc24be8d avcodec/libaomenc: Get number of operating points
Use the new codec control AV1E_GET_NUM_OPERATING_POINTS to get the
number of operating points. This is the size of the output arrays of
AV1E_GET_SEQ_LEVEL_IDX and AV1E_GET_TARGET_SEQ_LEVEL_IDX.

Signed-off-by: Wan-Teh Chang <wtc@google.com>
Signed-off-by: James Zern <jzern@google.com>
2022-06-23 12:44:23 -07:00
Vignesh Venkatasubramanian
f55c91497d avcodec/libaomenc: Expose the allintra usage mode
libaom added an usage=allintra mode for doing better with still
images. Expose that in the ffmpeg's wrapper. This is especially
useful for encoding still AVIF images.

Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2022-05-31 16:16:29 -03:00
Bohan Li
950123dc31 avcodec/libaomenc: Add unmet target level warning
When target levels are set, this patch checks whether they are
satisfied by libaom. If not, a warning is shown. Otherwise the output
levels are also logged.

This patch applies basically the same approach used for libvpx.

Signed-off-by: Bohan Li <bohanli@google.com>
Signed-off-by: James Zern <jzern@google.com>
2022-05-27 13:38:19 -07:00
Vignesh Venkatasubramanian
ab05e9a7f2 avcodec/libaomenc: Add parameter for avif single image encoding
Add a parameter to libaom-av1 encoder to enforce some of the single
image constraints in the AV1 encoder. Setting this flag will limit
the encoder to producing exactly one frame and the sequence header
that is produced by the encoder will be conformant to the AVIF
specification [1].

Part of Fixing Trac ticket #7621

[1] https://aomediacodec.github.io/av1-avif

Signed-off-by:: Vignesh Venkatasubramanian <vigneshv@google.com>
2022-05-13 12:45:00 +05:30
Andreas Rheinhardt
4243da4ff4 avcodec/codec_internal: Use union for FFCodec decode/encode callbacks
This is possible, because every given FFCodec has to implement
exactly one of these. Doing so decreases sizeof(FFCodec) and
therefore decreases the size of the binary.
Notice that in case of position-independent code the decrease
is in .data.rel.ro, so that this translates to decreased
memory consumption.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-04-05 20:02:37 +02:00
Andreas Rheinhardt
5aabb2596f avcodec/codec_internal: Rename AVCodecDefault->FFCodecDefault
This structure is no longer declared in a public header,
so using an FF-prefix is more appropriate.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-03-21 01:33:10 +01:00
Andreas Rheinhardt
20f9727018 avcodec/codec_internal: Add FFCodec, hide internal part of AVCodec
Up until now, codec.h contains both public and private parts
of AVCodec. This exposes the internals of AVCodec to users
and leads them into the temptation of actually using them
and forces us to forward-declare structures and types that
users can't use at all.

This commit changes this by adding a new structure FFCodec to
codec_internal.h that extends AVCodec, i.e. contains the public
AVCodec as first member; the private fields of AVCodec are moved
to this structure, leaving codec.h clean.

Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-03-21 01:33:09 +01:00
Andreas Rheinhardt
a688f3c13c avcodec/internal: Move FF_CODEC_CAP_* to a new header codec_internal.h
Also move FF_CODEC_TAGS_END as well as struct AVCodecDefault.
This reduces the amount of files that have to include internal.h
(which comes with quite a lot of indirect inclusions), as e.g.
most encoders don't need it. It is furthemore in preparation
for moving the private part of AVCodec out of the public codec.h.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-03-21 01:33:09 +01:00
Limin Wang
0e22d2e59b avcodec/libaomenc: remove the redundant initialization
For dst->have_sse will be assigned by ctx->have_sse soon(code line 23).

Reviewed-by: James Zern <jzern-at-google.com@ffmpeg.org>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2021-11-23 09:01:43 +08:00
James Zern
cb23c1e553 avcodec/libaomenc: use ctx->usage to get default cfg
this prevents some mismatches in config values for realtime and all
intra modes, avoiding failures like:

[libaom-av1 @ ...] Failed to initialize encoder: Invalid parameter
[libaom-av1 @ ...]   Additional information: g_lag_in_frames out of
range [..0]

Signed-off-by: James Zern <jzern@google.com>
2021-08-23 15:33:51 -07:00
Andreas Rheinhardt
69f120ead7 avcodec/avcodec: Don't include cpu.h
It is not used here at all; instead, add it where it is used without
including it or any of the arch-specific CPU headers.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2021-07-22 12:59:07 +02:00
Andreas Rheinhardt
57b5ec6ba7 avcodec/avcodec: Stop including bsf.h in avcodec.h
Also include bsf.h directly wherever it is used.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2021-07-22 11:14:16 +02:00
Matthieu Patou
268f134e51 lavc/libaomenc: Show encoder config as a warning in case of failed initialization
Suggested-By: ffmpeg@fb.com
2021-06-14 20:25:52 +02:00
Andreas Rheinhardt
044daa7c45 avcodec/libaomenc: Avoid copying data, allow user-supplied buffers
Here the packet size is known before allocating the packet because
the encoder provides said information (and works with internal buffers
itself), so one can use this information to avoid the implicit use of
another intermediate buffer for the packet data; and by switching to
ff_get_encode_buffer() one can also allow user-supplied buffers.

Reviewed-by: James Almer <jamrial@gmail.com>
Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2021-05-23 14:39:51 +02:00
Carl Eugen Hoyos
288ca1c667 lavc/aomenc: Force default qmax of 0 if crf was set to 0.
Fixes lossless encoding without setting qmax to 0.
2021-03-21 09:46:23 +01:00
Anton Khirnov
7d09579190 lavc: rename AV_CODEC_CAP_AUTO_THREADS->AV_CODEC_CAP_OTHER_THREADS
This cap is currently used to mark multithreading-capable codecs that
wrap external libraries with their own multithreading code. The name is
highly confusing for our API users, since libavcodec ALWAYS handles
thread_count=0 (see commit message in previous commit). Therefore rename
the cap and update its documentation to make its meaning clear.

The old name is kept deprecated until next+1 major bump.
2021-03-16 10:38:41 +01:00
Anton Khirnov
8a129077cc lavc: replace internal use of AV_CODEC_CAP_AUTO_THREADS with an internal cap
AV_CODEC_CAP_AUTO_THREADS was originally added in b4d44a45f9a to mark
codecs that spawn threads internally and are able to select an optimal
threads count by themselves (all such codecs are wrappers around
external libraries). It is used by lavc generic code to check whether it
should handle thread_count=0 itself or pass the zero directly to the
codec implementation. Within this meaning, it is clearly supposed to be
an internal cap rather than a public one, since from the viewpoint of a
libavcodec user, lavc ALWAYS handles thread_count=0. Whether it happens
in the generic code or within the codec internals is not a meaningful
difference for the caller.

External aspects of this flag will be dealt with in the following
commit.
2021-03-16 10:34:29 +01:00
Bohan Li
82aab8a4ee avcodec/libaomenc: add support for setting arbitrary libaom options
A new key & value API lets us gain access to newly added parameters
without adding explicit support for them in our wrapper. Add an
option utilizing this functionality in a similar manner to other
encoder libraries' wrappers.

Signed-off-by: Bohan Li <bohanli@google.com>
2021-02-10 11:52:46 +02:00
Philip Langdale
40135829b6 avcodec/libaom: Support monochrome encoding with libaom >= 2.0.1
Monochrome encoding with libaom was buggy for a long time, but this was
finally sorted out in libaom 2.0.1 (2.0.0 is almost there but was still
buggy in realtime mode).

We'll keep support for libaom 1.x around until the LTS distros that
include it are EOL (which is still a long time from now).

Fixes: https://trac.ffmpeg.org/ticket/7599
2020-12-08 15:31:39 -08:00
Wang Cao
017bf9643f 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>
2020-07-24 19:10:10 -07:00
Wang Cao
498ad7b37c 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>
2020-07-24 19:10:10 -07:00
James Almer
36e51c190b avcodec/libaomenc: use pix_fmt descriptors where useful
Reviewed-by: Lynne <dev@lynne.ee>
Signed-off-by: James Almer <jamrial@gmail.com>
2020-07-17 18:23:45 -03:00
Lynne
6a2f3f60ae
libaomenc: enable 8, 10 and 12 bit RGB encoding
RGB pixel formats are one occasion where by pixel format we mean
pixel format, primaries, transfer characteristic, and matrix coeffs,
so we have to manually set them as they're set to unspecified by
default, despite there only being a single possible combination.
2020-07-17 21:13:10 +01:00
James Zern
d294716c22 avcodec/libaomenc: fix build w/libaom v1.0.0
broken since:
aa5c6f382b avcodec/libaomenc: Add command-line options to control the use of partition tools

Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: James Zern <jzern@google.com>
2020-07-08 10:12:27 -07:00
Wang Cao
297d5a110b avcodec/libaomenc: Add command-line options for intra-coding tools
Signed-off-by: Wang Cao <wangcao@google.com>
Signed-off-by: James Zern <jzern@google.com>
2020-07-01 11:55:04 -07:00
Wang Cao
aa5c6f382b avcodec/libaomenc: Add command-line options to control the use of partition tools
This patch adds the control for enabling rectangular partitions, 1:4/4:1
partitions and AB shape partitions.

Signed-off-by: Wang Cao <wangcao@google.com>
Signed-off-by: James Zern <jzern@google.com>
2020-07-01 11:54:56 -07:00
James Almer
82b64e9bf6 avcodec: add AV1 profiles to profile.h
Signed-off-by: James Almer <jamrial@gmail.com>
2020-06-25 23:36:29 -03:00
James Almer
49d37b4b61 avcodec/libaomenc: remove the experimental flag when using libaom 2.0.0 or newer
Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2020-06-06 01:04:39 -03:00
James Almer
6e1903938b avcodec/internal: move packet related functions to their own header
Signed-off-by: James Almer <jamrial@gmail.com>
2020-06-02 19:02:12 -03:00
James Zern
0ece80559a avcodec/libaomenc,cosmetics: fix a typo
tradeof -> trade-off

Signed-off-by: James Zern <jzern@google.com>
2020-04-11 15:22:35 -07:00
Wang Cao
bd3389e9f4 avcodec/libaomenc.c: Add a libaom command-line option 'tune'
Signed-off-by: Wang Cao <wangcao@google.com>
Signed-off-by: James Zern <jzern@google.com>
2020-04-11 15:12:34 -07:00
James Almer
c461500c5e avcodec/libaomenc: add an option to set the encoder "usage"
This allows the user enable the realtime encoding speed mode

Reviewed-by: James Zern <jzern@google.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2020-01-24 20:03:46 -03:00
Wang Cao
8c9d82af6b Add a commandline option to control loop restoration for libaom
Signed-off-by: Wang Cao <wangcao@google.com>
Signed-off-by: James Zern <jzern@google.com>
2020-01-17 14:46:50 -08:00
elliottk
ea673a0edb Delete unused branch in libaomenc
this branch is leftover from libvpxenc+vp8

Signed-off-by: James Zern <jzern@google.com>
2019-09-19 23:56:03 -07:00
elliottk
711c59bc57 Change libaom default to crf=32.
Current default is 256kbps, which produces inconsistent
results (too high for low-res, too low for hi-res).
Use CRF instead, which will adapt.

Signed-off-by: James Zern <jzern@google.com>
2019-08-23 10:56:34 -07:00
Carl Eugen Hoyos
1e8475b507 lavc/libaomenc: Mark a potentially unused variable as av_unused.
Fixes a warning:
libavcodec/libaomenc.c:816:9: warning: unused variable ‘pict_type’
2019-04-16 14:20:43 +02:00
James Almer
0e1ea034d8 avcodec/libaomenc: fix range of values for enable-intrabc option
Signed-off-by: James Almer <jamrial@gmail.com>
2019-04-02 19:54:34 -03:00
James Almer
0856c5da07 avcodec/libaomenc: fix default value for row-mt option
Signed-off-by: James Almer <jamrial@gmail.com>
2019-03-29 14:55:00 -03:00
Sam John via ffmpeg-devel
995889abbf avcodec/libaomenc: Added more commandline options
The following are the newly added options:
arnr_max_frames, arnr_strength, aq_mode, denoise_noise_level, denoise_block_size,
rc_undershoot_pct, rc_overshoot_pct, minsection_pct, maxsection_pct, frame_parallel,
enable_cdef, enable_global_motion, and intrabc.

Also added macros for compiling for aom 1.0.0 and fixed the default values.

Signed-off-by: James Almer <jamrial@gmail.com>
2019-03-29 14:53:55 -03:00
Helmut K. C. Tessarek
aaf9171574 libavcodec/libaomenc: fix breakage from upstream
commit https://aomedia.googlesource.com/aom/+/4667aa1a373566e9c124afcd58c71731ab0d7377
changed parts of the code that broke compilation of libavcodec/libaomenc.c

Signed-off-by: James Almer <jamrial@gmail.com>
2018-12-19 15:31:28 -03:00
James Almer
d12d4d4515 avcodec/libaomenc: add row-mt option
Default to disable, same as aomenc.

Fixes ticket #7598

Signed-off-by: James Almer <jamrial@gmail.com>
2018-12-09 15:23:00 -03:00
Jun Zhao
b87063c06d lavc/libaomenc: Add a maximum constraint of 64 encoder threads.
fixed the error in Intel(R) Xeon(R) Gold 6152 CPU like:
[libaom-av1 @ 0x469f340] Failed to initialize encoder: Invalid parameter
[libaom-av1 @ 0x469f340]   Additional information: g_threads out of range [..MAX_NUM_THREADS]

Signed-off-by: Jun Zhao <mypopydev@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2018-11-29 21:37:49 -03:00
James Almer
2ddaaaf595 avcodec/libaomenc: increase the default bitrate
aom_codec_enc_config_default() sets it to 256kbps, so don't replace
it with 200kbps.

See https://bugs.chromium.org/p/aomedia/issues/detail?id=2219

Signed-off-by: James Almer <jamrial@gmail.com>
2018-11-26 19:08:45 -03:00
Mark Thompson
e3991a5a45 libaomenc: Drop unused noise-sensitivity option 2018-11-18 22:07:42 +00:00
Mark Thompson
7070955d43 libaomenc: Add support for tiles
Adds an option to specify the number of tile rows and columns, then uses
a uniform tiling if possible and otherwise a fixed tiling with equal-sized
tiles to fill the frame.

Also adds -tile-columns and -tile-rows options to make tilings with
power-of-two numbers of tiles, matching the behaviour of the libvpx/VP9
encoder.
2018-10-28 16:42:41 +00:00
Sam John
e265832c37 libavcodec/libaomenc.c: Added code for computing PSNR/SSIM
Signed-off-by: James Almer <jamrial@gmail.com>
2018-10-11 22:06:40 -03:00