Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* Re: [FFmpeg-devel] [PATCH 1/1] [doc/filters] add nvidia cuda and cuda npp sections
       [not found] <20250116004751.56789-1-danyaschenko@gmail.com>
@ 2025-01-26 10:55 ` Gyan Doshi
  2025-01-28 19:12   ` [FFmpeg-devel] [PATCH 1/2] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters Danil Iashchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Gyan Doshi @ 2025-01-26 10:55 UTC (permalink / raw)
  To: ffmpeg-devel



On 2025-01-16 06:17 am, Danil Iashchenko wrote:
> Add Nvidia Cuda and Cuda NPP sections for video filters.
> ---
>   doc/filters.texi | 1545 +++++++++++++++++++++++-----------------------
>   1 file changed, 778 insertions(+), 767 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index b926b865ae..efa5e84f29 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -8619,45 +8619,6 @@ Set planes to filter. Default is first only.
>   
>   This filter supports the all above options as @ref{commands}.
>   
> -@section bilateral_cuda
> -CUDA accelerated bilateral filter, an edge preserving filter.
> -This filter is mathematically accurate thanks to the use of GPU acceleration.
> -For best output quality, use one to one chroma subsampling, i.e. yuv444p format.
> -
> -The filter accepts the following options:
> -@table @option
> -@item sigmaS
> -Set sigma of gaussian function to calculate spatial weight, also called sigma space.
> -Allowed range is 0.1 to 512. Default is 0.1.
> -
> -@item sigmaR
> -Set sigma of gaussian function to calculate color range weight, also called sigma color.
> -Allowed range is 0.1 to 512. Default is 0.1.
> -
> -@item window_size
> -Set window size of the bilateral function to determine the number of neighbours to loop on.
> -If the number entered is even, one will be added automatically.
> -Allowed range is 1 to 255. Default is 1.
> -@end table
> -@subsection Examples
> -
> -@itemize
> -@item
> -Apply the bilateral filter on a video.
> -
> -@example
> -./ffmpeg -v verbose \
> --hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
> --init_hw_device cuda \
> --filter_complex \
> -" \
> -[0:v]scale_cuda=format=yuv444p[scaled_video];
> -[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
> --an -sn -c:v h264_nvenc -cq 20 out.mp4
> -@end example
> -
> -@end itemize
> -
>   @section bitplanenoise
>   
>   Show and measure bit plane noise.
> @@ -9243,58 +9204,6 @@ Only deinterlace frames marked as interlaced.
>   The default value is @code{all}.
>   @end table
>   
> -@section bwdif_cuda
> -
> -Deinterlace the input video using the @ref{bwdif} algorithm, but implemented
> -in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
> -and/or nvenc.
> -
> -It accepts the following parameters:
> -
> -@table @option
> -@item mode
> -The interlacing mode to adopt. It accepts one of the following values:
> -
> -@table @option
> -@item 0, send_frame
> -Output one frame for each frame.
> -@item 1, send_field
> -Output one frame for each field.
> -@end table
> -
> -The default value is @code{send_field}.
> -
> -@item parity
> -The picture field parity assumed for the input interlaced video. It accepts one
> -of the following values:
> -
> -@table @option
> -@item 0, tff
> -Assume the top field is first.
> -@item 1, bff
> -Assume the bottom field is first.
> -@item -1, auto
> -Enable automatic detection of field parity.
> -@end table
> -
> -The default value is @code{auto}.
> -If the interlacing is unknown or the decoder does not export this information,
> -top field first will be assumed.
> -
> -@item deint
> -Specify which frames to deinterlace. Accepts one of the following
> -values:
> -
> -@table @option
> -@item 0, all
> -Deinterlace all frames.
> -@item 1, interlaced
> -Only deinterlace frames marked as interlaced.
> -@end table
> -
> -The default value is @code{all}.
> -@end table
> -
>   @section ccrepack
>   
>   Repack CEA-708 closed captioning side data
> @@ -9408,48 +9317,6 @@ ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_compl
>   @end example
>   @end itemize
>   
> -@section chromakey_cuda
> -CUDA accelerated YUV colorspace color/chroma keying.
> -
> -This filter works like normal chromakey filter but operates on CUDA frames.
> -for more details and parameters see @ref{chromakey}.
> -
> -@subsection Examples
> -
> -@itemize
> -@item
> -Make all the green pixels in the input video transparent and use it as an overlay for another video:
> -
> -@example
> -./ffmpeg \
> -    -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
> -    -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
> -    -init_hw_device cuda \
> -    -filter_complex \
> -    " \
> -        [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
> -        [1:v]scale_cuda=format=yuv420p[base]; \
> -        [base][overlay_video]overlay_cuda" \
> -    -an -sn -c:v h264_nvenc -cq 20 output.mp4
> -@end example
> -
> -@item
> -Process two software sources, explicitly uploading the frames:
> -
> -@example
> -./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
> -    -f lavfi -i color=size=800x600:color=white,format=yuv420p \
> -    -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
> -    -filter_complex \
> -    " \
> -        [0]hwupload[under]; \
> -        [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
> -        [under][over]overlay_cuda" \
> -    -c:v hevc_nvenc -cq 18 -preset slow output.mp4
> -@end example
> -
> -@end itemize
> -
>   @section chromanr
>   Reduce chrominance noise.
>   
> @@ -10427,38 +10294,6 @@ For example to convert the input to SMPTE-240M, use the command:
>   colorspace=smpte240m
>   @end example
>   
> -@section colorspace_cuda
> -
> -CUDA accelerated implementation of the colorspace filter.
> -
> -It is by no means feature complete compared to the software colorspace filter,
> -and at the current time only supports color range conversion between jpeg/full
> -and mpeg/limited range.
> -
> -The filter accepts the following options:
> -
> -@table @option
> -@item range
> -Specify output color range.
> -
> -The accepted values are:
> -@table @samp
> -@item tv
> -TV (restricted) range
> -
> -@item mpeg
> -MPEG (restricted) range
> -
> -@item pc
> -PC (full) range
> -
> -@item jpeg
> -JPEG (full) range
> -
> -@end table
> -
> -@end table
> -
>   @section colortemperature
>   Adjust color temperature in video to simulate variations in ambient color temperature.
>   
> @@ -17058,32 +16893,6 @@ ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STAR
>   @end example
>   @end itemize
>   
> -@section libvmaf_cuda
> -
> -This is the CUDA variant of the @ref{libvmaf} filter. It only accepts CUDA frames.
> -
> -It requires Netflix's vmaf library (libvmaf) as a pre-requisite.
> -After installing the library it can be enabled using:
> -@code{./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf}.
> -
> -@subsection Examples
> -@itemize
> -
> -@item
> -Basic usage showing CUVID hardware decoding and CUDA scaling with @ref{scale_cuda}:
> -@example
> -ffmpeg \
> -    -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \
> -    -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \
> -    -filter_complex "
> -        [0:v]scale_cuda=format=yuv420p[dis]; \
> -        [1:v]scale_cuda=format=yuv420p[ref]; \
> -        [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json
> -    " \
> -    -f null -
> -@end example
> -@end itemize
> -
>   @section limitdiff
>   Apply limited difference filter using second and optionally third video stream.
>   
> @@ -18977,129 +18786,51 @@ testsrc=s=100x100, split=4 [in0][in1][in2][in3];
>   
>   @end itemize
>   
> -@anchor{overlay_cuda}
> -@section overlay_cuda
> -
> -Overlay one video on top of another.
> -
> -This is the CUDA variant of the @ref{overlay} filter.
> -It only accepts CUDA frames. The underlying input pixel formats have to match.
> +@section owdenoise
>   
> -It takes two inputs and has one output. The first input is the "main"
> -video on which the second input is overlaid.
> +Apply Overcomplete Wavelet denoiser.
>   
> -It accepts the following parameters:
> +The filter accepts the following options:
>   
>   @table @option
> -@item x
> -@item y
> -Set expressions for the x and y coordinates of the overlaid video
> -on the main video.
> +@item depth
> +Set depth.
>   
> -They can contain the following parameters:
> +Larger depth values will denoise lower frequency components more, but
> +slow down filtering.
>   
> -@table @option
> +Must be an int in the range 8-16, default is @code{8}.
>   
> -@item main_w, W
> -@item main_h, H
> -The main input width and height.
> +@item luma_strength, ls
> +Set luma strength.
>   
> -@item overlay_w, w
> -@item overlay_h, h
> -The overlay input width and height.
> +Must be a double value in the range 0-1000, default is @code{1.0}.
>   
> -@item x
> -@item y
> -The computed values for @var{x} and @var{y}. They are evaluated for
> -each new frame.
> +@item chroma_strength, cs
> +Set chroma strength.
>   
> -@item n
> -The ordinal index of the main input frame, starting from 0.
> +Must be a double value in the range 0-1000, default is @code{1.0}.
> +@end table
>   
> -@item pos
> -The byte offset position in the file of the main input frame, NAN if unknown.
> -Deprecated, do not use.
> +@anchor{pad}
> +@section pad
>   
> -@item t
> -The timestamp of the main input frame, expressed in seconds, NAN if unknown.
> +Add paddings to the input image, and place the original input at the
> +provided @var{x}, @var{y} coordinates.
>   
> -@end table
> +It accepts the following parameters:
>   
> -Default value is "0" for both expressions.
> +@table @option
> +@item width, w
> +@item height, h
> +Specify an expression for the size of the output image with the
> +paddings added. If the value for @var{width} or @var{height} is 0, the
> +corresponding input size is used for the output.
>   
> -@item eval
> -Set when the expressions for @option{x} and @option{y} are evaluated.
> +The @var{width} expression can reference the value set by the
> +@var{height} expression, and vice versa.
>   
> -It accepts the following values:
> -@table @option
> -@item init
> -Evaluate expressions once during filter initialization or
> -when a command is processed.
> -
> -@item frame
> -Evaluate expressions for each incoming frame
> -@end table
> -
> -Default value is @option{frame}.
> -
> -@item eof_action
> -See @ref{framesync}.
> -
> -@item shortest
> -See @ref{framesync}.
> -
> -@item repeatlast
> -See @ref{framesync}.
> -
> -@end table
> -
> -This filter also supports the @ref{framesync} options.
> -
> -@section owdenoise
> -
> -Apply Overcomplete Wavelet denoiser.
> -
> -The filter accepts the following options:
> -
> -@table @option
> -@item depth
> -Set depth.
> -
> -Larger depth values will denoise lower frequency components more, but
> -slow down filtering.
> -
> -Must be an int in the range 8-16, default is @code{8}.
> -
> -@item luma_strength, ls
> -Set luma strength.
> -
> -Must be a double value in the range 0-1000, default is @code{1.0}.
> -
> -@item chroma_strength, cs
> -Set chroma strength.
> -
> -Must be a double value in the range 0-1000, default is @code{1.0}.
> -@end table
> -
> -@anchor{pad}
> -@section pad
> -
> -Add paddings to the input image, and place the original input at the
> -provided @var{x}, @var{y} coordinates.
> -
> -It accepts the following parameters:
> -
> -@table @option
> -@item width, w
> -@item height, h
> -Specify an expression for the size of the output image with the
> -paddings added. If the value for @var{width} or @var{height} is 0, the
> -corresponding input size is used for the output.
> -
> -The @var{width} expression can reference the value set by the
> -@var{height} expression, and vice versa.
> -
> -The default value of @var{width} and @var{height} is 0.
> +The default value of @var{width} and @var{height} is 0.
>   
>   @item x
>   @item y
> @@ -21479,11 +21210,9 @@ If the specified expression is not valid, it is kept at its current
>   value.
>   @end table
>   
> -@anchor{scale_cuda}
> -@section scale_cuda
> +@section scale_vt
>   
> -Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
> -Setting the output width and height works in the same way as for the @ref{scale} filter.
> +Scale and convert the color parameters using VTPixelTransferSession.
>   
>   The filter accepts the following options:
>   @table @option
> @@ -21491,390 +21220,117 @@ The filter accepts the following options:
>   @item h
>   Set the output video dimension expression. Default value is the input dimension.
>   
> -Allows for the same expressions as the @ref{scale} filter.
> +@item color_matrix
> +Set the output colorspace matrix.
>   
> -@item interp_algo
> -Sets the algorithm used for scaling:
> +@item color_primaries
> +Set the output color primaries.
>   
> -@table @var
> -@item nearest
> -Nearest neighbour
> +@item color_transfer
> +Set the output transfer characteristics.
>   
> -Used by default if input parameters match the desired output.
> +@end table
>   
> -@item bilinear
> -Bilinear
> +@section scharr
> +Apply scharr operator to input video stream.
>   
> -@item bicubic
> -Bicubic
> +The filter accepts the following option:
>   
> -This is the default.
> +@table @option
> +@item planes
> +Set which planes will be processed, unprocessed planes will be copied.
> +By default value 0xf, all planes will be processed.
>   
> -@item lanczos
> -Lanczos
> +@item scale
> +Set value which will be multiplied with filtered result.
>   
> +@item delta
> +Set value which will be added to filtered result.
>   @end table
>   
> -@item format
> -Controls the output pixel format. By default, or if none is specified, the input
> -pixel format is used.
> -
> -The filter does not support converting between YUV and RGB pixel formats.
> +@subsection Commands
>   
> -@item passthrough
> -If set to 0, every frame is processed, even if no conversion is necessary.
> -This mode can be useful to use the filter as a buffer for a downstream
> -frame-consumer that exhausts the limited decoder frame pool.
> +This filter supports the all above options as @ref{commands}.
>   
> -If set to 1, frames are passed through as-is if they match the desired output
> -parameters. This is the default behaviour.
> +@section scroll
> +Scroll input video horizontally and/or vertically by constant speed.
>   
> -@item param
> -Algorithm-Specific parameter.
> +The filter accepts the following options:
> +@table @option
> +@item horizontal, h
> +Set the horizontal scrolling speed. Default is 0. Allowed range is from -1 to 1.
> +Negative values changes scrolling direction.
>   
> -Affects the curves of the bicubic algorithm.
> +@item vertical, v
> +Set the vertical scrolling speed. Default is 0. Allowed range is from -1 to 1.
> +Negative values changes scrolling direction.
>   
> -@item force_original_aspect_ratio
> -@item force_divisible_by
> -Work the same as the identical @ref{scale} filter options.
> +@item hpos
> +Set the initial horizontal scrolling position. Default is 0. Allowed range is from 0 to 1.
>   
> +@item vpos
> +Set the initial vertical scrolling position. Default is 0. Allowed range is from 0 to 1.
>   @end table
>   
> -@subsection Examples
> -
> -@itemize
> -@item
> -Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
> -@example
> -scale_cuda=-2:720:format=yuv420p
> -@end example
> -
> -@item
> -Upscale to 4K using nearest neighbour algorithm.
> -@example
> -scale_cuda=4096:2160:interp_algo=nearest
> -@end example
> -
> -@item
> -Don't do any conversion or scaling, but copy all input frames into newly allocated ones.
> -This can be useful to deal with a filter and encode chain that otherwise exhausts the
> -decoders frame pool.
> -@example
> -scale_cuda=passthrough=0
> -@end example
> -@end itemize
> -
> -@anchor{scale_npp}
> -@section scale_npp
> -
> -Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
> -format conversion on CUDA video frames. Setting the output width and height
> -works in the same way as for the @var{scale} filter.
> +@subsection Commands
>   
> -The following additional options are accepted:
> +This filter supports the following @ref{commands}:
>   @table @option
> -@item format
> -The pixel format of the output CUDA frames. If set to the string "same" (the
> -default), the input format will be kept. Note that automatic format negotiation
> -and conversion is not yet supported for hardware frames
> +@item horizontal, h
> +Set the horizontal scrolling speed.
> +@item vertical, v
> +Set the vertical scrolling speed.
> +@end table
>   
> -@item interp_algo
> -The interpolation algorithm used for resizing. One of the following:
> -@table @option
> -@item nn
> -Nearest neighbour.
> +@anchor{scdet}
> +@section scdet
>   
> -@item linear
> -@item cubic
> -@item cubic2p_bspline
> -2-parameter cubic (B=1, C=0)
> +Detect video scene change.
>   
> -@item cubic2p_catmullrom
> -2-parameter cubic (B=0, C=1/2)
> +This filter sets frame metadata with mafd between frame, the scene score, and
> +forward the frame to the next filter, so they can use these metadata to detect
> +scene change or others.
>   
> -@item cubic2p_b05c03
> -2-parameter cubic (B=1/2, C=3/10)
> +In addition, this filter logs a message and sets frame metadata when it detects
> +a scene change by @option{threshold}.
>   
> -@item super
> -Supersampling
> +@code{lavfi.scd.mafd} metadata keys are set with mafd for every frame.
>   
> -@item lanczos
> -@end table
> +@code{lavfi.scd.score} metadata keys are set with scene change score for every frame
> +to detect scene change.
>   
> -@item force_original_aspect_ratio
> -Enable decreasing or increasing output video width or height if necessary to
> -keep the original aspect ratio. Possible values:
> +@code{lavfi.scd.time} metadata keys are set with current filtered frame time which
> +detect scene change with @option{threshold}.
>   
> -@table @samp
> -@item disable
> -Scale the video as specified and disable this feature.
> +The filter accepts the following options:
>   
> -@item decrease
> -The output video dimensions will automatically be decreased if needed.
> +@table @option
> +@item threshold, t
> +Set the scene change detection threshold as a percentage of maximum change. Good
> +values are in the @code{[8.0, 14.0]} range. The range for @option{threshold} is
> +@code{[0., 100.]}.
>   
> -@item increase
> -The output video dimensions will automatically be increased if needed.
> +Default value is @code{10.}.
>   
> +@item sc_pass, s
> +Set the flag to pass scene change frames to the next filter. Default value is @code{0}
> +You can enable it if you want to get snapshot of scene change frames only.
>   @end table
>   
> -One useful instance of this option is that when you know a specific device's
> -maximum allowed resolution, you can use this to limit the output video to
> -that, while retaining the aspect ratio. For example, device A allows
> -1280x720 playback, and your video is 1920x800. Using this option (set it to
> -decrease) and specifying 1280x720 to the command line makes the output
> -1280x533.
> +@anchor{selectivecolor}
> +@section selectivecolor
>   
> -Please note that this is a different thing than specifying -1 for @option{w}
> -or @option{h}, you still need to specify the output resolution for this option
> -to work.
> +Adjust cyan, magenta, yellow and black (CMYK) to certain ranges of colors (such
> +as "reds", "yellows", "greens", "cyans", ...). The adjustment range is defined
> +by the "purity" of the color (that is, how saturated it already is).
>   
> -@item force_divisible_by
> -Ensures that both the output dimensions, width and height, are divisible by the
> -given integer when used together with @option{force_original_aspect_ratio}. This
> -works similar to using @code{-n} in the @option{w} and @option{h} options.
> +This filter is similar to the Adobe Photoshop Selective Color tool.
>   
> -This option respects the value set for @option{force_original_aspect_ratio},
> -increasing or decreasing the resolution accordingly. The video's aspect ratio
> -may be slightly modified.
> +The filter accepts the following options:
>   
> -This option can be handy if you need to have a video fit within or exceed
> -a defined resolution using @option{force_original_aspect_ratio} but also have
> -encoder restrictions on width or height divisibility.
> -
> -@item eval
> -Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values:
> -
> -@table @samp
> -@item init
> -Only evaluate expressions once during the filter initialization or when a command is processed.
> -
> -@item frame
> -Evaluate expressions for each incoming frame.
> -
> -@end table
> -
> -@end table
> -
> -The values of the @option{w} and @option{h} options are expressions
> -containing the following constants:
> -
> -@table @var
> -@item in_w
> -@item in_h
> -The input width and height
> -
> -@item iw
> -@item ih
> -These are the same as @var{in_w} and @var{in_h}.
> -
> -@item out_w
> -@item out_h
> -The output (scaled) width and height
> -
> -@item ow
> -@item oh
> -These are the same as @var{out_w} and @var{out_h}
> -
> -@item a
> -The same as @var{iw} / @var{ih}
> -
> -@item sar
> -input sample aspect ratio
> -
> -@item dar
> -The input display aspect ratio. Calculated from @code{(iw / ih) * sar}.
> -
> -@item n
> -The (sequential) number of the input frame, starting from 0.
> -Only available with @code{eval=frame}.
> -
> -@item t
> -The presentation timestamp of the input frame, expressed as a number of
> -seconds. Only available with @code{eval=frame}.
> -
> -@item pos
> -The position (byte offset) of the frame in the input stream, or NaN if
> -this information is unavailable and/or meaningless (for example in case of synthetic video).
> -Only available with @code{eval=frame}.
> -Deprecated, do not use.
> -@end table
> -
> -@section scale2ref_npp
> -
> -Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input
> -video, based on a reference video.
> -
> -See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same
> -but uses the reference video instead of the main input as basis. scale2ref_npp
> -also supports the following additional constants for the @option{w} and
> -@option{h} options:
> -
> -@table @var
> -@item main_w
> -@item main_h
> -The main input video's width and height
> -
> -@item main_a
> -The same as @var{main_w} / @var{main_h}
> -
> -@item main_sar
> -The main input video's sample aspect ratio
> -
> -@item main_dar, mdar
> -The main input video's display aspect ratio. Calculated from
> -@code{(main_w / main_h) * main_sar}.
> -
> -@item main_n
> -The (sequential) number of the main input frame, starting from 0.
> -Only available with @code{eval=frame}.
> -
> -@item main_t
> -The presentation timestamp of the main input frame, expressed as a number of
> -seconds. Only available with @code{eval=frame}.
> -
> -@item main_pos
> -The position (byte offset) of the frame in the main input stream, or NaN if
> -this information is unavailable and/or meaningless (for example in case of synthetic video).
> -Only available with @code{eval=frame}.
> -@end table
> -
> -@subsection Examples
> -
> -@itemize
> -@item
> -Scale a subtitle stream (b) to match the main video (a) in size before overlaying
> -@example
> -'scale2ref_npp[b][a];[a][b]overlay_cuda'
> -@end example
> -
> -@item
> -Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
> -@example
> -[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
> -@end example
> -@end itemize
> -
> -@section scale_vt
> -
> -Scale and convert the color parameters using VTPixelTransferSession.
> -
> -The filter accepts the following options:
> -@table @option
> -@item w
> -@item h
> -Set the output video dimension expression. Default value is the input dimension.
> -
> -@item color_matrix
> -Set the output colorspace matrix.
> -
> -@item color_primaries
> -Set the output color primaries.
> -
> -@item color_transfer
> -Set the output transfer characteristics.
> -
> -@end table
> -
> -@section scharr
> -Apply scharr operator to input video stream.
> -
> -The filter accepts the following option:
> -
> -@table @option
> -@item planes
> -Set which planes will be processed, unprocessed planes will be copied.
> -By default value 0xf, all planes will be processed.
> -
> -@item scale
> -Set value which will be multiplied with filtered result.
> -
> -@item delta
> -Set value which will be added to filtered result.
> -@end table
> -
> -@subsection Commands
> -
> -This filter supports the all above options as @ref{commands}.
> -
> -@section scroll
> -Scroll input video horizontally and/or vertically by constant speed.
> -
> -The filter accepts the following options:
> -@table @option
> -@item horizontal, h
> -Set the horizontal scrolling speed. Default is 0. Allowed range is from -1 to 1.
> -Negative values changes scrolling direction.
> -
> -@item vertical, v
> -Set the vertical scrolling speed. Default is 0. Allowed range is from -1 to 1.
> -Negative values changes scrolling direction.
> -
> -@item hpos
> -Set the initial horizontal scrolling position. Default is 0. Allowed range is from 0 to 1.
> -
> -@item vpos
> -Set the initial vertical scrolling position. Default is 0. Allowed range is from 0 to 1.
> -@end table
> -
> -@subsection Commands
> -
> -This filter supports the following @ref{commands}:
> -@table @option
> -@item horizontal, h
> -Set the horizontal scrolling speed.
> -@item vertical, v
> -Set the vertical scrolling speed.
> -@end table
> -
> -@anchor{scdet}
> -@section scdet
> -
> -Detect video scene change.
> -
> -This filter sets frame metadata with mafd between frame, the scene score, and
> -forward the frame to the next filter, so they can use these metadata to detect
> -scene change or others.
> -
> -In addition, this filter logs a message and sets frame metadata when it detects
> -a scene change by @option{threshold}.
> -
> -@code{lavfi.scd.mafd} metadata keys are set with mafd for every frame.
> -
> -@code{lavfi.scd.score} metadata keys are set with scene change score for every frame
> -to detect scene change.
> -
> -@code{lavfi.scd.time} metadata keys are set with current filtered frame time which
> -detect scene change with @option{threshold}.
> -
> -The filter accepts the following options:
> -
> -@table @option
> -@item threshold, t
> -Set the scene change detection threshold as a percentage of maximum change. Good
> -values are in the @code{[8.0, 14.0]} range. The range for @option{threshold} is
> -@code{[0., 100.]}.
> -
> -Default value is @code{10.}.
> -
> -@item sc_pass, s
> -Set the flag to pass scene change frames to the next filter. Default value is @code{0}
> -You can enable it if you want to get snapshot of scene change frames only.
> -@end table
> -
> -@anchor{selectivecolor}
> -@section selectivecolor
> -
> -Adjust cyan, magenta, yellow and black (CMYK) to certain ranges of colors (such
> -as "reds", "yellows", "greens", "cyans", ...). The adjustment range is defined
> -by the "purity" of the color (that is, how saturated it already is).
> -
> -This filter is similar to the Adobe Photoshop Selective Color tool.
> -
> -The filter accepts the following options:
> -
> -@table @option
> -@item correction_method
> -Select color correction method.
> +@table @option
> +@item correction_method
> +Select color correction method.
>   
>   Available values are:
>   @table @samp
> @@ -22200,23 +21656,6 @@ Keep the same chroma location (default).
>   @end table
>   @end table
>   
> -@section sharpen_npp
> -Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with
> -border control.
> -
> -The following additional options are accepted:
> -@table @option
> -
> -@item border_type
> -Type of sampling to be used ad frame borders. One of the following:
> -@table @option
> -
> -@item replicate
> -Replicate pixel values.
> -
> -@end table
> -@end table
> -
>   @section shear
>   Apply shear transform to input video.
>   
> @@ -24304,49 +23743,8 @@ The command above can also be specified as:
>   transpose=1:portrait
>   @end example
>   
> -@section transpose_npp
> -
> -Transpose rows with columns in the input video and optionally flip it.
> -For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options.
> -
> -It accepts the following parameters:
> -
> -@table @option
> -
> -@item dir
> -Specify the transposition direction.
> -
> -Can assume the following values:
> -@table @samp
> -@item cclock_flip
> -Rotate by 90 degrees counterclockwise and vertically flip. (default)
> -
> -@item clock
> -Rotate by 90 degrees clockwise.
> -
> -@item cclock
> -Rotate by 90 degrees counterclockwise.
> -
> -@item clock_flip
> -Rotate by 90 degrees clockwise and vertically flip.
> -@end table
> -
> -@item passthrough
> -Do not apply the transposition if the input geometry matches the one
> -specified by the specified value. It accepts the following values:
> -@table @samp
> -@item none
> -Always apply transposition. (default)
> -@item portrait
> -Preserve portrait geometry (when @var{height} >= @var{width}).
> -@item landscape
> -Preserve landscape geometry (when @var{width} >= @var{height}).
> -@end table
> -
> -@end table
> -
> -@section trim
> -Trim the input so that the output contains one continuous subpart of the input.
> +@section trim
> +Trim the input so that the output contains one continuous subpart of the input.
>   
>   It accepts the following parameters:
>   @table @option
> @@ -26362,64 +25760,6 @@ filter").
>   It accepts the following parameters:
>   
>   
> -@table @option
> -
> -@item mode
> -The interlacing mode to adopt. It accepts one of the following values:
> -
> -@table @option
> -@item 0, send_frame
> -Output one frame for each frame.
> -@item 1, send_field
> -Output one frame for each field.
> -@item 2, send_frame_nospatial
> -Like @code{send_frame}, but it skips the spatial interlacing check.
> -@item 3, send_field_nospatial
> -Like @code{send_field}, but it skips the spatial interlacing check.
> -@end table
> -
> -The default value is @code{send_frame}.
> -
> -@item parity
> -The picture field parity assumed for the input interlaced video. It accepts one
> -of the following values:
> -
> -@table @option
> -@item 0, tff
> -Assume the top field is first.
> -@item 1, bff
> -Assume the bottom field is first.
> -@item -1, auto
> -Enable automatic detection of field parity.
> -@end table
> -
> -The default value is @code{auto}.
> -If the interlacing is unknown or the decoder does not export this information,
> -top field first will be assumed.
> -
> -@item deint
> -Specify which frames to deinterlace. Accepts one of the following
> -values:
> -
> -@table @option
> -@item 0, all
> -Deinterlace all frames.
> -@item 1, interlaced
> -Only deinterlace frames marked as interlaced.
> -@end table
> -
> -The default value is @code{all}.
> -@end table
> -
> -@section yadif_cuda
> -
> -Deinterlace the input video using the @ref{yadif} algorithm, but implemented
> -in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
> -and/or nvenc.
> -
> -It accepts the following parameters:
> -
> -
>   @table @option
>   
>   @item mode
> @@ -26890,6 +26230,677 @@ value.
>   
>   @c man end VIDEO FILTERS
>   
> +@chapter Cuda Video Filters
> +@c man begin Cuda Video Filters
> +
> +@section Cuda
> +Below is a description of the currently available Nvidia Cuda video filters.

s/Cuda/CUDA/
(except where referring to a filter or code)

Mention what are the requirements to build and use these filters.


> +
> +@subsection bilateral_cuda
> +CUDA accelerated bilateral filter, an edge preserving filter.
> +This filter is mathematically accurate thanks to the use of GPU acceleration.
> +For best output quality, use one to one chroma subsampling, i.e. yuv444p format.
> +
> +The filter accepts the following options:
> +@table @option
> +@item sigmaS
> +Set sigma of gaussian function to calculate spatial weight, also called sigma space.
> +Allowed range is 0.1 to 512. Default is 0.1.
> +
> +@item sigmaR
> +Set sigma of gaussian function to calculate color range weight, also called sigma color.
> +Allowed range is 0.1 to 512. Default is 0.1.
> +
> +@item window_size
> +Set window size of the bilateral function to determine the number of neighbours to loop on.
> +If the number entered is even, one will be added automatically.
> +Allowed range is 1 to 255. Default is 1.
> +@end table
> +@subsubsection Examples
> +
> +@itemize
> +@item
> +Apply the bilateral filter on a video.
> +
> +@example
> +./ffmpeg -v verbose \
> +-hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
> +-init_hw_device cuda \
> +-filter_complex \
> +" \
> +[0:v]scale_cuda=format=yuv444p[scaled_video];
> +[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
> +-an -sn -c:v h264_nvenc -cq 20 out.mp4
> +@end example
> +
> +@end itemize
> +
> +@subsection bwdif_cuda
> +
> +Deinterlace the input video using the @ref{bwdif} algorithm, but implemented
> +in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
> +and/or nvenc.
> +
> +It accepts the following parameters:
> +
> +@table @option
> +@item mode
> +The interlacing mode to adopt. It accepts one of the following values:
> +
> +@table @option
> +@item 0, send_frame
> +Output one frame for each frame.
> +@item 1, send_field
> +Output one frame for each field.
> +@end table
> +
> +The default value is @code{send_field}.
> +
> +@item parity
> +The picture field parity assumed for the input interlaced video. It accepts one
> +of the following values:
> +
> +@table @option
> +@item 0, tff
> +Assume the top field is first.
> +@item 1, bff
> +Assume the bottom field is first.
> +@item -1, auto
> +Enable automatic detection of field parity.
> +@end table
> +
> +The default value is @code{auto}.
> +If the interlacing is unknown or the decoder does not export this information,
> +top field first will be assumed.
> +
> +@item deint
> +Specify which frames to deinterlace. Accepts one of the following
> +values:
> +
> +@table @option
> +@item 0, all
> +Deinterlace all frames.
> +@item 1, interlaced
> +Only deinterlace frames marked as interlaced.
> +@end table
> +
> +The default value is @code{all}.
> +@end table
> +
> +@subsection chromakey_cuda
> +CUDA accelerated YUV colorspace color/chroma keying.
> +
> +This filter works like normal chromakey filter but operates on CUDA frames.
> +for more details and parameters see @ref{chromakey}.
> +
> +@subsubsection Examples
> +
> +@itemize
> +@item
> +Make all the green pixels in the input video transparent and use it as an overlay for another video:
> +
> +@example
> +./ffmpeg \
> +    -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
> +    -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
> +    -init_hw_device cuda \
> +    -filter_complex \
> +    " \
> +        [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
> +        [1:v]scale_cuda=format=yuv420p[base]; \
> +        [base][overlay_video]overlay_cuda" \
> +    -an -sn -c:v h264_nvenc -cq 20 output.mp4
> +@end example
> +
> +@item
> +Process two software sources, explicitly uploading the frames:
> +
> +@example
> +./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
> +    -f lavfi -i color=size=800x600:color=white,format=yuv420p \
> +    -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
> +    -filter_complex \
> +    " \
> +        [0]hwupload[under]; \
> +        [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
> +        [under][over]overlay_cuda" \
> +    -c:v hevc_nvenc -cq 18 -preset slow output.mp4
> +@end example
> +
> +@end itemize
> +
> +@subsection colorspace_cuda
> +
> +CUDA accelerated implementation of the colorspace filter.
> +
> +It is by no means feature complete compared to the software colorspace filter,
> +and at the current time only supports color range conversion between jpeg/full
> +and mpeg/limited range.
> +
> +The filter accepts the following options:
> +
> +@table @option
> +@item range
> +Specify output color range.
> +
> +The accepted values are:
> +@table @samp
> +@item tv
> +TV (restricted) range
> +
> +@item mpeg
> +MPEG (restricted) range
> +
> +@item pc
> +PC (full) range
> +
> +@item jpeg
> +JPEG (full) range
> +
> +@end table
> +
> +@end table
> +
> +@subsection libvmaf_cuda
> +
> +This is the CUDA variant of the @ref{libvmaf} filter. It only accepts CUDA frames.
> +
> +It requires Netflix's vmaf library (libvmaf) as a pre-requisite.
> +After installing the library it can be enabled using:
> +@code{./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf}.
> +
> +@subsubsection Examples
> +@itemize
> +
> +@item
> +Basic usage showing CUVID hardware decoding and CUDA scaling with @ref{scale_cuda}:
> +@example
> +ffmpeg \
> +    -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \
> +    -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \
> +    -filter_complex "
> +        [0:v]scale_cuda=format=yuv420p[dis]; \
> +        [1:v]scale_cuda=format=yuv420p[ref]; \
> +        [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json
> +    " \
> +    -f null -
> +@end example
> +@end itemize
> +
> +@anchor{overlay_cuda}
> +@subsection overlay_cuda
> +
> +Overlay one video on top of another.
> +
> +This is the CUDA variant of the @ref{overlay} filter.
> +It only accepts CUDA frames. The underlying input pixel formats have to match.
> +
> +It takes two inputs and has one output. The first input is the "main"
> +video on which the second input is overlaid.
> +
> +It accepts the following parameters:
> +
> +@table @option
> +@item x
> +@item y
> +Set expressions for the x and y coordinates of the overlaid video
> +on the main video.
> +
> +They can contain the following parameters:
> +
> +@table @option
> +
> +@item main_w, W
> +@item main_h, H
> +The main input width and height.
> +
> +@item overlay_w, w
> +@item overlay_h, h
> +The overlay input width and height.
> +
> +@item x
> +@item y
> +The computed values for @var{x} and @var{y}. They are evaluated for
> +each new frame.
> +
> +@item n
> +The ordinal index of the main input frame, starting from 0.
> +
> +@item pos
> +The byte offset position in the file of the main input frame, NAN if unknown.
> +Deprecated, do not use.
> +
> +@item t
> +The timestamp of the main input frame, expressed in seconds, NAN if unknown.
> +
> +@end table
> +
> +Default value is "0" for both expressions.
> +
> +@item eval
> +Set when the expressions for @option{x} and @option{y} are evaluated.
> +
> +It accepts the following values:
> +@table @option
> +@item init
> +Evaluate expressions once during filter initialization or
> +when a command is processed.
> +
> +@item frame
> +Evaluate expressions for each incoming frame
> +@end table
> +
> +Default value is @option{frame}.
> +
> +@item eof_action
> +See @ref{framesync}.
> +
> +@item shortest
> +See @ref{framesync}.
> +
> +@item repeatlast
> +See @ref{framesync}.
> +
> +@end table
> +
> +This filter also supports the @ref{framesync} options.
> +
> +@anchor{scale_cuda}
> +@subsection scale_cuda
> +
> +Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
> +Setting the output width and height works in the same way as for the @ref{scale} filter.
> +
> +The filter accepts the following options:
> +@table @option
> +@item w
> +@item h
> +Set the output video dimension expression. Default value is the input dimension.
> +
> +Allows for the same expressions as the @ref{scale} filter.
> +
> +@item interp_algo
> +Sets the algorithm used for scaling:
> +
> +@table @var
> +@item nearest
> +Nearest neighbour
> +
> +Used by default if input parameters match the desired output.
> +
> +@item bilinear
> +Bilinear
> +
> +@item bicubic
> +Bicubic
> +
> +This is the default.
> +
> +@item lanczos
> +Lanczos
> +
> +@end table
> +
> +@item format
> +Controls the output pixel format. By default, or if none is specified, the input
> +pixel format is used.
> +
> +The filter does not support converting between YUV and RGB pixel formats.
> +
> +@item passthrough
> +If set to 0, every frame is processed, even if no conversion is necessary.
> +This mode can be useful to use the filter as a buffer for a downstream
> +frame-consumer that exhausts the limited decoder frame pool.
> +
> +If set to 1, frames are passed through as-is if they match the desired output
> +parameters. This is the default behaviour.
> +
> +@item param
> +Algorithm-Specific parameter.
> +
> +Affects the curves of the bicubic algorithm.
> +
> +@item force_original_aspect_ratio
> +@item force_divisible_by
> +Work the same as the identical @ref{scale} filter options.
> +
> +@end table
> +
> +@subsubsection Examples
> +
> +@itemize
> +@item
> +Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
> +@example
> +scale_cuda=-2:720:format=yuv420p
> +@end example
> +
> +@item
> +Upscale to 4K using nearest neighbour algorithm.
> +@example
> +scale_cuda=4096:2160:interp_algo=nearest
> +@end example
> +
> +@item
> +Don't do any conversion or scaling, but copy all input frames into newly allocated ones.
> +This can be useful to deal with a filter and encode chain that otherwise exhausts the
> +decoders frame pool.
> +@example
> +scale_cuda=passthrough=0
> +@end example
> +@end itemize
> +
> +@subsection yadif_cuda
> +
> +Deinterlace the input video using the @ref{yadif} algorithm, but implemented
> +in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
> +and/or nvenc.
> +
> +It accepts the following parameters:
> +
> +
> +@table @option
> +
> +@item mode
> +The interlacing mode to adopt. It accepts one of the following values:
> +
> +@table @option
> +@item 0, send_frame
> +Output one frame for each frame.
> +@item 1, send_field
> +Output one frame for each field.
> +@item 2, send_frame_nospatial
> +Like @code{send_frame}, but it skips the spatial interlacing check.
> +@item 3, send_field_nospatial
> +Like @code{send_field}, but it skips the spatial interlacing check.
> +@end table
> +
> +The default value is @code{send_frame}.
> +
> +@item parity
> +The picture field parity assumed for the input interlaced video. It accepts one
> +of the following values:
> +
> +@table @option
> +@item 0, tff
> +Assume the top field is first.
> +@item 1, bff
> +Assume the bottom field is first.
> +@item -1, auto
> +Enable automatic detection of field parity.
> +@end table
> +
> +The default value is @code{auto}.
> +If the interlacing is unknown or the decoder does not export this information,
> +top field first will be assumed.
> +
> +@item deint
> +Specify which frames to deinterlace. Accepts one of the following
> +values:
> +
> +@table @option
> +@item 0, all
> +Deinterlace all frames.
> +@item 1, interlaced
> +Only deinterlace frames marked as interlaced.
> +@end table
> +
> +The default value is @code{all}.
> +@end table
> +
> +@section Cuda NPP
> +Below is a description of the currently available NVIDIA Performance Primitives (libnpp) video filters.

Need similar mention here on how to enable these filters.

Once done, you can remove the then-redundant passages from the 
individual filter entries.

Regards,
Gyan


> +
> +@anchor{scale_npp}
> +@subsection scale_npp
> +
> +Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
> +format conversion on CUDA video frames. Setting the output width and height
> +works in the same way as for the @var{scale} filter.
> +
> +The following additional options are accepted:
> +@table @option
> +@item format
> +The pixel format of the output CUDA frames. If set to the string "same" (the
> +default), the input format will be kept. Note that automatic format negotiation
> +and conversion is not yet supported for hardware frames
> +
> +@item interp_algo
> +The interpolation algorithm used for resizing. One of the following:
> +@table @option
> +@item nn
> +Nearest neighbour.
> +
> +@item linear
> +@item cubic
> +@item cubic2p_bspline
> +2-parameter cubic (B=1, C=0)
> +
> +@item cubic2p_catmullrom
> +2-parameter cubic (B=0, C=1/2)
> +
> +@item cubic2p_b05c03
> +2-parameter cubic (B=1/2, C=3/10)
> +
> +@item super
> +Supersampling
> +
> +@item lanczos
> +@end table
> +
> +@item force_original_aspect_ratio
> +Enable decreasing or increasing output video width or height if necessary to
> +keep the original aspect ratio. Possible values:
> +
> +@table @samp
> +@item disable
> +Scale the video as specified and disable this feature.
> +
> +@item decrease
> +The output video dimensions will automatically be decreased if needed.
> +
> +@item increase
> +The output video dimensions will automatically be increased if needed.
> +
> +@end table
> +
> +One useful instance of this option is that when you know a specific device's
> +maximum allowed resolution, you can use this to limit the output video to
> +that, while retaining the aspect ratio. For example, device A allows
> +1280x720 playback, and your video is 1920x800. Using this option (set it to
> +decrease) and specifying 1280x720 to the command line makes the output
> +1280x533.
> +
> +Please note that this is a different thing than specifying -1 for @option{w}
> +or @option{h}, you still need to specify the output resolution for this option
> +to work.
> +
> +@item force_divisible_by
> +Ensures that both the output dimensions, width and height, are divisible by the
> +given integer when used together with @option{force_original_aspect_ratio}. This
> +works similar to using @code{-n} in the @option{w} and @option{h} options.
> +
> +This option respects the value set for @option{force_original_aspect_ratio},
> +increasing or decreasing the resolution accordingly. The video's aspect ratio
> +may be slightly modified.
> +
> +This option can be handy if you need to have a video fit within or exceed
> +a defined resolution using @option{force_original_aspect_ratio} but also have
> +encoder restrictions on width or height divisibility.
> +
> +@item eval
> +Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values:
> +
> +@table @samp
> +@item init
> +Only evaluate expressions once during the filter initialization or when a command is processed.
> +
> +@item frame
> +Evaluate expressions for each incoming frame.
> +
> +@end table
> +
> +@end table
> +
> +The values of the @option{w} and @option{h} options are expressions
> +containing the following constants:
> +
> +@table @var
> +@item in_w
> +@item in_h
> +The input width and height
> +
> +@item iw
> +@item ih
> +These are the same as @var{in_w} and @var{in_h}.
> +
> +@item out_w
> +@item out_h
> +The output (scaled) width and height
> +
> +@item ow
> +@item oh
> +These are the same as @var{out_w} and @var{out_h}
> +
> +@item a
> +The same as @var{iw} / @var{ih}
> +
> +@item sar
> +input sample aspect ratio
> +
> +@item dar
> +The input display aspect ratio. Calculated from @code{(iw / ih) * sar}.
> +
> +@item n
> +The (sequential) number of the input frame, starting from 0.
> +Only available with @code{eval=frame}.
> +
> +@item t
> +The presentation timestamp of the input frame, expressed as a number of
> +seconds. Only available with @code{eval=frame}.
> +
> +@item pos
> +The position (byte offset) of the frame in the input stream, or NaN if
> +this information is unavailable and/or meaningless (for example in case of synthetic video).
> +Only available with @code{eval=frame}.
> +Deprecated, do not use.
> +@end table
> +
> +@subsection scale2ref_npp
> +
> +Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input
> +video, based on a reference video.
> +
> +See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same
> +but uses the reference video instead of the main input as basis. scale2ref_npp
> +also supports the following additional constants for the @option{w} and
> +@option{h} options:
> +
> +@table @var
> +@item main_w
> +@item main_h
> +The main input video's width and height
> +
> +@item main_a
> +The same as @var{main_w} / @var{main_h}
> +
> +@item main_sar
> +The main input video's sample aspect ratio
> +
> +@item main_dar, mdar
> +The main input video's display aspect ratio. Calculated from
> +@code{(main_w / main_h) * main_sar}.
> +
> +@item main_n
> +The (sequential) number of the main input frame, starting from 0.
> +Only available with @code{eval=frame}.
> +
> +@item main_t
> +The presentation timestamp of the main input frame, expressed as a number of
> +seconds. Only available with @code{eval=frame}.
> +
> +@item main_pos
> +The position (byte offset) of the frame in the main input stream, or NaN if
> +this information is unavailable and/or meaningless (for example in case of synthetic video).
> +Only available with @code{eval=frame}.
> +@end table
> +
> +@subsubsection Examples
> +
> +@itemize
> +@item
> +Scale a subtitle stream (b) to match the main video (a) in size before overlaying
> +@example
> +'scale2ref_npp[b][a];[a][b]overlay_cuda'
> +@end example
> +
> +@item
> +Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
> +@example
> +[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
> +@end example
> +@end itemize
> +
> +@subsection sharpen_npp
> +Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with
> +border control.
> +
> +The following additional options are accepted:
> +@table @option
> +
> +@item border_type
> +Type of sampling to be used ad frame borders. One of the following:
> +@table @option
> +
> +@item replicate
> +Replicate pixel values.
> +
> +@end table
> +@end table
> +
> +@subsection transpose_npp
> +
> +Transpose rows with columns in the input video and optionally flip it.
> +For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options.
> +
> +It accepts the following parameters:
> +
> +@table @option
> +
> +@item dir
> +Specify the transposition direction.
> +
> +Can assume the following values:
> +@table @samp
> +@item cclock_flip
> +Rotate by 90 degrees counterclockwise and vertically flip. (default)
> +
> +@item clock
> +Rotate by 90 degrees clockwise.
> +
> +@item cclock
> +Rotate by 90 degrees counterclockwise.
> +
> +@item clock_flip
> +Rotate by 90 degrees clockwise and vertically flip.
> +@end table
> +
> +@item passthrough
> +Do not apply the transposition if the input geometry matches the one
> +specified by the specified value. It accepts the following values:
> +@table @samp
> +@item none
> +Always apply transposition. (default)
> +@item portrait
> +Preserve portrait geometry (when @var{height} >= @var{width}).
> +@item landscape
> +Preserve landscape geometry (when @var{width} >= @var{height}).
> +@end table
> +
> +@end table
> +
> +@c man end Cuda Video Filters
> +
>   @chapter OpenCL Video Filters
>   @c man begin OPENCL VIDEO FILTERS
>   

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [FFmpeg-devel] [PATCH 1/2] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters.
  2025-01-26 10:55 ` [FFmpeg-devel] [PATCH 1/1] [doc/filters] add nvidia cuda and cuda npp sections Gyan Doshi
@ 2025-01-28 19:12   ` Danil Iashchenko
  2025-01-28 19:12     ` [FFmpeg-devel] [PATCH 2/2] doc/filters: Remove redundant *_cuda and *_npp filters since they are already in CUDA Video Filters section Danil Iashchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Danil Iashchenko @ 2025-01-28 19:12 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Danil Iashchenko

---
 doc/filters.texi | 687 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 687 insertions(+)

diff --git a/doc/filters.texi b/doc/filters.texi
index a14c7e7e77..c4f312d2b8 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -26890,6 +26890,693 @@ value.
 
 @c man end VIDEO FILTERS
 
+@chapter CUDA Video Filters
+@c man begin CUDA Video Filters
+
+To enable compilation of these filters you need to configure FFmpeg with
+@code{--enable-cuda-nvcc} and/or @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.
+
+Running CUDA filters requires you to initialize a hardware device and to pass that device to all filters in any filter graph.
+@table @option
+
+@item -init_hw_device cuda[=@var{name}][:@var{device}[,@var{key=value}...]]
+Initialise a new hardware device of type @var{cuda} called @var{name}, using the
+given device parameters.
+
+@item -filter_hw_device @var{name}
+Pass the hardware device called @var{name} to all filters in any filter graph.
+
+@end table
+
+For more detailed information see @url{https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options}
+
+@itemize
+@item
+Example of initializing second CUDA device on the system and running scale_cuda and bilateral_cuda filters.
+@example
+./ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -init_hw_device cuda:1 -filter_complex \
+"[0:v]scale_cuda=format=yuv444p[scaled_video];[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
+-an -sn -c:v h264_nvenc -cq 20 out.mp4
+@end example
+@end itemize
+
+Since CUDA filters operate exclusively on GPU memory, frame data must sometimes be uploaded (@ref{hwupload}) to hardware surfaces associated with the appropriate CUDA device before processing, and downloaded (@ref{hwdownload}) back to normal memory afterward, if required. Whether @ref{hwupload} or @ref{hwdownload} is necessary depends on the specific workflow:
+
+@itemize
+@item If the input frames are already in GPU memory (e.g., when using @code{-hwaccel cuda} or @code{-hwaccel_output_format cuda}), explicit use of @ref{hwupload} is not needed, as the data is already in the appropriate memory space.
+@item If the input frames are in CPU memory (e.g., software-decoded frames or frames processed by CPU-based filters), it is necessary to use @ref{hwupload} to transfer the data to GPU memory for CUDA processing.
+@item If the output of the CUDA filters needs to be further processed by software-based filters or saved in a format not supported by GPU-based encoders, @ref{hwdownload} is required to transfer the data back to CPU memory.
+@end itemize
+Note that @ref{hwupload} uploads data to a surface with the same layout as the software frame, so it may be necessary to add a @ref{format} filter immediately before @ref{hwupload} to ensure the input is in the correct format. Similarly, @ref{hwdownload} may not support all output formats, so an additional @ref{format} filter may need to be inserted immediately after @ref{hwdownload} in the filter graph to ensure compatibility.
+
+@section CUDA
+Below is a description of the currently available Nvidia CUDA video filters.
+
+To enable compilation of these filters you need to configure FFmpeg with
+@code{--enable-cuda-nvcc} and Nvidia CUDA Toolkit must be installed.
+
+@subsection bilateral_cuda
+CUDA accelerated bilateral filter, an edge preserving filter.
+This filter is mathematically accurate thanks to the use of GPU acceleration.
+For best output quality, use one to one chroma subsampling, i.e. yuv444p format.
+
+The filter accepts the following options:
+@table @option
+@item sigmaS
+Set sigma of gaussian function to calculate spatial weight, also called sigma space.
+Allowed range is 0.1 to 512. Default is 0.1.
+
+@item sigmaR
+Set sigma of gaussian function to calculate color range weight, also called sigma color.
+Allowed range is 0.1 to 512. Default is 0.1.
+
+@item window_size
+Set window size of the bilateral function to determine the number of neighbours to loop on.
+If the number entered is even, one will be added automatically.
+Allowed range is 1 to 255. Default is 1.
+@end table
+@subsubsection Examples
+
+@itemize
+@item
+Apply the bilateral filter on a video.
+
+@example
+./ffmpeg -v verbose \
+-hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
+-init_hw_device cuda \
+-filter_complex \
+" \
+[0:v]scale_cuda=format=yuv444p[scaled_video];
+[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
+-an -sn -c:v h264_nvenc -cq 20 out.mp4
+@end example
+
+@end itemize
+
+@subsection bwdif_cuda
+
+Deinterlace the input video using the @ref{bwdif} algorithm, but implemented
+in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
+and/or nvenc.
+
+It accepts the following parameters:
+
+@table @option
+@item mode
+The interlacing mode to adopt. It accepts one of the following values:
+
+@table @option
+@item 0, send_frame
+Output one frame for each frame.
+@item 1, send_field
+Output one frame for each field.
+@end table
+
+The default value is @code{send_field}.
+
+@item parity
+The picture field parity assumed for the input interlaced video. It accepts one
+of the following values:
+
+@table @option
+@item 0, tff
+Assume the top field is first.
+@item 1, bff
+Assume the bottom field is first.
+@item -1, auto
+Enable automatic detection of field parity.
+@end table
+
+The default value is @code{auto}.
+If the interlacing is unknown or the decoder does not export this information,
+top field first will be assumed.
+
+@item deint
+Specify which frames to deinterlace. Accepts one of the following
+values:
+
+@table @option
+@item 0, all
+Deinterlace all frames.
+@item 1, interlaced
+Only deinterlace frames marked as interlaced.
+@end table
+
+The default value is @code{all}.
+@end table
+
+@subsection chromakey_cuda
+CUDA accelerated YUV colorspace color/chroma keying.
+
+This filter works like normal chromakey filter but operates on CUDA frames.
+for more details and parameters see @ref{chromakey}.
+
+@subsubsection Examples
+
+@itemize
+@item
+Make all the green pixels in the input video transparent and use it as an overlay for another video:
+
+@example
+./ffmpeg \
+    -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
+    -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
+    -init_hw_device cuda \
+    -filter_complex \
+    " \
+        [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
+        [1:v]scale_cuda=format=yuv420p[base]; \
+        [base][overlay_video]overlay_cuda" \
+    -an -sn -c:v h264_nvenc -cq 20 output.mp4
+@end example
+
+@item
+Process two software sources, explicitly uploading the frames:
+
+@example
+./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
+    -f lavfi -i color=size=800x600:color=white,format=yuv420p \
+    -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
+    -filter_complex \
+    " \
+        [0]hwupload[under]; \
+        [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
+        [under][over]overlay_cuda" \
+    -c:v hevc_nvenc -cq 18 -preset slow output.mp4
+@end example
+
+@end itemize
+
+@subsection colorspace_cuda
+
+CUDA accelerated implementation of the colorspace filter.
+
+It is by no means feature complete compared to the software colorspace filter,
+and at the current time only supports color range conversion between jpeg/full
+and mpeg/limited range.
+
+The filter accepts the following options:
+
+@table @option
+@item range
+Specify output color range.
+
+The accepted values are:
+@table @samp
+@item tv
+TV (restricted) range
+
+@item mpeg
+MPEG (restricted) range
+
+@item pc
+PC (full) range
+
+@item jpeg
+JPEG (full) range
+
+@end table
+
+@end table
+
+@anchor{overlay_cuda_section}
+@subsection overlay_cuda
+
+Overlay one video on top of another.
+
+This is the CUDA variant of the @ref{overlay} filter.
+It only accepts CUDA frames. The underlying input pixel formats have to match.
+
+It takes two inputs and has one output. The first input is the "main"
+video on which the second input is overlaid.
+
+It accepts the following parameters:
+
+@table @option
+@item x
+@item y
+Set expressions for the x and y coordinates of the overlaid video
+on the main video.
+
+They can contain the following parameters:
+
+@table @option
+
+@item main_w, W
+@item main_h, H
+The main input width and height.
+
+@item overlay_w, w
+@item overlay_h, h
+The overlay input width and height.
+
+@item x
+@item y
+The computed values for @var{x} and @var{y}. They are evaluated for
+each new frame.
+
+@item n
+The ordinal index of the main input frame, starting from 0.
+
+@item pos
+The byte offset position in the file of the main input frame, NAN if unknown.
+Deprecated, do not use.
+
+@item t
+The timestamp of the main input frame, expressed in seconds, NAN if unknown.
+
+@end table
+
+Default value is "0" for both expressions.
+
+@item eval
+Set when the expressions for @option{x} and @option{y} are evaluated.
+
+It accepts the following values:
+@table @option
+@item init
+Evaluate expressions once during filter initialization or
+when a command is processed.
+
+@item frame
+Evaluate expressions for each incoming frame
+@end table
+
+Default value is @option{frame}.
+
+@item eof_action
+See @ref{framesync}.
+
+@item shortest
+See @ref{framesync}.
+
+@item repeatlast
+See @ref{framesync}.
+
+@end table
+
+This filter also supports the @ref{framesync} options.
+
+@anchor{scale_cuda_section}
+@subsection scale_cuda
+
+Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
+Setting the output width and height works in the same way as for the @ref{scale} filter.
+
+The filter accepts the following options:
+@table @option
+@item w
+@item h
+Set the output video dimension expression. Default value is the input dimension.
+
+Allows for the same expressions as the @ref{scale} filter.
+
+@item interp_algo
+Sets the algorithm used for scaling:
+
+@table @var
+@item nearest
+Nearest neighbour
+
+Used by default if input parameters match the desired output.
+
+@item bilinear
+Bilinear
+
+@item bicubic
+Bicubic
+
+This is the default.
+
+@item lanczos
+Lanczos
+
+@end table
+
+@item format
+Controls the output pixel format. By default, or if none is specified, the input
+pixel format is used.
+
+The filter does not support converting between YUV and RGB pixel formats.
+
+@item passthrough
+If set to 0, every frame is processed, even if no conversion is necessary.
+This mode can be useful to use the filter as a buffer for a downstream
+frame-consumer that exhausts the limited decoder frame pool.
+
+If set to 1, frames are passed through as-is if they match the desired output
+parameters. This is the default behaviour.
+
+@item param
+Algorithm-Specific parameter.
+
+Affects the curves of the bicubic algorithm.
+
+@item force_original_aspect_ratio
+@item force_divisible_by
+Work the same as the identical @ref{scale} filter options.
+
+@end table
+
+@subsubsection Examples
+
+@itemize
+@item
+Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
+@example
+scale_cuda=-2:720:format=yuv420p
+@end example
+
+@item
+Upscale to 4K using nearest neighbour algorithm.
+@example
+scale_cuda=4096:2160:interp_algo=nearest
+@end example
+
+@item
+Don't do any conversion or scaling, but copy all input frames into newly allocated ones.
+This can be useful to deal with a filter and encode chain that otherwise exhausts the
+decoders frame pool.
+@example
+scale_cuda=passthrough=0
+@end example
+@end itemize
+
+@subsection yadif_cuda
+
+Deinterlace the input video using the @ref{yadif} algorithm, but implemented
+in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
+and/or nvenc.
+
+It accepts the following parameters:
+
+
+@table @option
+
+@item mode
+The interlacing mode to adopt. It accepts one of the following values:
+
+@table @option
+@item 0, send_frame
+Output one frame for each frame.
+@item 1, send_field
+Output one frame for each field.
+@item 2, send_frame_nospatial
+Like @code{send_frame}, but it skips the spatial interlacing check.
+@item 3, send_field_nospatial
+Like @code{send_field}, but it skips the spatial interlacing check.
+@end table
+
+The default value is @code{send_frame}.
+
+@item parity
+The picture field parity assumed for the input interlaced video. It accepts one
+of the following values:
+
+@table @option
+@item 0, tff
+Assume the top field is first.
+@item 1, bff
+Assume the bottom field is first.
+@item -1, auto
+Enable automatic detection of field parity.
+@end table
+
+The default value is @code{auto}.
+If the interlacing is unknown or the decoder does not export this information,
+top field first will be assumed.
+
+@item deint
+Specify which frames to deinterlace. Accepts one of the following
+values:
+
+@table @option
+@item 0, all
+Deinterlace all frames.
+@item 1, interlaced
+Only deinterlace frames marked as interlaced.
+@end table
+
+The default value is @code{all}.
+@end table
+
+@section CUDA NPP
+Below is a description of the currently available NVIDIA Performance Primitives (libnpp) video filters.
+
+To enable compilation of these filters you need to configure FFmpeg with @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.
+
+@anchor{scale_npp_section}
+@subsection scale_npp
+
+Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
+format conversion on CUDA video frames. Setting the output width and height
+works in the same way as for the @var{scale} filter.
+
+The following additional options are accepted:
+@table @option
+@item format
+The pixel format of the output CUDA frames. If set to the string "same" (the
+default), the input format will be kept. Note that automatic format negotiation
+and conversion is not yet supported for hardware frames
+
+@item interp_algo
+The interpolation algorithm used for resizing. One of the following:
+@table @option
+@item nn
+Nearest neighbour.
+
+@item linear
+@item cubic
+@item cubic2p_bspline
+2-parameter cubic (B=1, C=0)
+
+@item cubic2p_catmullrom
+2-parameter cubic (B=0, C=1/2)
+
+@item cubic2p_b05c03
+2-parameter cubic (B=1/2, C=3/10)
+
+@item super
+Supersampling
+
+@item lanczos
+@end table
+
+@item force_original_aspect_ratio
+Enable decreasing or increasing output video width or height if necessary to
+keep the original aspect ratio. Possible values:
+
+@table @samp
+@item disable
+Scale the video as specified and disable this feature.
+
+@item decrease
+The output video dimensions will automatically be decreased if needed.
+
+@item increase
+The output video dimensions will automatically be increased if needed.
+
+@end table
+
+One useful instance of this option is that when you know a specific device's
+maximum allowed resolution, you can use this to limit the output video to
+that, while retaining the aspect ratio. For example, device A allows
+1280x720 playback, and your video is 1920x800. Using this option (set it to
+decrease) and specifying 1280x720 to the command line makes the output
+1280x533.
+
+Please note that this is a different thing than specifying -1 for @option{w}
+or @option{h}, you still need to specify the output resolution for this option
+to work.
+
+@item force_divisible_by
+Ensures that both the output dimensions, width and height, are divisible by the
+given integer when used together with @option{force_original_aspect_ratio}. This
+works similar to using @code{-n} in the @option{w} and @option{h} options.
+
+This option respects the value set for @option{force_original_aspect_ratio},
+increasing or decreasing the resolution accordingly. The video's aspect ratio
+may be slightly modified.
+
+This option can be handy if you need to have a video fit within or exceed
+a defined resolution using @option{force_original_aspect_ratio} but also have
+encoder restrictions on width or height divisibility.
+
+@item eval
+Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values:
+
+@table @samp
+@item init
+Only evaluate expressions once during the filter initialization or when a command is processed.
+
+@item frame
+Evaluate expressions for each incoming frame.
+
+@end table
+
+@end table
+
+The values of the @option{w} and @option{h} options are expressions
+containing the following constants:
+
+@table @var
+@item in_w
+@item in_h
+The input width and height
+
+@item iw
+@item ih
+These are the same as @var{in_w} and @var{in_h}.
+
+@item out_w
+@item out_h
+The output (scaled) width and height
+
+@item ow
+@item oh
+These are the same as @var{out_w} and @var{out_h}
+
+@item a
+The same as @var{iw} / @var{ih}
+
+@item sar
+input sample aspect ratio
+
+@item dar
+The input display aspect ratio. Calculated from @code{(iw / ih) * sar}.
+
+@item n
+The (sequential) number of the input frame, starting from 0.
+Only available with @code{eval=frame}.
+
+@item t
+The presentation timestamp of the input frame, expressed as a number of
+seconds. Only available with @code{eval=frame}.
+
+@item pos
+The position (byte offset) of the frame in the input stream, or NaN if
+this information is unavailable and/or meaningless (for example in case of synthetic video).
+Only available with @code{eval=frame}.
+Deprecated, do not use.
+@end table
+
+@subsection scale2ref_npp
+
+Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input
+video, based on a reference video.
+
+See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same
+but uses the reference video instead of the main input as basis. scale2ref_npp
+also supports the following additional constants for the @option{w} and
+@option{h} options:
+
+@table @var
+@item main_w
+@item main_h
+The main input video's width and height
+
+@item main_a
+The same as @var{main_w} / @var{main_h}
+
+@item main_sar
+The main input video's sample aspect ratio
+
+@item main_dar, mdar
+The main input video's display aspect ratio. Calculated from
+@code{(main_w / main_h) * main_sar}.
+
+@item main_n
+The (sequential) number of the main input frame, starting from 0.
+Only available with @code{eval=frame}.
+
+@item main_t
+The presentation timestamp of the main input frame, expressed as a number of
+seconds. Only available with @code{eval=frame}.
+
+@item main_pos
+The position (byte offset) of the frame in the main input stream, or NaN if
+this information is unavailable and/or meaningless (for example in case of synthetic video).
+Only available with @code{eval=frame}.
+@end table
+
+@subsubsection Examples
+
+@itemize
+@item
+Scale a subtitle stream (b) to match the main video (a) in size before overlaying
+@example
+'scale2ref_npp[b][a];[a][b]overlay_cuda'
+@end example
+
+@item
+Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
+@example
+[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
+@end example
+@end itemize
+
+@subsection sharpen_npp
+Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with
+border control.
+
+The following additional options are accepted:
+@table @option
+
+@item border_type
+Type of sampling to be used ad frame borders. One of the following:
+@table @option
+
+@item replicate
+Replicate pixel values.
+
+@end table
+@end table
+
+@subsection transpose_npp
+
+Transpose rows with columns in the input video and optionally flip it.
+For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options.
+
+It accepts the following parameters:
+
+@table @option
+
+@item dir
+Specify the transposition direction.
+
+Can assume the following values:
+@table @samp
+@item cclock_flip
+Rotate by 90 degrees counterclockwise and vertically flip. (default)
+
+@item clock
+Rotate by 90 degrees clockwise.
+
+@item cclock
+Rotate by 90 degrees counterclockwise.
+
+@item clock_flip
+Rotate by 90 degrees clockwise and vertically flip.
+@end table
+
+@item passthrough
+Do not apply the transposition if the input geometry matches the one
+specified by the specified value. It accepts the following values:
+@table @samp
+@item none
+Always apply transposition. (default)
+@item portrait
+Preserve portrait geometry (when @var{height} >= @var{width}).
+@item landscape
+Preserve landscape geometry (when @var{width} >= @var{height}).
+@end table
+
+@end table
+
+@c man end CUDA Video Filters
+
+
 @chapter OpenCL Video Filters
 @c man begin OPENCL VIDEO FILTERS
 
-- 
2.39.5 (Apple Git-154)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [FFmpeg-devel] [PATCH 2/2] doc/filters: Remove redundant *_cuda and *_npp filters since they are already in CUDA Video Filters section
  2025-01-28 19:12   ` [FFmpeg-devel] [PATCH 1/2] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters Danil Iashchenko
@ 2025-01-28 19:12     ` Danil Iashchenko
  2025-02-02  6:58       ` Gyan Doshi
  0 siblings, 1 reply; 6+ messages in thread
From: Danil Iashchenko @ 2025-01-28 19:12 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Danil Iashchenko

---
 doc/filters.texi | 630 +----------------------------------------------
 1 file changed, 10 insertions(+), 620 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index c4f312d2b8..28be8920fd 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -8619,45 +8619,6 @@ Set planes to filter. Default is first only.
 
 This filter supports the all above options as @ref{commands}.
 
-@section bilateral_cuda
-CUDA accelerated bilateral filter, an edge preserving filter.
-This filter is mathematically accurate thanks to the use of GPU acceleration.
-For best output quality, use one to one chroma subsampling, i.e. yuv444p format.
-
-The filter accepts the following options:
-@table @option
-@item sigmaS
-Set sigma of gaussian function to calculate spatial weight, also called sigma space.
-Allowed range is 0.1 to 512. Default is 0.1.
-
-@item sigmaR
-Set sigma of gaussian function to calculate color range weight, also called sigma color.
-Allowed range is 0.1 to 512. Default is 0.1.
-
-@item window_size
-Set window size of the bilateral function to determine the number of neighbours to loop on.
-If the number entered is even, one will be added automatically.
-Allowed range is 1 to 255. Default is 1.
-@end table
-@subsection Examples
-
-@itemize
-@item
-Apply the bilateral filter on a video.
-
-@example
-./ffmpeg -v verbose \
--hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
--init_hw_device cuda \
--filter_complex \
-" \
-[0:v]scale_cuda=format=yuv444p[scaled_video];
-[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
--an -sn -c:v h264_nvenc -cq 20 out.mp4
-@end example
-
-@end itemize
-
 @section bitplanenoise
 
 Show and measure bit plane noise.
@@ -9243,58 +9204,6 @@ Only deinterlace frames marked as interlaced.
 The default value is @code{all}.
 @end table
 
-@section bwdif_cuda
-
-Deinterlace the input video using the @ref{bwdif} algorithm, but implemented
-in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
-and/or nvenc.
-
-It accepts the following parameters:
-
-@table @option
-@item mode
-The interlacing mode to adopt. It accepts one of the following values:
-
-@table @option
-@item 0, send_frame
-Output one frame for each frame.
-@item 1, send_field
-Output one frame for each field.
-@end table
-
-The default value is @code{send_field}.
-
-@item parity
-The picture field parity assumed for the input interlaced video. It accepts one
-of the following values:
-
-@table @option
-@item 0, tff
-Assume the top field is first.
-@item 1, bff
-Assume the bottom field is first.
-@item -1, auto
-Enable automatic detection of field parity.
-@end table
-
-The default value is @code{auto}.
-If the interlacing is unknown or the decoder does not export this information,
-top field first will be assumed.
-
-@item deint
-Specify which frames to deinterlace. Accepts one of the following
-values:
-
-@table @option
-@item 0, all
-Deinterlace all frames.
-@item 1, interlaced
-Only deinterlace frames marked as interlaced.
-@end table
-
-The default value is @code{all}.
-@end table
-
 @section ccrepack
 
 Repack CEA-708 closed captioning side data
@@ -9408,48 +9317,6 @@ ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_compl
 @end example
 @end itemize
 
-@section chromakey_cuda
-CUDA accelerated YUV colorspace color/chroma keying.
-
-This filter works like normal chromakey filter but operates on CUDA frames.
-for more details and parameters see @ref{chromakey}.
-
-@subsection Examples
-
-@itemize
-@item
-Make all the green pixels in the input video transparent and use it as an overlay for another video:
-
-@example
-./ffmpeg \
-    -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
-    -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
-    -init_hw_device cuda \
-    -filter_complex \
-    " \
-        [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
-        [1:v]scale_cuda=format=yuv420p[base]; \
-        [base][overlay_video]overlay_cuda" \
-    -an -sn -c:v h264_nvenc -cq 20 output.mp4
-@end example
-
-@item
-Process two software sources, explicitly uploading the frames:
-
-@example
-./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
-    -f lavfi -i color=size=800x600:color=white,format=yuv420p \
-    -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
-    -filter_complex \
-    " \
-        [0]hwupload[under]; \
-        [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
-        [under][over]overlay_cuda" \
-    -c:v hevc_nvenc -cq 18 -preset slow output.mp4
-@end example
-
-@end itemize
-
 @section chromanr
 Reduce chrominance noise.
 
@@ -10427,38 +10294,6 @@ For example to convert the input to SMPTE-240M, use the command:
 colorspace=smpte240m
 @end example
 
-@section colorspace_cuda
-
-CUDA accelerated implementation of the colorspace filter.
-
-It is by no means feature complete compared to the software colorspace filter,
-and at the current time only supports color range conversion between jpeg/full
-and mpeg/limited range.
-
-The filter accepts the following options:
-
-@table @option
-@item range
-Specify output color range.
-
-The accepted values are:
-@table @samp
-@item tv
-TV (restricted) range
-
-@item mpeg
-MPEG (restricted) range
-
-@item pc
-PC (full) range
-
-@item jpeg
-JPEG (full) range
-
-@end table
-
-@end table
-
 @section colortemperature
 Adjust color temperature in video to simulate variations in ambient color temperature.
 
@@ -18977,84 +18812,6 @@ testsrc=s=100x100, split=4 [in0][in1][in2][in3];
 
 @end itemize
 
-@anchor{overlay_cuda}
-@section overlay_cuda
-
-Overlay one video on top of another.
-
-This is the CUDA variant of the @ref{overlay} filter.
-It only accepts CUDA frames. The underlying input pixel formats have to match.
-
-It takes two inputs and has one output. The first input is the "main"
-video on which the second input is overlaid.
-
-It accepts the following parameters:
-
-@table @option
-@item x
-@item y
-Set expressions for the x and y coordinates of the overlaid video
-on the main video.
-
-They can contain the following parameters:
-
-@table @option
-
-@item main_w, W
-@item main_h, H
-The main input width and height.
-
-@item overlay_w, w
-@item overlay_h, h
-The overlay input width and height.
-
-@item x
-@item y
-The computed values for @var{x} and @var{y}. They are evaluated for
-each new frame.
-
-@item n
-The ordinal index of the main input frame, starting from 0.
-
-@item pos
-The byte offset position in the file of the main input frame, NAN if unknown.
-Deprecated, do not use.
-
-@item t
-The timestamp of the main input frame, expressed in seconds, NAN if unknown.
-
-@end table
-
-Default value is "0" for both expressions.
-
-@item eval
-Set when the expressions for @option{x} and @option{y} are evaluated.
-
-It accepts the following values:
-@table @option
-@item init
-Evaluate expressions once during filter initialization or
-when a command is processed.
-
-@item frame
-Evaluate expressions for each incoming frame
-@end table
-
-Default value is @option{frame}.
-
-@item eof_action
-See @ref{framesync}.
-
-@item shortest
-See @ref{framesync}.
-
-@item repeatlast
-See @ref{framesync}.
-
-@end table
-
-This filter also supports the @ref{framesync} options.
-
 @section owdenoise
 
 Apply Overcomplete Wavelet denoiser.
@@ -21479,75 +21236,14 @@ If the specified expression is not valid, it is kept at its current
 value.
 @end table
 
-@anchor{scale_cuda}
-@section scale_cuda
-
-Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
-Setting the output width and height works in the same way as for the @ref{scale} filter.
-
-The filter accepts the following options:
-@table @option
-@item w
-@item h
-Set the output video dimension expression. Default value is the input dimension.
+@subsection Examples
 
-Allows for the same expressions as the @ref{scale} filter.
-
-@item interp_algo
-Sets the algorithm used for scaling:
-
-@table @var
-@item nearest
-Nearest neighbour
-
-Used by default if input parameters match the desired output.
-
-@item bilinear
-Bilinear
-
-@item bicubic
-Bicubic
-
-This is the default.
-
-@item lanczos
-Lanczos
-
-@end table
-
-@item format
-Controls the output pixel format. By default, or if none is specified, the input
-pixel format is used.
-
-The filter does not support converting between YUV and RGB pixel formats.
-
-@item passthrough
-If set to 0, every frame is processed, even if no conversion is necessary.
-This mode can be useful to use the filter as a buffer for a downstream
-frame-consumer that exhausts the limited decoder frame pool.
-
-If set to 1, frames are passed through as-is if they match the desired output
-parameters. This is the default behaviour.
-
-@item param
-Algorithm-Specific parameter.
-
-Affects the curves of the bicubic algorithm.
-
-@item force_original_aspect_ratio
-@item force_divisible_by
-Work the same as the identical @ref{scale} filter options.
-
-@end table
-
-@subsection Examples
-
-@itemize
-@item
-Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
-@example
-scale_cuda=-2:720:format=yuv420p
-@end example
+@itemize
+@item
+Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
+@example
+scale_cuda=-2:720:format=yuv420p
+@end example
 
 @item
 Upscale to 4K using nearest neighbour algorithm.
@@ -21564,196 +21260,6 @@ scale_cuda=passthrough=0
 @end example
 @end itemize
 
-@anchor{scale_npp}
-@section scale_npp
-
-Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
-format conversion on CUDA video frames. Setting the output width and height
-works in the same way as for the @var{scale} filter.
-
-The following additional options are accepted:
-@table @option
-@item format
-The pixel format of the output CUDA frames. If set to the string "same" (the
-default), the input format will be kept. Note that automatic format negotiation
-and conversion is not yet supported for hardware frames
-
-@item interp_algo
-The interpolation algorithm used for resizing. One of the following:
-@table @option
-@item nn
-Nearest neighbour.
-
-@item linear
-@item cubic
-@item cubic2p_bspline
-2-parameter cubic (B=1, C=0)
-
-@item cubic2p_catmullrom
-2-parameter cubic (B=0, C=1/2)
-
-@item cubic2p_b05c03
-2-parameter cubic (B=1/2, C=3/10)
-
-@item super
-Supersampling
-
-@item lanczos
-@end table
-
-@item force_original_aspect_ratio
-Enable decreasing or increasing output video width or height if necessary to
-keep the original aspect ratio. Possible values:
-
-@table @samp
-@item disable
-Scale the video as specified and disable this feature.
-
-@item decrease
-The output video dimensions will automatically be decreased if needed.
-
-@item increase
-The output video dimensions will automatically be increased if needed.
-
-@end table
-
-One useful instance of this option is that when you know a specific device's
-maximum allowed resolution, you can use this to limit the output video to
-that, while retaining the aspect ratio. For example, device A allows
-1280x720 playback, and your video is 1920x800. Using this option (set it to
-decrease) and specifying 1280x720 to the command line makes the output
-1280x533.
-
-Please note that this is a different thing than specifying -1 for @option{w}
-or @option{h}, you still need to specify the output resolution for this option
-to work.
-
-@item force_divisible_by
-Ensures that both the output dimensions, width and height, are divisible by the
-given integer when used together with @option{force_original_aspect_ratio}. This
-works similar to using @code{-n} in the @option{w} and @option{h} options.
-
-This option respects the value set for @option{force_original_aspect_ratio},
-increasing or decreasing the resolution accordingly. The video's aspect ratio
-may be slightly modified.
-
-This option can be handy if you need to have a video fit within or exceed
-a defined resolution using @option{force_original_aspect_ratio} but also have
-encoder restrictions on width or height divisibility.
-
-@item eval
-Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values:
-
-@table @samp
-@item init
-Only evaluate expressions once during the filter initialization or when a command is processed.
-
-@item frame
-Evaluate expressions for each incoming frame.
-
-@end table
-
-@end table
-
-The values of the @option{w} and @option{h} options are expressions
-containing the following constants:
-
-@table @var
-@item in_w
-@item in_h
-The input width and height
-
-@item iw
-@item ih
-These are the same as @var{in_w} and @var{in_h}.
-
-@item out_w
-@item out_h
-The output (scaled) width and height
-
-@item ow
-@item oh
-These are the same as @var{out_w} and @var{out_h}
-
-@item a
-The same as @var{iw} / @var{ih}
-
-@item sar
-input sample aspect ratio
-
-@item dar
-The input display aspect ratio. Calculated from @code{(iw / ih) * sar}.
-
-@item n
-The (sequential) number of the input frame, starting from 0.
-Only available with @code{eval=frame}.
-
-@item t
-The presentation timestamp of the input frame, expressed as a number of
-seconds. Only available with @code{eval=frame}.
-
-@item pos
-The position (byte offset) of the frame in the input stream, or NaN if
-this information is unavailable and/or meaningless (for example in case of synthetic video).
-Only available with @code{eval=frame}.
-Deprecated, do not use.
-@end table
-
-@section scale2ref_npp
-
-Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input
-video, based on a reference video.
-
-See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same
-but uses the reference video instead of the main input as basis. scale2ref_npp
-also supports the following additional constants for the @option{w} and
-@option{h} options:
-
-@table @var
-@item main_w
-@item main_h
-The main input video's width and height
-
-@item main_a
-The same as @var{main_w} / @var{main_h}
-
-@item main_sar
-The main input video's sample aspect ratio
-
-@item main_dar, mdar
-The main input video's display aspect ratio. Calculated from
-@code{(main_w / main_h) * main_sar}.
-
-@item main_n
-The (sequential) number of the main input frame, starting from 0.
-Only available with @code{eval=frame}.
-
-@item main_t
-The presentation timestamp of the main input frame, expressed as a number of
-seconds. Only available with @code{eval=frame}.
-
-@item main_pos
-The position (byte offset) of the frame in the main input stream, or NaN if
-this information is unavailable and/or meaningless (for example in case of synthetic video).
-Only available with @code{eval=frame}.
-@end table
-
-@subsection Examples
-
-@itemize
-@item
-Scale a subtitle stream (b) to match the main video (a) in size before overlaying
-@example
-'scale2ref_npp[b][a];[a][b]overlay_cuda'
-@end example
-
-@item
-Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
-@example
-[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
-@end example
-@end itemize
-
 @section scale_vt
 
 Scale and convert the color parameters using VTPixelTransferSession.
@@ -22200,23 +21706,6 @@ Keep the same chroma location (default).
 @end table
 @end table
 
-@section sharpen_npp
-Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with
-border control.
-
-The following additional options are accepted:
-@table @option
-
-@item border_type
-Type of sampling to be used ad frame borders. One of the following:
-@table @option
-
-@item replicate
-Replicate pixel values.
-
-@end table
-@end table
-
 @section shear
 Apply shear transform to input video.
 
@@ -24304,47 +23793,6 @@ The command above can also be specified as:
 transpose=1:portrait
 @end example
 
-@section transpose_npp
-
-Transpose rows with columns in the input video and optionally flip it.
-For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options.
-
-It accepts the following parameters:
-
-@table @option
-
-@item dir
-Specify the transposition direction.
-
-Can assume the following values:
-@table @samp
-@item cclock_flip
-Rotate by 90 degrees counterclockwise and vertically flip. (default)
-
-@item clock
-Rotate by 90 degrees clockwise.
-
-@item cclock
-Rotate by 90 degrees counterclockwise.
-
-@item clock_flip
-Rotate by 90 degrees clockwise and vertically flip.
-@end table
-
-@item passthrough
-Do not apply the transposition if the input geometry matches the one
-specified by the specified value. It accepts the following values:
-@table @samp
-@item none
-Always apply transposition. (default)
-@item portrait
-Preserve portrait geometry (when @var{height} >= @var{width}).
-@item landscape
-Preserve landscape geometry (when @var{width} >= @var{height}).
-@end table
-
-@end table
-
 @section trim
 Trim the input so that the output contains one continuous subpart of the input.
 
@@ -26362,64 +25810,6 @@ filter").
 It accepts the following parameters:
 
 
-@table @option
-
-@item mode
-The interlacing mode to adopt. It accepts one of the following values:
-
-@table @option
-@item 0, send_frame
-Output one frame for each frame.
-@item 1, send_field
-Output one frame for each field.
-@item 2, send_frame_nospatial
-Like @code{send_frame}, but it skips the spatial interlacing check.
-@item 3, send_field_nospatial
-Like @code{send_field}, but it skips the spatial interlacing check.
-@end table
-
-The default value is @code{send_frame}.
-
-@item parity
-The picture field parity assumed for the input interlaced video. It accepts one
-of the following values:
-
-@table @option
-@item 0, tff
-Assume the top field is first.
-@item 1, bff
-Assume the bottom field is first.
-@item -1, auto
-Enable automatic detection of field parity.
-@end table
-
-The default value is @code{auto}.
-If the interlacing is unknown or the decoder does not export this information,
-top field first will be assumed.
-
-@item deint
-Specify which frames to deinterlace. Accepts one of the following
-values:
-
-@table @option
-@item 0, all
-Deinterlace all frames.
-@item 1, interlaced
-Only deinterlace frames marked as interlaced.
-@end table
-
-The default value is @code{all}.
-@end table
-
-@section yadif_cuda
-
-Deinterlace the input video using the @ref{yadif} algorithm, but implemented
-in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
-and/or nvenc.
-
-It accepts the following parameters:
-
-
 @table @option
 
 @item mode
@@ -27100,7 +26490,7 @@ JPEG (full) range
 
 @end table
 
-@anchor{overlay_cuda_section}
+@anchor{overlay_cuda}
 @subsection overlay_cuda
 
 Overlay one video on top of another.
@@ -27178,7 +26568,7 @@ See @ref{framesync}.
 
 This filter also supports the @ref{framesync} options.
 
-@anchor{scale_cuda_section}
+@anchor{scale_cuda}
 @subsection scale_cuda
 
 Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
@@ -27326,7 +26716,7 @@ Below is a description of the currently available NVIDIA Performance Primitives
 
 To enable compilation of these filters you need to configure FFmpeg with @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.
 
-@anchor{scale_npp_section}
+@anchor{scale_npp}
 @subsection scale_npp
 
 Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
-- 
2.39.5 (Apple Git-154)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/2] doc/filters: Remove redundant *_cuda and *_npp filters since they are already in CUDA Video Filters section
  2025-01-28 19:12     ` [FFmpeg-devel] [PATCH 2/2] doc/filters: Remove redundant *_cuda and *_npp filters since they are already in CUDA Video Filters section Danil Iashchenko
@ 2025-02-02  6:58       ` Gyan Doshi
  2025-02-02 13:23         ` [FFmpeg-devel] [PATCH] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters Danil Iashchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Gyan Doshi @ 2025-02-02  6:58 UTC (permalink / raw)
  To: ffmpeg-devel



On 2025-01-29 12:42 am, Danil Iashchenko wrote:
> ---
>   doc/filters.texi | 630 +----------------------------------------------
>   1 file changed, 10 insertions(+), 620 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index c4f312d2b8..28be8920fd 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -8619,45 +8619,6 @@ Set planes to filter. Default is first only.
>   
>   This filter supports the all above options as @ref{commands}.
The removal should happen together with the shifting.

Regards,
Gyan

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [FFmpeg-devel] [PATCH] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters.
  2025-02-02  6:58       ` Gyan Doshi
@ 2025-02-02 13:23         ` Danil Iashchenko
  2025-02-04  5:40           ` Gyan Doshi
  0 siblings, 1 reply; 6+ messages in thread
From: Danil Iashchenko @ 2025-02-02 13:23 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Danil Iashchenko

---
 doc/filters.texi | 1323 ++++++++++++++++++++++++----------------------
 1 file changed, 700 insertions(+), 623 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index c2817b2661..7460b7ef18 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -8619,45 +8619,6 @@ Set planes to filter. Default is first only.
 
 This filter supports the all above options as @ref{commands}.
 
-@section bilateral_cuda
-CUDA accelerated bilateral filter, an edge preserving filter.
-This filter is mathematically accurate thanks to the use of GPU acceleration.
-For best output quality, use one to one chroma subsampling, i.e. yuv444p format.
-
-The filter accepts the following options:
-@table @option
-@item sigmaS
-Set sigma of gaussian function to calculate spatial weight, also called sigma space.
-Allowed range is 0.1 to 512. Default is 0.1.
-
-@item sigmaR
-Set sigma of gaussian function to calculate color range weight, also called sigma color.
-Allowed range is 0.1 to 512. Default is 0.1.
-
-@item window_size
-Set window size of the bilateral function to determine the number of neighbours to loop on.
-If the number entered is even, one will be added automatically.
-Allowed range is 1 to 255. Default is 1.
-@end table
-@subsection Examples
-
-@itemize
-@item
-Apply the bilateral filter on a video.
-
-@example
-./ffmpeg -v verbose \
--hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
--init_hw_device cuda \
--filter_complex \
-" \
-[0:v]scale_cuda=format=yuv444p[scaled_video];
-[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
--an -sn -c:v h264_nvenc -cq 20 out.mp4
-@end example
-
-@end itemize
-
 @section bitplanenoise
 
 Show and measure bit plane noise.
@@ -9243,58 +9204,6 @@ Only deinterlace frames marked as interlaced.
 The default value is @code{all}.
 @end table
 
-@section bwdif_cuda
-
-Deinterlace the input video using the @ref{bwdif} algorithm, but implemented
-in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
-and/or nvenc.
-
-It accepts the following parameters:
-
-@table @option
-@item mode
-The interlacing mode to adopt. It accepts one of the following values:
-
-@table @option
-@item 0, send_frame
-Output one frame for each frame.
-@item 1, send_field
-Output one frame for each field.
-@end table
-
-The default value is @code{send_field}.
-
-@item parity
-The picture field parity assumed for the input interlaced video. It accepts one
-of the following values:
-
-@table @option
-@item 0, tff
-Assume the top field is first.
-@item 1, bff
-Assume the bottom field is first.
-@item -1, auto
-Enable automatic detection of field parity.
-@end table
-
-The default value is @code{auto}.
-If the interlacing is unknown or the decoder does not export this information,
-top field first will be assumed.
-
-@item deint
-Specify which frames to deinterlace. Accepts one of the following
-values:
-
-@table @option
-@item 0, all
-Deinterlace all frames.
-@item 1, interlaced
-Only deinterlace frames marked as interlaced.
-@end table
-
-The default value is @code{all}.
-@end table
-
 @section ccrepack
 
 Repack CEA-708 closed captioning side data
@@ -9408,48 +9317,6 @@ ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_compl
 @end example
 @end itemize
 
-@section chromakey_cuda
-CUDA accelerated YUV colorspace color/chroma keying.
-
-This filter works like normal chromakey filter but operates on CUDA frames.
-for more details and parameters see @ref{chromakey}.
-
-@subsection Examples
-
-@itemize
-@item
-Make all the green pixels in the input video transparent and use it as an overlay for another video:
-
-@example
-./ffmpeg \
-    -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
-    -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
-    -init_hw_device cuda \
-    -filter_complex \
-    " \
-        [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
-        [1:v]scale_cuda=format=yuv420p[base]; \
-        [base][overlay_video]overlay_cuda" \
-    -an -sn -c:v h264_nvenc -cq 20 output.mp4
-@end example
-
-@item
-Process two software sources, explicitly uploading the frames:
-
-@example
-./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
-    -f lavfi -i color=size=800x600:color=white,format=yuv420p \
-    -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
-    -filter_complex \
-    " \
-        [0]hwupload[under]; \
-        [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
-        [under][over]overlay_cuda" \
-    -c:v hevc_nvenc -cq 18 -preset slow output.mp4
-@end example
-
-@end itemize
-
 @section chromanr
 Reduce chrominance noise.
 
@@ -10427,38 +10294,6 @@ For example to convert the input to SMPTE-240M, use the command:
 colorspace=smpte240m
 @end example
 
-@section colorspace_cuda
-
-CUDA accelerated implementation of the colorspace filter.
-
-It is by no means feature complete compared to the software colorspace filter,
-and at the current time only supports color range conversion between jpeg/full
-and mpeg/limited range.
-
-The filter accepts the following options:
-
-@table @option
-@item range
-Specify output color range.
-
-The accepted values are:
-@table @samp
-@item tv
-TV (restricted) range
-
-@item mpeg
-MPEG (restricted) range
-
-@item pc
-PC (full) range
-
-@item jpeg
-JPEG (full) range
-
-@end table
-
-@end table
-
 @section colortemperature
 Adjust color temperature in video to simulate variations in ambient color temperature.
 
@@ -18977,84 +18812,6 @@ testsrc=s=100x100, split=4 [in0][in1][in2][in3];
 
 @end itemize
 
-@anchor{overlay_cuda}
-@section overlay_cuda
-
-Overlay one video on top of another.
-
-This is the CUDA variant of the @ref{overlay} filter.
-It only accepts CUDA frames. The underlying input pixel formats have to match.
-
-It takes two inputs and has one output. The first input is the "main"
-video on which the second input is overlaid.
-
-It accepts the following parameters:
-
-@table @option
-@item x
-@item y
-Set expressions for the x and y coordinates of the overlaid video
-on the main video.
-
-They can contain the following parameters:
-
-@table @option
-
-@item main_w, W
-@item main_h, H
-The main input width and height.
-
-@item overlay_w, w
-@item overlay_h, h
-The overlay input width and height.
-
-@item x
-@item y
-The computed values for @var{x} and @var{y}. They are evaluated for
-each new frame.
-
-@item n
-The ordinal index of the main input frame, starting from 0.
-
-@item pos
-The byte offset position in the file of the main input frame, NAN if unknown.
-Deprecated, do not use.
-
-@item t
-The timestamp of the main input frame, expressed in seconds, NAN if unknown.
-
-@end table
-
-Default value is "0" for both expressions.
-
-@item eval
-Set when the expressions for @option{x} and @option{y} are evaluated.
-
-It accepts the following values:
-@table @option
-@item init
-Evaluate expressions once during filter initialization or
-when a command is processed.
-
-@item frame
-Evaluate expressions for each incoming frame
-@end table
-
-Default value is @option{frame}.
-
-@item eof_action
-See @ref{framesync}.
-
-@item shortest
-See @ref{framesync}.
-
-@item repeatlast
-See @ref{framesync}.
-
-@end table
-
-This filter also supports the @ref{framesync} options.
-
 @section owdenoise
 
 Apply Overcomplete Wavelet denoiser.
@@ -21479,75 +21236,14 @@ If the specified expression is not valid, it is kept at its current
 value.
 @end table
 
-@anchor{scale_cuda}
-@section scale_cuda
-
-Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
-Setting the output width and height works in the same way as for the @ref{scale} filter.
-
-The filter accepts the following options:
-@table @option
-@item w
-@item h
-Set the output video dimension expression. Default value is the input dimension.
+@subsection Examples
 
-Allows for the same expressions as the @ref{scale} filter.
-
-@item interp_algo
-Sets the algorithm used for scaling:
-
-@table @var
-@item nearest
-Nearest neighbour
-
-Used by default if input parameters match the desired output.
-
-@item bilinear
-Bilinear
-
-@item bicubic
-Bicubic
-
-This is the default.
-
-@item lanczos
-Lanczos
-
-@end table
-
-@item format
-Controls the output pixel format. By default, or if none is specified, the input
-pixel format is used.
-
-The filter does not support converting between YUV and RGB pixel formats.
-
-@item passthrough
-If set to 0, every frame is processed, even if no conversion is necessary.
-This mode can be useful to use the filter as a buffer for a downstream
-frame-consumer that exhausts the limited decoder frame pool.
-
-If set to 1, frames are passed through as-is if they match the desired output
-parameters. This is the default behaviour.
-
-@item param
-Algorithm-Specific parameter.
-
-Affects the curves of the bicubic algorithm.
-
-@item force_original_aspect_ratio
-@item force_divisible_by
-Work the same as the identical @ref{scale} filter options.
-
-@end table
-
-@subsection Examples
-
-@itemize
-@item
-Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
-@example
-scale_cuda=-2:720:format=yuv420p
-@end example
+@itemize
+@item
+Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
+@example
+scale_cuda=-2:720:format=yuv420p
+@end example
 
 @item
 Upscale to 4K using nearest neighbour algorithm.
@@ -21564,196 +21260,6 @@ scale_cuda=passthrough=0
 @end example
 @end itemize
 
-@anchor{scale_npp}
-@section scale_npp
-
-Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
-format conversion on CUDA video frames. Setting the output width and height
-works in the same way as for the @var{scale} filter.
-
-The following additional options are accepted:
-@table @option
-@item format
-The pixel format of the output CUDA frames. If set to the string "same" (the
-default), the input format will be kept. Note that automatic format negotiation
-and conversion is not yet supported for hardware frames
-
-@item interp_algo
-The interpolation algorithm used for resizing. One of the following:
-@table @option
-@item nn
-Nearest neighbour.
-
-@item linear
-@item cubic
-@item cubic2p_bspline
-2-parameter cubic (B=1, C=0)
-
-@item cubic2p_catmullrom
-2-parameter cubic (B=0, C=1/2)
-
-@item cubic2p_b05c03
-2-parameter cubic (B=1/2, C=3/10)
-
-@item super
-Supersampling
-
-@item lanczos
-@end table
-
-@item force_original_aspect_ratio
-Enable decreasing or increasing output video width or height if necessary to
-keep the original aspect ratio. Possible values:
-
-@table @samp
-@item disable
-Scale the video as specified and disable this feature.
-
-@item decrease
-The output video dimensions will automatically be decreased if needed.
-
-@item increase
-The output video dimensions will automatically be increased if needed.
-
-@end table
-
-One useful instance of this option is that when you know a specific device's
-maximum allowed resolution, you can use this to limit the output video to
-that, while retaining the aspect ratio. For example, device A allows
-1280x720 playback, and your video is 1920x800. Using this option (set it to
-decrease) and specifying 1280x720 to the command line makes the output
-1280x533.
-
-Please note that this is a different thing than specifying -1 for @option{w}
-or @option{h}, you still need to specify the output resolution for this option
-to work.
-
-@item force_divisible_by
-Ensures that both the output dimensions, width and height, are divisible by the
-given integer when used together with @option{force_original_aspect_ratio}. This
-works similar to using @code{-n} in the @option{w} and @option{h} options.
-
-This option respects the value set for @option{force_original_aspect_ratio},
-increasing or decreasing the resolution accordingly. The video's aspect ratio
-may be slightly modified.
-
-This option can be handy if you need to have a video fit within or exceed
-a defined resolution using @option{force_original_aspect_ratio} but also have
-encoder restrictions on width or height divisibility.
-
-@item eval
-Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values:
-
-@table @samp
-@item init
-Only evaluate expressions once during the filter initialization or when a command is processed.
-
-@item frame
-Evaluate expressions for each incoming frame.
-
-@end table
-
-@end table
-
-The values of the @option{w} and @option{h} options are expressions
-containing the following constants:
-
-@table @var
-@item in_w
-@item in_h
-The input width and height
-
-@item iw
-@item ih
-These are the same as @var{in_w} and @var{in_h}.
-
-@item out_w
-@item out_h
-The output (scaled) width and height
-
-@item ow
-@item oh
-These are the same as @var{out_w} and @var{out_h}
-
-@item a
-The same as @var{iw} / @var{ih}
-
-@item sar
-input sample aspect ratio
-
-@item dar
-The input display aspect ratio. Calculated from @code{(iw / ih) * sar}.
-
-@item n
-The (sequential) number of the input frame, starting from 0.
-Only available with @code{eval=frame}.
-
-@item t
-The presentation timestamp of the input frame, expressed as a number of
-seconds. Only available with @code{eval=frame}.
-
-@item pos
-The position (byte offset) of the frame in the input stream, or NaN if
-this information is unavailable and/or meaningless (for example in case of synthetic video).
-Only available with @code{eval=frame}.
-Deprecated, do not use.
-@end table
-
-@section scale2ref_npp
-
-Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input
-video, based on a reference video.
-
-See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same
-but uses the reference video instead of the main input as basis. scale2ref_npp
-also supports the following additional constants for the @option{w} and
-@option{h} options:
-
-@table @var
-@item main_w
-@item main_h
-The main input video's width and height
-
-@item main_a
-The same as @var{main_w} / @var{main_h}
-
-@item main_sar
-The main input video's sample aspect ratio
-
-@item main_dar, mdar
-The main input video's display aspect ratio. Calculated from
-@code{(main_w / main_h) * main_sar}.
-
-@item main_n
-The (sequential) number of the main input frame, starting from 0.
-Only available with @code{eval=frame}.
-
-@item main_t
-The presentation timestamp of the main input frame, expressed as a number of
-seconds. Only available with @code{eval=frame}.
-
-@item main_pos
-The position (byte offset) of the frame in the main input stream, or NaN if
-this information is unavailable and/or meaningless (for example in case of synthetic video).
-Only available with @code{eval=frame}.
-@end table
-
-@subsection Examples
-
-@itemize
-@item
-Scale a subtitle stream (b) to match the main video (a) in size before overlaying
-@example
-'scale2ref_npp[b][a];[a][b]overlay_cuda'
-@end example
-
-@item
-Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
-@example
-[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
-@end example
-@end itemize
-
 @section scale_vt
 
 Scale and convert the color parameters using VTPixelTransferSession.
@@ -22200,32 +21706,15 @@ Keep the same chroma location (default).
 @end table
 @end table
 
-@section sharpen_npp
-Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with
-border control.
+@section shear
+Apply shear transform to input video.
 
-The following additional options are accepted:
-@table @option
+This filter supports the following options:
 
-@item border_type
-Type of sampling to be used ad frame borders. One of the following:
 @table @option
-
-@item replicate
-Replicate pixel values.
-
-@end table
-@end table
-
-@section shear
-Apply shear transform to input video.
-
-This filter supports the following options:
-
-@table @option
-@item shx
-Shear factor in X-direction. Default value is 0.
-Allowed range is from -2 to 2.
+@item shx
+Shear factor in X-direction. Default value is 0.
+Allowed range is from -2 to 2.
 
 @item shy
 Shear factor in Y-direction. Default value is 0.
@@ -24304,47 +23793,6 @@ The command above can also be specified as:
 transpose=1:portrait
 @end example
 
-@section transpose_npp
-
-Transpose rows with columns in the input video and optionally flip it.
-For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options.
-
-It accepts the following parameters:
-
-@table @option
-
-@item dir
-Specify the transposition direction.
-
-Can assume the following values:
-@table @samp
-@item cclock_flip
-Rotate by 90 degrees counterclockwise and vertically flip. (default)
-
-@item clock
-Rotate by 90 degrees clockwise.
-
-@item cclock
-Rotate by 90 degrees counterclockwise.
-
-@item clock_flip
-Rotate by 90 degrees clockwise and vertically flip.
-@end table
-
-@item passthrough
-Do not apply the transposition if the input geometry matches the one
-specified by the specified value. It accepts the following values:
-@table @samp
-@item none
-Always apply transposition. (default)
-@item portrait
-Preserve portrait geometry (when @var{height} >= @var{width}).
-@item landscape
-Preserve landscape geometry (when @var{width} >= @var{height}).
-@end table
-
-@end table
-
 @section trim
 Trim the input so that the output contains one continuous subpart of the input.
 
@@ -26362,64 +25810,6 @@ filter").
 It accepts the following parameters:
 
 
-@table @option
-
-@item mode
-The interlacing mode to adopt. It accepts one of the following values:
-
-@table @option
-@item 0, send_frame
-Output one frame for each frame.
-@item 1, send_field
-Output one frame for each field.
-@item 2, send_frame_nospatial
-Like @code{send_frame}, but it skips the spatial interlacing check.
-@item 3, send_field_nospatial
-Like @code{send_field}, but it skips the spatial interlacing check.
-@end table
-
-The default value is @code{send_frame}.
-
-@item parity
-The picture field parity assumed for the input interlaced video. It accepts one
-of the following values:
-
-@table @option
-@item 0, tff
-Assume the top field is first.
-@item 1, bff
-Assume the bottom field is first.
-@item -1, auto
-Enable automatic detection of field parity.
-@end table
-
-The default value is @code{auto}.
-If the interlacing is unknown or the decoder does not export this information,
-top field first will be assumed.
-
-@item deint
-Specify which frames to deinterlace. Accepts one of the following
-values:
-
-@table @option
-@item 0, all
-Deinterlace all frames.
-@item 1, interlaced
-Only deinterlace frames marked as interlaced.
-@end table
-
-The default value is @code{all}.
-@end table
-
-@section yadif_cuda
-
-Deinterlace the input video using the @ref{yadif} algorithm, but implemented
-in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
-and/or nvenc.
-
-It accepts the following parameters:
-
-
 @table @option
 
 @item mode
@@ -26890,6 +26280,693 @@ value.
 
 @c man end VIDEO FILTERS
 
+@chapter CUDA Video Filters
+@c man begin CUDA Video Filters
+
+To enable compilation of these filters you need to configure FFmpeg with
+@code{--enable-cuda-nvcc} and/or @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.
+
+Running CUDA filters requires you to initialize a hardware device and to pass that device to all filters in any filter graph.
+@table @option
+
+@item -init_hw_device cuda[=@var{name}][:@var{device}[,@var{key=value}...]]
+Initialise a new hardware device of type @var{cuda} called @var{name}, using the
+given device parameters.
+
+@item -filter_hw_device @var{name}
+Pass the hardware device called @var{name} to all filters in any filter graph.
+
+@end table
+
+For more detailed information see @url{https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options}
+
+@itemize
+@item
+Example of initializing second CUDA device on the system and running scale_cuda and bilateral_cuda filters.
+@example
+./ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -init_hw_device cuda:1 -filter_complex \
+"[0:v]scale_cuda=format=yuv444p[scaled_video];[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
+-an -sn -c:v h264_nvenc -cq 20 out.mp4
+@end example
+@end itemize
+
+Since CUDA filters operate exclusively on GPU memory, frame data must sometimes be uploaded (@ref{hwupload}) to hardware surfaces associated with the appropriate CUDA device before processing, and downloaded (@ref{hwdownload}) back to normal memory afterward, if required. Whether @ref{hwupload} or @ref{hwdownload} is necessary depends on the specific workflow:
+
+@itemize
+@item If the input frames are already in GPU memory (e.g., when using @code{-hwaccel cuda} or @code{-hwaccel_output_format cuda}), explicit use of @ref{hwupload} is not needed, as the data is already in the appropriate memory space.
+@item If the input frames are in CPU memory (e.g., software-decoded frames or frames processed by CPU-based filters), it is necessary to use @ref{hwupload} to transfer the data to GPU memory for CUDA processing.
+@item If the output of the CUDA filters needs to be further processed by software-based filters or saved in a format not supported by GPU-based encoders, @ref{hwdownload} is required to transfer the data back to CPU memory.
+@end itemize
+Note that @ref{hwupload} uploads data to a surface with the same layout as the software frame, so it may be necessary to add a @ref{format} filter immediately before @ref{hwupload} to ensure the input is in the correct format. Similarly, @ref{hwdownload} may not support all output formats, so an additional @ref{format} filter may need to be inserted immediately after @ref{hwdownload} in the filter graph to ensure compatibility.
+
+@section CUDA
+Below is a description of the currently available Nvidia CUDA video filters.
+
+To enable compilation of these filters you need to configure FFmpeg with
+@code{--enable-cuda-nvcc} and Nvidia CUDA Toolkit must be installed.
+
+@subsection bilateral_cuda
+CUDA accelerated bilateral filter, an edge preserving filter.
+This filter is mathematically accurate thanks to the use of GPU acceleration.
+For best output quality, use one to one chroma subsampling, i.e. yuv444p format.
+
+The filter accepts the following options:
+@table @option
+@item sigmaS
+Set sigma of gaussian function to calculate spatial weight, also called sigma space.
+Allowed range is 0.1 to 512. Default is 0.1.
+
+@item sigmaR
+Set sigma of gaussian function to calculate color range weight, also called sigma color.
+Allowed range is 0.1 to 512. Default is 0.1.
+
+@item window_size
+Set window size of the bilateral function to determine the number of neighbours to loop on.
+If the number entered is even, one will be added automatically.
+Allowed range is 1 to 255. Default is 1.
+@end table
+@subsubsection Examples
+
+@itemize
+@item
+Apply the bilateral filter on a video.
+
+@example
+./ffmpeg -v verbose \
+-hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
+-init_hw_device cuda \
+-filter_complex \
+" \
+[0:v]scale_cuda=format=yuv444p[scaled_video];
+[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
+-an -sn -c:v h264_nvenc -cq 20 out.mp4
+@end example
+
+@end itemize
+
+@subsection bwdif_cuda
+
+Deinterlace the input video using the @ref{bwdif} algorithm, but implemented
+in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
+and/or nvenc.
+
+It accepts the following parameters:
+
+@table @option
+@item mode
+The interlacing mode to adopt. It accepts one of the following values:
+
+@table @option
+@item 0, send_frame
+Output one frame for each frame.
+@item 1, send_field
+Output one frame for each field.
+@end table
+
+The default value is @code{send_field}.
+
+@item parity
+The picture field parity assumed for the input interlaced video. It accepts one
+of the following values:
+
+@table @option
+@item 0, tff
+Assume the top field is first.
+@item 1, bff
+Assume the bottom field is first.
+@item -1, auto
+Enable automatic detection of field parity.
+@end table
+
+The default value is @code{auto}.
+If the interlacing is unknown or the decoder does not export this information,
+top field first will be assumed.
+
+@item deint
+Specify which frames to deinterlace. Accepts one of the following
+values:
+
+@table @option
+@item 0, all
+Deinterlace all frames.
+@item 1, interlaced
+Only deinterlace frames marked as interlaced.
+@end table
+
+The default value is @code{all}.
+@end table
+
+@subsection chromakey_cuda
+CUDA accelerated YUV colorspace color/chroma keying.
+
+This filter works like normal chromakey filter but operates on CUDA frames.
+for more details and parameters see @ref{chromakey}.
+
+@subsubsection Examples
+
+@itemize
+@item
+Make all the green pixels in the input video transparent and use it as an overlay for another video:
+
+@example
+./ffmpeg \
+    -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
+    -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
+    -init_hw_device cuda \
+    -filter_complex \
+    " \
+        [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
+        [1:v]scale_cuda=format=yuv420p[base]; \
+        [base][overlay_video]overlay_cuda" \
+    -an -sn -c:v h264_nvenc -cq 20 output.mp4
+@end example
+
+@item
+Process two software sources, explicitly uploading the frames:
+
+@example
+./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
+    -f lavfi -i color=size=800x600:color=white,format=yuv420p \
+    -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
+    -filter_complex \
+    " \
+        [0]hwupload[under]; \
+        [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
+        [under][over]overlay_cuda" \
+    -c:v hevc_nvenc -cq 18 -preset slow output.mp4
+@end example
+
+@end itemize
+
+@subsection colorspace_cuda
+
+CUDA accelerated implementation of the colorspace filter.
+
+It is by no means feature complete compared to the software colorspace filter,
+and at the current time only supports color range conversion between jpeg/full
+and mpeg/limited range.
+
+The filter accepts the following options:
+
+@table @option
+@item range
+Specify output color range.
+
+The accepted values are:
+@table @samp
+@item tv
+TV (restricted) range
+
+@item mpeg
+MPEG (restricted) range
+
+@item pc
+PC (full) range
+
+@item jpeg
+JPEG (full) range
+
+@end table
+
+@end table
+
+@anchor{overlay_cuda}
+@subsection overlay_cuda
+
+Overlay one video on top of another.
+
+This is the CUDA variant of the @ref{overlay} filter.
+It only accepts CUDA frames. The underlying input pixel formats have to match.
+
+It takes two inputs and has one output. The first input is the "main"
+video on which the second input is overlaid.
+
+It accepts the following parameters:
+
+@table @option
+@item x
+@item y
+Set expressions for the x and y coordinates of the overlaid video
+on the main video.
+
+They can contain the following parameters:
+
+@table @option
+
+@item main_w, W
+@item main_h, H
+The main input width and height.
+
+@item overlay_w, w
+@item overlay_h, h
+The overlay input width and height.
+
+@item x
+@item y
+The computed values for @var{x} and @var{y}. They are evaluated for
+each new frame.
+
+@item n
+The ordinal index of the main input frame, starting from 0.
+
+@item pos
+The byte offset position in the file of the main input frame, NAN if unknown.
+Deprecated, do not use.
+
+@item t
+The timestamp of the main input frame, expressed in seconds, NAN if unknown.
+
+@end table
+
+Default value is "0" for both expressions.
+
+@item eval
+Set when the expressions for @option{x} and @option{y} are evaluated.
+
+It accepts the following values:
+@table @option
+@item init
+Evaluate expressions once during filter initialization or
+when a command is processed.
+
+@item frame
+Evaluate expressions for each incoming frame
+@end table
+
+Default value is @option{frame}.
+
+@item eof_action
+See @ref{framesync}.
+
+@item shortest
+See @ref{framesync}.
+
+@item repeatlast
+See @ref{framesync}.
+
+@end table
+
+This filter also supports the @ref{framesync} options.
+
+@anchor{scale_cuda}
+@subsection scale_cuda
+
+Scale (resize) and convert (pixel format) the input video, using accelerated CUDA kernels.
+Setting the output width and height works in the same way as for the @ref{scale} filter.
+
+The filter accepts the following options:
+@table @option
+@item w
+@item h
+Set the output video dimension expression. Default value is the input dimension.
+
+Allows for the same expressions as the @ref{scale} filter.
+
+@item interp_algo
+Sets the algorithm used for scaling:
+
+@table @var
+@item nearest
+Nearest neighbour
+
+Used by default if input parameters match the desired output.
+
+@item bilinear
+Bilinear
+
+@item bicubic
+Bicubic
+
+This is the default.
+
+@item lanczos
+Lanczos
+
+@end table
+
+@item format
+Controls the output pixel format. By default, or if none is specified, the input
+pixel format is used.
+
+The filter does not support converting between YUV and RGB pixel formats.
+
+@item passthrough
+If set to 0, every frame is processed, even if no conversion is necessary.
+This mode can be useful to use the filter as a buffer for a downstream
+frame-consumer that exhausts the limited decoder frame pool.
+
+If set to 1, frames are passed through as-is if they match the desired output
+parameters. This is the default behaviour.
+
+@item param
+Algorithm-Specific parameter.
+
+Affects the curves of the bicubic algorithm.
+
+@item force_original_aspect_ratio
+@item force_divisible_by
+Work the same as the identical @ref{scale} filter options.
+
+@end table
+
+@subsubsection Examples
+
+@itemize
+@item
+Scale input to 720p, keeping aspect ratio and ensuring the output is yuv420p.
+@example
+scale_cuda=-2:720:format=yuv420p
+@end example
+
+@item
+Upscale to 4K using nearest neighbour algorithm.
+@example
+scale_cuda=4096:2160:interp_algo=nearest
+@end example
+
+@item
+Don't do any conversion or scaling, but copy all input frames into newly allocated ones.
+This can be useful to deal with a filter and encode chain that otherwise exhausts the
+decoders frame pool.
+@example
+scale_cuda=passthrough=0
+@end example
+@end itemize
+
+@subsection yadif_cuda
+
+Deinterlace the input video using the @ref{yadif} algorithm, but implemented
+in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
+and/or nvenc.
+
+It accepts the following parameters:
+
+
+@table @option
+
+@item mode
+The interlacing mode to adopt. It accepts one of the following values:
+
+@table @option
+@item 0, send_frame
+Output one frame for each frame.
+@item 1, send_field
+Output one frame for each field.
+@item 2, send_frame_nospatial
+Like @code{send_frame}, but it skips the spatial interlacing check.
+@item 3, send_field_nospatial
+Like @code{send_field}, but it skips the spatial interlacing check.
+@end table
+
+The default value is @code{send_frame}.
+
+@item parity
+The picture field parity assumed for the input interlaced video. It accepts one
+of the following values:
+
+@table @option
+@item 0, tff
+Assume the top field is first.
+@item 1, bff
+Assume the bottom field is first.
+@item -1, auto
+Enable automatic detection of field parity.
+@end table
+
+The default value is @code{auto}.
+If the interlacing is unknown or the decoder does not export this information,
+top field first will be assumed.
+
+@item deint
+Specify which frames to deinterlace. Accepts one of the following
+values:
+
+@table @option
+@item 0, all
+Deinterlace all frames.
+@item 1, interlaced
+Only deinterlace frames marked as interlaced.
+@end table
+
+The default value is @code{all}.
+@end table
+
+@section CUDA NPP
+Below is a description of the currently available NVIDIA Performance Primitives (libnpp) video filters.
+
+To enable compilation of these filters you need to configure FFmpeg with @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.
+
+@anchor{scale_npp}
+@subsection scale_npp
+
+Use the NVIDIA Performance Primitives (libnpp) to perform scaling and/or pixel
+format conversion on CUDA video frames. Setting the output width and height
+works in the same way as for the @var{scale} filter.
+
+The following additional options are accepted:
+@table @option
+@item format
+The pixel format of the output CUDA frames. If set to the string "same" (the
+default), the input format will be kept. Note that automatic format negotiation
+and conversion is not yet supported for hardware frames
+
+@item interp_algo
+The interpolation algorithm used for resizing. One of the following:
+@table @option
+@item nn
+Nearest neighbour.
+
+@item linear
+@item cubic
+@item cubic2p_bspline
+2-parameter cubic (B=1, C=0)
+
+@item cubic2p_catmullrom
+2-parameter cubic (B=0, C=1/2)
+
+@item cubic2p_b05c03
+2-parameter cubic (B=1/2, C=3/10)
+
+@item super
+Supersampling
+
+@item lanczos
+@end table
+
+@item force_original_aspect_ratio
+Enable decreasing or increasing output video width or height if necessary to
+keep the original aspect ratio. Possible values:
+
+@table @samp
+@item disable
+Scale the video as specified and disable this feature.
+
+@item decrease
+The output video dimensions will automatically be decreased if needed.
+
+@item increase
+The output video dimensions will automatically be increased if needed.
+
+@end table
+
+One useful instance of this option is that when you know a specific device's
+maximum allowed resolution, you can use this to limit the output video to
+that, while retaining the aspect ratio. For example, device A allows
+1280x720 playback, and your video is 1920x800. Using this option (set it to
+decrease) and specifying 1280x720 to the command line makes the output
+1280x533.
+
+Please note that this is a different thing than specifying -1 for @option{w}
+or @option{h}, you still need to specify the output resolution for this option
+to work.
+
+@item force_divisible_by
+Ensures that both the output dimensions, width and height, are divisible by the
+given integer when used together with @option{force_original_aspect_ratio}. This
+works similar to using @code{-n} in the @option{w} and @option{h} options.
+
+This option respects the value set for @option{force_original_aspect_ratio},
+increasing or decreasing the resolution accordingly. The video's aspect ratio
+may be slightly modified.
+
+This option can be handy if you need to have a video fit within or exceed
+a defined resolution using @option{force_original_aspect_ratio} but also have
+encoder restrictions on width or height divisibility.
+
+@item eval
+Specify when to evaluate @var{width} and @var{height} expression. It accepts the following values:
+
+@table @samp
+@item init
+Only evaluate expressions once during the filter initialization or when a command is processed.
+
+@item frame
+Evaluate expressions for each incoming frame.
+
+@end table
+
+@end table
+
+The values of the @option{w} and @option{h} options are expressions
+containing the following constants:
+
+@table @var
+@item in_w
+@item in_h
+The input width and height
+
+@item iw
+@item ih
+These are the same as @var{in_w} and @var{in_h}.
+
+@item out_w
+@item out_h
+The output (scaled) width and height
+
+@item ow
+@item oh
+These are the same as @var{out_w} and @var{out_h}
+
+@item a
+The same as @var{iw} / @var{ih}
+
+@item sar
+input sample aspect ratio
+
+@item dar
+The input display aspect ratio. Calculated from @code{(iw / ih) * sar}.
+
+@item n
+The (sequential) number of the input frame, starting from 0.
+Only available with @code{eval=frame}.
+
+@item t
+The presentation timestamp of the input frame, expressed as a number of
+seconds. Only available with @code{eval=frame}.
+
+@item pos
+The position (byte offset) of the frame in the input stream, or NaN if
+this information is unavailable and/or meaningless (for example in case of synthetic video).
+Only available with @code{eval=frame}.
+Deprecated, do not use.
+@end table
+
+@subsection scale2ref_npp
+
+Use the NVIDIA Performance Primitives (libnpp) to scale (resize) the input
+video, based on a reference video.
+
+See the @ref{scale_npp} filter for available options, scale2ref_npp supports the same
+but uses the reference video instead of the main input as basis. scale2ref_npp
+also supports the following additional constants for the @option{w} and
+@option{h} options:
+
+@table @var
+@item main_w
+@item main_h
+The main input video's width and height
+
+@item main_a
+The same as @var{main_w} / @var{main_h}
+
+@item main_sar
+The main input video's sample aspect ratio
+
+@item main_dar, mdar
+The main input video's display aspect ratio. Calculated from
+@code{(main_w / main_h) * main_sar}.
+
+@item main_n
+The (sequential) number of the main input frame, starting from 0.
+Only available with @code{eval=frame}.
+
+@item main_t
+The presentation timestamp of the main input frame, expressed as a number of
+seconds. Only available with @code{eval=frame}.
+
+@item main_pos
+The position (byte offset) of the frame in the main input stream, or NaN if
+this information is unavailable and/or meaningless (for example in case of synthetic video).
+Only available with @code{eval=frame}.
+@end table
+
+@subsubsection Examples
+
+@itemize
+@item
+Scale a subtitle stream (b) to match the main video (a) in size before overlaying
+@example
+'scale2ref_npp[b][a];[a][b]overlay_cuda'
+@end example
+
+@item
+Scale a logo to 1/10th the height of a video, while preserving its display aspect ratio.
+@example
+[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
+@end example
+@end itemize
+
+@subsection sharpen_npp
+Use the NVIDIA Performance Primitives (libnpp) to perform image sharpening with
+border control.
+
+The following additional options are accepted:
+@table @option
+
+@item border_type
+Type of sampling to be used ad frame borders. One of the following:
+@table @option
+
+@item replicate
+Replicate pixel values.
+
+@end table
+@end table
+
+@subsection transpose_npp
+
+Transpose rows with columns in the input video and optionally flip it.
+For more in depth examples see the @ref{transpose} video filter, which shares mostly the same options.
+
+It accepts the following parameters:
+
+@table @option
+
+@item dir
+Specify the transposition direction.
+
+Can assume the following values:
+@table @samp
+@item cclock_flip
+Rotate by 90 degrees counterclockwise and vertically flip. (default)
+
+@item clock
+Rotate by 90 degrees clockwise.
+
+@item cclock
+Rotate by 90 degrees counterclockwise.
+
+@item clock_flip
+Rotate by 90 degrees clockwise and vertically flip.
+@end table
+
+@item passthrough
+Do not apply the transposition if the input geometry matches the one
+specified by the specified value. It accepts the following values:
+@table @samp
+@item none
+Always apply transposition. (default)
+@item portrait
+Preserve portrait geometry (when @var{height} >= @var{width}).
+@item landscape
+Preserve landscape geometry (when @var{width} >= @var{height}).
+@end table
+
+@end table
+
+@c man end CUDA Video Filters
+
+
 @chapter OpenCL Video Filters
 @c man begin OPENCL VIDEO FILTERS
 
-- 
2.39.5 (Apple Git-154)

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [FFmpeg-devel] [PATCH] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters.
  2025-02-02 13:23         ` [FFmpeg-devel] [PATCH] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters Danil Iashchenko
@ 2025-02-04  5:40           ` Gyan Doshi
  0 siblings, 0 replies; 6+ messages in thread
From: Gyan Doshi @ 2025-02-04  5:40 UTC (permalink / raw)
  To: ffmpeg-devel

Hi Danil,

See notes below.

On 2025-02-02 06:53 pm, Danil Iashchenko wrote:
> ---
>   doc/filters.texi | 1323 ++++++++++++++++++++++++----------------------
>   1 file changed, 700 insertions(+), 623 deletions(-)
>
> diff --git a/doc/filters.texi b/doc/filters.texi
> index c2817b2661..7460b7ef18 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi

> @@ -26890,6 +26280,693 @@ value.
>   
>   @c man end VIDEO FILTERS
>   
> +@chapter CUDA Video Filters
> +@c man begin CUDA Video Filters
> +
> +To enable compilation of these filters you need to configure FFmpeg with
> +@code{--enable-cuda-nvcc} and/or @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.


1) cuda-llvm also suffices and doesn't require non-free.
2) Identify what npp is and make clear that only npp filters require 
libnpp. For either cuda-nvcc and npp, nonfree is also required.

> +@section CUDA
> +Below is a description of the currently available Nvidia CUDA video filters.
> +
> +To enable compilation of these filters you need to configure FFmpeg with
> +@code{--enable-cuda-nvcc} and Nvidia CUDA Toolkit must be installed.

Same note about cuda-llvm.

> +@section CUDA NPP
> +Below is a description of the currently available NVIDIA Performance Primitives (libnpp) video filters.
> +
> +To enable compilation of these filters you need to configure FFmpeg with @code{--enable-libnpp} and Nvidia CUDA Toolkit must be installed.
Note that it is "configure FFmpeg with libnpp" in addition to cuda, and 
with nonfree.
> +@end table
> +
> +@c man end CUDA Video Filters

Rest all looks ok.

Regards,
Gyan
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-02-04  5:40 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20250116004751.56789-1-danyaschenko@gmail.com>
2025-01-26 10:55 ` [FFmpeg-devel] [PATCH 1/1] [doc/filters] add nvidia cuda and cuda npp sections Gyan Doshi
2025-01-28 19:12   ` [FFmpeg-devel] [PATCH 1/2] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters Danil Iashchenko
2025-01-28 19:12     ` [FFmpeg-devel] [PATCH 2/2] doc/filters: Remove redundant *_cuda and *_npp filters since they are already in CUDA Video Filters section Danil Iashchenko
2025-02-02  6:58       ` Gyan Doshi
2025-02-02 13:23         ` [FFmpeg-devel] [PATCH] doc/filters: Add CUDA Video Filters section for CUDA-based and CUDA+NPP based filters Danil Iashchenko
2025-02-04  5:40           ` Gyan Doshi

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git