[FFmpeg-devel] Re: [PATCH] WIP: avfilter: add Bungee audio stretch filter (PR #20697)

2025-10-18 Thread john--- via ffmpeg-devel
Thank you for taking a look. Bungee is the result of independent research and 
optimisation. It was released in Feb 2024 as MPL v2.0. Bungee Pro was released 
alongside Bungee: although it shares an API, its algorithms are proprietary, 
its audio quality is industry leading and it is highly optimised for web and 
mobile platforms.

I don't like to compare to other implementations, but since you asked, Nicolas, 
here are three main differences between libbungee and librubberband:
1. Bungee is a new and different algorithm. In my opinion, the audio quality is 
improved in many situations, avoiding some of librubberband's artifacts. Here 
is a random example at 56% input tempo, taken from the comparison page on the 
Bungee site:
https://bungee.parabolaresearch.com/audio/bungee/wrong-0.56-0.aac
https://bungee.parabolaresearch.com/audio/rubberband/wrong-0.56-0.aac
That said, such comparisons are subjective and very dependent upon the input 
audio and on the listener. And Bungee is still far from the perfect time 
stretcher (Bungee Pro is closer but I'll not say more about that...) 
2. Bungee can be faster than rubberband: 1.7x faster in a quick test on Mac M4 
of a tempo change to 56% of original tempo
3. Bungee has a different license: MPL-2.0 which is compatible with LGPL-2.1. 
librubberband is GPL-2.0 which requires --enable-gpl

This PR is an offer of maybe useful code and I won't be at all offended if 
Bungee and FFmpeg are not a good fit at this time.

John
___
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]


[FFmpeg-devel] [PATCH] Added more commandline options for libaom encoder.

2019-03-29 Thread Sam John via ffmpeg-devel
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.
---
 libavcodec/libaomenc.c | 97 --
 1 file changed, 93 insertions(+), 4 deletions(-)

diff --git a/libavcodec/libaomenc.c b/libavcodec/libaomenc.c
index faec61cacd..6d2441b4ed 100644
--- a/libavcodec/libaomenc.c
+++ b/libavcodec/libaomenc.c
@@ -66,36 +66,69 @@ typedef struct AOMEncoderContext {
 struct FrameListData *coded_frame_list;
 int cpu_used;
 int auto_alt_ref;
+int arnr_max_frames;
+int arnr_strength;
+int aq_mode;
 int lag_in_frames;
 int error_resilient;
 int crf;
 int static_thresh;
 int drop_threshold;
+int denoise_noise_level;
+int denoise_block_size;
 uint64_t sse[4];
 int have_sse; /**< true if we have pending sse[] */
 uint64_t frame_number;
+int rc_undershoot_pct;
+int rc_overshoot_pct;
+int minsection_pct;
+int maxsection_pct;
+int frame_parallel;
 int tile_cols, tile_rows;
 int tile_cols_log2, tile_rows_log2;
 aom_superblock_size_t superblock_size;
 int uniform_tiles;
 int row_mt;
+int enable_cdef;
+int enable_global_motion;
+int enable_intrabc;
 } AOMContext;
 
 static const char *const ctlidstr[] = {
 [AOME_SET_CPUUSED]  = "AOME_SET_CPUUSED",
 [AOME_SET_CQ_LEVEL] = "AOME_SET_CQ_LEVEL",
 [AOME_SET_ENABLEAUTOALTREF] = "AOME_SET_ENABLEAUTOALTREF",
+[AOME_SET_ARNR_MAXFRAMES]   = "AOME_SET_ARNR_MAXFRAMES",
+[AOME_SET_ARNR_STRENGTH]= "AOME_SET_ARNR_STRENGTH",
 [AOME_SET_STATIC_THRESHOLD] = "AOME_SET_STATIC_THRESHOLD",
 [AV1E_SET_COLOR_RANGE]  = "AV1E_SET_COLOR_RANGE",
 [AV1E_SET_COLOR_PRIMARIES]  = "AV1E_SET_COLOR_PRIMARIES",
 [AV1E_SET_MATRIX_COEFFICIENTS] = "AV1E_SET_MATRIX_COEFFICIENTS",
 [AV1E_SET_TRANSFER_CHARACTERISTICS] = "AV1E_SET_TRANSFER_CHARACTERISTICS",
+[AV1E_SET_AQ_MODE]  = "AV1E_SET_AQ_MODE",
+[AV1E_SET_FRAME_PARALLEL_DECODING] = "AV1E_SET_FRAME_PARALLEL_DECODING",
 [AV1E_SET_SUPERBLOCK_SIZE]  = "AV1E_SET_SUPERBLOCK_SIZE",
 [AV1E_SET_TILE_COLUMNS] = "AV1E_SET_TILE_COLUMNS",
 [AV1E_SET_TILE_ROWS]= "AV1E_SET_TILE_ROWS",
 #ifdef AOM_CTRL_AV1E_SET_ROW_MT
 [AV1E_SET_ROW_MT]   = "AV1E_SET_ROW_MT",
 #endif
+#ifdef AV1E_SET_DENOISE_NOISE_LEVEL
+[AV1E_SET_DENOISE_NOISE_LEVEL] =  "AV1E_SET_DENOISE_NOISE_LEVEL",
+#endif
+#ifdef AV1E_SET_DENOISE_BLOCK_SIZE
+[AV1E_SET_DENOISE_BLOCK_SIZE] =   "AV1E_SET_DENOISE_BLOCK_SIZE",
+#endif
+#ifdef AV1E_SET_MAX_REFERENCE_FRAMES
+[AV1E_SET_MAX_REFERENCE_FRAMES] = "AV1E_SET_MAX_REFERENCE_FRAMES",
+#endif
+#ifdef AV1E_SET_ENABLE_GLOBAL_MOTION
+[AV1E_SET_ENABLE_GLOBAL_MOTION] = "AV1E_SET_ENABLE_GLOBAL_MOTION",
+#endif
+#ifdef AV1E_SET_ENABLE_INTRABC
+[AV1E_SET_ENABLE_INTRABC] = "AV1E_SET_ENABLE_INTRABC",
+#endif
+[AV1E_SET_ENABLE_CDEF]  = "AV1E_SET_ENABLE_CDEF",
 };
 
 static av_cold void log_encoder_error(AVCodecContext *avctx, const char *desc)
@@ -567,10 +600,14 @@ static av_cold int aom_init(AVCodecContext *avctx,
 
 // 0-100 (0 => CBR, 100 => VBR)
 enccfg.rc_2pass_vbr_bias_pct   = round(avctx->qcompress * 100);
-if (avctx->bit_rate)
+if (ctx->minsection_pct >= 0)
+enccfg.rc_2pass_vbr_minsection_pct = ctx->minsection_pct;
+else if (avctx->bit_rate)
 enccfg.rc_2pass_vbr_minsection_pct =
 avctx->rc_min_rate * 100LL / avctx->bit_rate;
-if (avctx->rc_max_rate)
+if (ctx->maxsection_pct >= 0)
+enccfg.rc_2pass_vbr_maxsection_pct = ctx->maxsection_pct;
+else if (avctx->rc_max_rate)
 enccfg.rc_2pass_vbr_maxsection_pct =
 avctx->rc_max_rate * 100LL / avctx->bit_rate;
 
@@ -582,6 +619,11 @@ static av_cold int aom_init(AVCodecContext *avctx,
 avctx->rc_initial_buffer_occupancy * 1000LL / avctx->bit_rate;
 enccfg.rc_buf_optimal_sz = enccfg.rc_buf_sz * 5 / 6;
 
+if (ctx->rc_undershoot_pct >= 0)
+enccfg.rc_undershoot_pct = ctx->rc_undershoot_pct;
+if (ctx->rc_overshoot_pct >= 0)
+enccfg.rc_overshoot_pct = ctx->rc_overshoot_pct;
+
 // _enc_init() will balk if kf_min_dist differs from max w/AOM_KF_AUTO
 if (avctx->keyint_min >= 0 && avctx->keyint_min == avctx->gop_size)
 enccfg.kf_min_dist = avctx->keyint_min;
@@ -643,7 +685,12 @@ static av_cold int aom_init(AVCodecContext *avctx,
 codecctl_int(avctx, AOME_SET_CPUUSED, ctx->cpu_used);
 if (ctx->auto_alt_ref >= 0)
 codecctl_int(avctx, AOME_SET_ENABLEAUTOALTREF, ctx->auto_alt_ref);
-
+if (ctx->arnr_max_frames >= 0)
+codecctl_int(avctx, AOME_SET_ARNR_MAXFRAMES,   ctx->arnr_max_frames);
+if (ctx->arnr_strength >= 0

[FFmpeg-devel] [PATCH] Updated the documentation about the encoding options for libaom-av1 encoder.

2019-04-02 Thread Sam John via ffmpeg-devel
---
 doc/encoders.texi | 46 ++
 1 file changed, 46 insertions(+)

diff --git a/doc/encoders.texi b/doc/encoders.texi
index 94337d009c..a669ac3739 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -1434,6 +1434,12 @@ value is 1, which will be slow and high quality.
 Enable use of alternate reference frames.  Defaults to the internal
 default of the library.
 
+@item arnr-max-frames
+Set altref noise reduction max frame count.
+
+@item arnr-strength
+Set altref noise reduction filter strength.
+
 @item lag-in-frames
 Set the maximum number of frames which the encoder may keep in flight
 at any one time for lookahead purposes.  Defaults to the internal
@@ -1466,6 +1472,33 @@ buffer falls below this percentage, frames will be 
dropped until it
 has refilled above the threshold.  Defaults to zero (no frames are
 dropped).
 
+@item denoise-noise-level
+Amount of noise to be removed for grain synthesis. Grain synthesis is disabled 
if 
+it is not set or set to 0.
+
+@item denoise-block-size
+Block size used for denoising for grain synthesis. If not set, AV1 codec
+uses the default value of 32.
+
+@item undershoot-pct
+Set datarate undershoot (min) percentage of the target bitrate.
+
+@item overshoot-pct
+Set datarate overshoot (max) percentage of the target bitrate.
+
+@item maxrate (@emph{maxsection-pct})
+Set GOP max bitrate in bits/s. Note @command{libaom-av1}'s option 
maxsection-pct is
+specified as a percentage of the target bitrate. If maxsection-pct is not set, 
the
+libaomenc wrapper computes it as follows: @code{(maxrate * 100 / bitrate)}.
+
+@item minrate (@emph{minsection-pct})
+Set GOP min bitrate in bits/s. Note @command{libaom-av1}'s option 
minsection-pct is
+specified as a percentage of the target bitrate. If minsection-pct is not set, 
the
+libaomenc wrapper computes it as follows: @code{(minrate * 100 / bitrate)}.
+
+@item frame-parallel @var{boolean}
+Enable frame parallel decodability features. The default value is true.
+
 @item tiles
 Set the number of tiles to encode the input video with, as columns x
 rows.  Larger numbers allow greater parallelism in both encoding and
@@ -1480,6 +1513,19 @@ Provided for compatibility with libvpx/VP9.
 @item row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
 Enable row based multi-threading. Disabled by default.
 
+@item enable-cdef @var{boolean}
+Flag to enable or disable Constrianed Directional Enhancement Filter. The 
libaom-av1
+encoder enables CDEF by default.
+
+@item enable-global-motion @var{boolean}
+Flag to enable or disable the use of global motion for block prediction. 
+The default value is true.
+
+@item enable-intrabc @var{boolean}
+Flag to enable or disable block copy mode for intra block prediction. This 
mode is
+useful for screen content. The default value is true.
+
+
 @end table
 
 @section libkvazaar
-- 
2.21.0.392.gf8f6787159e-goog

___
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

[FFmpeg-devel] [PATCH] Updated the documentation for libaom encoder options.

2019-04-09 Thread Sam John via ffmpeg-devel
---
 doc/encoders.texi | 47 +++
 1 file changed, 47 insertions(+)

diff --git a/doc/encoders.texi b/doc/encoders.texi
index 94337d009c..15b9199549 100644
--- a/doc/encoders.texi
+++ b/doc/encoders.texi
@@ -1434,6 +1434,16 @@ value is 1, which will be slow and high quality.
 Enable use of alternate reference frames.  Defaults to the internal
 default of the library.
 
+@item arnr-max-frames
+Set altref noise reduction max frame count.
+
+@item arnr-strength
+Set altref noise reduction filter strength.
+
+@item aq-mode
+Set adaptive quantization mode (0: off (default), 1: variance 2: complexity, 3:
+cyclic refresh).
+
 @item lag-in-frames
 Set the maximum number of frames which the encoder may keep in flight
 at any one time for lookahead purposes.  Defaults to the internal
@@ -1466,6 +1476,31 @@ buffer falls below this percentage, frames will be 
dropped until it
 has refilled above the threshold.  Defaults to zero (no frames are
 dropped).
 
+@item denoise-noise-level
+Amount of noise to be removed for grain synthesis. Grain synthesis is disabled 
if 
+this option is not set or set to 0.
+
+@item denoise-block-size
+Block size used for denoising for grain synthesis. If not set, AV1 codec
+uses the default value of 32.
+
+@item undershoot-pct
+Set datarate undershoot (min) percentage of the target bitrate.
+
+@item overshoot-pct
+Set datarate overshoot (max) percentage of the target bitrate.
+
+@item maxsection-pct
+Maximum percentage variation of the GOP bitrate from the target bitrate. If 
maxsection-pct
+is not set, the libaomenc wrapper computes it as follows: @code{(maxrate * 100 
/ bitrate)}.
+
+@item minrate
+Minimum percentage variation of the GOP bitrate from the target bitrate. If 
minsection-pct
+is not set, the libaomenc wrapper computes it as follows: @code{(minrate * 100 
/ bitrate)}.
+
+@item frame-parallel @var{boolean}
+Enable frame parallel decodability features. The default value is true.
+
 @item tiles
 Set the number of tiles to encode the input video with, as columns x
 rows.  Larger numbers allow greater parallelism in both encoding and
@@ -1480,6 +1515,18 @@ Provided for compatibility with libvpx/VP9.
 @item row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
 Enable row based multi-threading. Disabled by default.
 
+@item enable-cdef @var{boolean}
+Flag to enable or disable Constrained Directional Enhancement Filter. The 
libaom-av1
+encoder enables CDEF by default.
+
+@item enable-global-motion @var{boolean}
+Flag to enable or disable the use of global motion for block prediction. 
+The default value is true.
+
+@item enable-intrabc @var{boolean}
+Flag to enable or disable block copy mode for intra block prediction. This 
mode is
+useful for screen content. The default value is true.
+
 @end table
 
 @section libkvazaar
-- 
2.21.0.392.gf8f6787159e-goog

___
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Updated the documentation about the encoding options for libaom-av1 encoder.

2019-04-09 Thread Sam John via ffmpeg-devel
James,

Thanks for the review. I am sending the updated patch now.

libaom-av1 enables  global-motion/intrabc by default. These options were
added to enable/disable these tools to reduce the complexity. The default
value is set to -1.





On Thu, Apr 4, 2019 at 10:31 AM James Almer  wrote:

> On 4/2/2019 9:49 PM, Sam John via ffmpeg-devel wrote:
> > ---
> >  doc/encoders.texi | 46 ++
> >  1 file changed, 46 insertions(+)
> >
> > diff --git a/doc/encoders.texi b/doc/encoders.texi
> > index 94337d009c..a669ac3739 100644
> > --- a/doc/encoders.texi
> > +++ b/doc/encoders.texi
> > @@ -1434,6 +1434,12 @@ value is 1, which will be slow and high quality.
> >  Enable use of alternate reference frames.  Defaults to the internal
> >  default of the library.
> >
> > +@item arnr-max-frames
> > +Set altref noise reduction max frame count.
> > +
> > +@item arnr-strength
> > +Set altref noise reduction filter strength.
> > +
> >  @item lag-in-frames
> >  Set the maximum number of frames which the encoder may keep in flight
> >  at any one time for lookahead purposes.  Defaults to the internal
> > @@ -1466,6 +1472,33 @@ buffer falls below this percentage, frames will
> be dropped until it
> >  has refilled above the threshold.  Defaults to zero (no frames are
> >  dropped).
> >
> > +@item denoise-noise-level
> > +Amount of noise to be removed for grain synthesis. Grain synthesis is
> disabled if
> > +it is not set or set to 0.
> > +
> > +@item denoise-block-size
> > +Block size used for denoising for grain synthesis. If not set, AV1 codec
> > +uses the default value of 32.
> > +
> > +@item undershoot-pct
> > +Set datarate undershoot (min) percentage of the target bitrate.
> > +
> > +@item overshoot-pct
> > +Set datarate overshoot (max) percentage of the target bitrate.
> > +
> > +@item maxrate (@emph{maxsection-pct})
> > +Set GOP max bitrate in bits/s. Note @command{libaom-av1}'s option
> maxsection-pct is
> > +specified as a percentage of the target bitrate. If maxsection-pct is
> not set, the
> > +libaomenc wrapper computes it as follows: @code{(maxrate * 100 /
> bitrate)}.
> > +
> > +@item minrate (@emph{minsection-pct})
> > +Set GOP min bitrate in bits/s. Note @command{libaom-av1}'s option
> minsection-pct is
> > +specified as a percentage of the target bitrate. If minsection-pct is
> not set, the
> > +libaomenc wrapper computes it as follows: @code{(minrate * 100 /
> bitrate)}.
> > +
> > +@item frame-parallel @var{boolean}
> > +Enable frame parallel decodability features. The default value is true.
> > +
> >  @item tiles
> >  Set the number of tiles to encode the input video with, as columns x
> >  rows.  Larger numbers allow greater parallelism in both encoding and
> > @@ -1480,6 +1513,19 @@ Provided for compatibility with libvpx/VP9.
> >  @item row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
> >  Enable row based multi-threading. Disabled by default.
> >
> > +@item enable-cdef @var{boolean}
> > +Flag to enable or disable Constrianed Directional Enhancement Filter.
> The libaom-av1
> > +encoder enables CDEF by default.
> > +
> > +@item enable-global-motion @var{boolean}
> > +Flag to enable or disable the use of global motion for block
> prediction.
> > +The default value is true.
> > +
> > +@item enable-intrabc @var{boolean}
> > +Flag to enable or disable block copy mode for intra block prediction.
> This mode is
> > +useful for screen content. The default value is true.
>
> Maybe "The libaom-av1 encoder enables global-motion/intrabc by default"
> like you did for cdef. For all three the default value is -1, meaning up
> to the library.
>
> > +
> > +
> >  @end table
> >
> >  @section libkvazaar
> >
>
> ___
> ffmpeg-devel mailing list
> [email protected]
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> [email protected] with subject "unsubscribe".
___
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Updated the documentation for libaom encoder options.

2019-04-17 Thread Sam John via ffmpeg-devel
Hi,

Is there anything to be done for this patch ?

Thanks
Sam John

On Tue, Apr 9, 2019 at 5:55 PM Sam John  wrote:

> ---
>  doc/encoders.texi | 47 +++
>  1 file changed, 47 insertions(+)
>
> diff --git a/doc/encoders.texi b/doc/encoders.texi
> index 94337d009c..15b9199549 100644
> --- a/doc/encoders.texi
> +++ b/doc/encoders.texi
> @@ -1434,6 +1434,16 @@ value is 1, which will be slow and high quality.
>  Enable use of alternate reference frames.  Defaults to the internal
>  default of the library.
>
> +@item arnr-max-frames
> +Set altref noise reduction max frame count.
> +
> +@item arnr-strength
> +Set altref noise reduction filter strength.
> +
> +@item aq-mode
> +Set adaptive quantization mode (0: off (default), 1: variance 2:
> complexity, 3:
> +cyclic refresh).
> +
>  @item lag-in-frames
>  Set the maximum number of frames which the encoder may keep in flight
>  at any one time for lookahead purposes.  Defaults to the internal
> @@ -1466,6 +1476,31 @@ buffer falls below this percentage, frames will be
> dropped until it
>  has refilled above the threshold.  Defaults to zero (no frames are
>  dropped).
>
> +@item denoise-noise-level
> +Amount of noise to be removed for grain synthesis. Grain synthesis is
> disabled if
> +this option is not set or set to 0.
> +
> +@item denoise-block-size
> +Block size used for denoising for grain synthesis. If not set, AV1 codec
> +uses the default value of 32.
> +
> +@item undershoot-pct
> +Set datarate undershoot (min) percentage of the target bitrate.
> +
> +@item overshoot-pct
> +Set datarate overshoot (max) percentage of the target bitrate.
> +
> +@item maxsection-pct
> +Maximum percentage variation of the GOP bitrate from the target bitrate.
> If maxsection-pct
> +is not set, the libaomenc wrapper computes it as follows: @code{(maxrate
> * 100 / bitrate)}.
> +
> +@item minrate
> +Minimum percentage variation of the GOP bitrate from the target bitrate.
> If minsection-pct
> +is not set, the libaomenc wrapper computes it as follows: @code{(minrate
> * 100 / bitrate)}.
> +
> +@item frame-parallel @var{boolean}
> +Enable frame parallel decodability features. The default value is true.
> +
>  @item tiles
>  Set the number of tiles to encode the input video with, as columns x
>  rows.  Larger numbers allow greater parallelism in both encoding and
> @@ -1480,6 +1515,18 @@ Provided for compatibility with libvpx/VP9.
>  @item row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
>  Enable row based multi-threading. Disabled by default.
>
> +@item enable-cdef @var{boolean}
> +Flag to enable or disable Constrained Directional Enhancement Filter. The
> libaom-av1
> +encoder enables CDEF by default.
> +
> +@item enable-global-motion @var{boolean}
> +Flag to enable or disable the use of global motion for block prediction.
> +The default value is true.
> +
> +@item enable-intrabc @var{boolean}
> +Flag to enable or disable block copy mode for intra block prediction.
> This mode is
> +useful for screen content. The default value is true.
> +
>  @end table
>
>  @section libkvazaar
> --
> 2.21.0.392.gf8f6787159e-goog
>
>
___
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".