FFmpeg
Loading...
Searching...
No Matches
vf_scale_npp.c File Reference

scale video filter More...

#include <nppi.h>
#include <stdio.h>
#include <string.h>
#include "libavutil/hwcontext.h"
#include "libavutil/hwcontext_cuda_internal.h"
#include "libavutil/cuda_check.h"
#include "libavutil/internal.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "libavutil/eval.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
#include "filters.h"
#include "formats.h"
#include "scale_eval.h"
#include "video.h"

Go to the source code of this file.

Data Structures

struct  NPPScaleStageContext
 
struct  NPPScaleContext
 

Macros

#define CHECK_CU(x)
 
#define IS_SCALE2REF(ctx)
 
#define OFFSET(x)
 
#define FLAGS   (AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM)
 

Enumerations

enum  ScaleStage { STAGE_DEINTERLEAVE , STAGE_RESIZE , STAGE_INTERLEAVE , STAGE_NB }
 
enum  var_name {
  VAR_IN_W , VAR_IW , VAR_IN_H , VAR_IH ,
  VAR_OUT_W , VAR_OW , VAR_OUT_H , VAR_OH ,
  VAR_A , VAR_SAR , VAR_DAR , VAR_N ,
  VAR_T , VAR_S2R_MAIN_W , VAR_S2R_MAIN_H , VAR_S2R_MAIN_A ,
  VAR_S2R_MAIN_SAR , VAR_S2R_MAIN_DAR , VAR_S2R_MDAR , VAR_S2R_MAIN_N ,
  VAR_S2R_MAIN_T , VARS_NB
}
 
enum  EvalMode { EVAL_MODE_INIT , EVAL_MODE_FRAME , EVAL_MODE_NB }
 

Functions

static int config_props (AVFilterLink *outlink)
 
static int check_exprs (AVFilterContext *ctx)
 
static int nppscale_parse_expr (AVFilterContext *ctx, char *str_expr, AVExpr **pexpr_ptr, const char *var, const char *args)
 
static av_cold int nppscale_init (AVFilterContext *ctx)
 
static int nppscale_eval_dimensions (AVFilterContext *ctx)
 
static void nppscale_uninit (AVFilterContext *ctx)
 
static int init_stage (NPPScaleStageContext *stage, AVBufferRef *device_ctx)
 
static int format_is_supported (enum AVPixelFormat fmt)
 
static enum AVPixelFormat get_deinterleaved_format (enum AVPixelFormat fmt)
 
static int init_processing_chain (AVFilterContext *ctx, int in_width, int in_height, int out_width, int out_height)
 
static int config_props_ref (AVFilterLink *outlink)
 
static int nppscale_deinterleave (AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)
 
static int nppscale_resize (AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)
 
static int nppscale_interleave (AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)
 
static int nppscale_scale (AVFilterLink *link, AVFrame *out, AVFrame *in)
 
static int nppscale_filter_frame (AVFilterLink *link, AVFrame *in)
 
static int nppscale_filter_frame_ref (AVFilterLink *link, AVFrame *in)
 
static int request_frame (AVFilterLink *outlink)
 
static int request_frame_ref (AVFilterLink *outlink)
 

Variables

static enum AVPixelFormat supported_formats []
 
static enum AVPixelFormat deinterleaved_formats [][2]
 
static const char *const var_names []
 
const FFFilter ff_vf_scale2ref_npp
 
static int(*const nppscale_process [])(AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)
 
static const AVOption options []
 
static const AVClass nppscale_class
 
static const AVFilterPad nppscale_inputs []
 
static const AVFilterPad nppscale_outputs []
 
const FFFilter ff_vf_scale_npp
 
static const AVFilterPad nppscale2ref_inputs []
 
static const AVFilterPad nppscale2ref_outputs []
 

Detailed Description

scale video filter

Definition in file vf_scale_npp.c.

Macro Definition Documentation

◆ CHECK_CU

#define CHECK_CU ( x)
Value:
FF_CUDA_CHECK_DL(ctx, device_hwctx->internal->cuda_dl, x)
#define FF_CUDA_CHECK_DL(avclass, cudl, x)
Convenience wrapper for ff_cuda_check when dynamically loading cuda symbols.
Definition cuda_check.h:65
static AVFormatContext * ctx
Definition movenc.c:49

Definition at line 44 of file vf_scale_npp.c.

Referenced by nppscale_filter_frame().

◆ IS_SCALE2REF

#define IS_SCALE2REF ( ctx)
Value:
((ctx)->filter == &ff_vf_scale2ref_npp.p)
const FFFilter ff_vf_scale2ref_npp

Definition at line 166 of file vf_scale_npp.c.

Referenced by check_exprs(), config_props(), nppscale_eval_dimensions(), and nppscale_scale().

◆ OFFSET

#define OFFSET ( x)
Value:

Definition at line 966 of file vf_scale_npp.c.

◆ FLAGS

Definition at line 967 of file vf_scale_npp.c.

Enumeration Type Documentation

◆ ScaleStage

enum ScaleStage
Enumerator
STAGE_DEINTERLEAVE 
STAGE_RESIZE 
STAGE_INTERLEAVE 
STAGE_NB 

Definition at line 57 of file vf_scale_npp.c.

◆ var_name

enum var_name
Enumerator
VAR_IN_W 
VAR_IW 
VAR_IN_H 
VAR_IH 
VAR_OUT_W 
VAR_OW 
VAR_OUT_H 
VAR_OH 
VAR_A 
VAR_SAR 
VAR_DAR 
VAR_N 
VAR_T 
VAR_S2R_MAIN_W 
VAR_S2R_MAIN_H 
VAR_S2R_MAIN_A 
VAR_S2R_MAIN_SAR 
VAR_S2R_MAIN_DAR 
VAR_S2R_MDAR 
VAR_S2R_MAIN_N 
VAR_S2R_MAIN_T 
VARS_NB 

Definition at line 98 of file vf_scale_npp.c.

◆ EvalMode

enum EvalMode
Enumerator
EVAL_MODE_INIT 
EVAL_MODE_FRAME 
EVAL_MODE_NB 

Definition at line 118 of file vf_scale_npp.c.

Function Documentation

◆ config_props()

static int config_props ( AVFilterLink * outlink)
static

Definition at line 625 of file vf_scale_npp.c.

Referenced by nppscale_parse_expr(), and nppscale_scale().

◆ check_exprs()

static int check_exprs ( AVFilterContext * ctx)
static

Definition at line 170 of file vf_scale_npp.c.

Referenced by nppscale_parse_expr().

◆ nppscale_parse_expr()

static int nppscale_parse_expr ( AVFilterContext * ctx,
char * str_expr,
AVExpr ** pexpr_ptr,
const char * var,
const char * args )
static

Definition at line 223 of file vf_scale_npp.c.

Referenced by nppscale_init(), and nppscale_scale().

◆ nppscale_init()

static av_cold int nppscale_init ( AVFilterContext * ctx)
static

Definition at line 279 of file vf_scale_npp.c.

◆ nppscale_eval_dimensions()

static int nppscale_eval_dimensions ( AVFilterContext * ctx)
static

Definition at line 356 of file vf_scale_npp.c.

Referenced by config_props().

◆ nppscale_uninit()

static void nppscale_uninit ( AVFilterContext * ctx)
static

Definition at line 417 of file vf_scale_npp.c.

◆ init_stage()

static int init_stage ( NPPScaleStageContext * stage,
AVBufferRef * device_ctx )
static

Definition at line 433 of file vf_scale_npp.c.

Referenced by init_processing_chain().

◆ format_is_supported()

static int format_is_supported ( enum AVPixelFormat fmt)
static

Definition at line 492 of file vf_scale_npp.c.

Referenced by init_processing_chain().

◆ get_deinterleaved_format()

static enum AVPixelFormat get_deinterleaved_format ( enum AVPixelFormat fmt)
static

Definition at line 502 of file vf_scale_npp.c.

Referenced by init_processing_chain().

◆ init_processing_chain()

static int init_processing_chain ( AVFilterContext * ctx,
int in_width,
int in_height,
int out_width,
int out_height )
static

Definition at line 516 of file vf_scale_npp.c.

Referenced by config_props().

◆ config_props_ref()

static int config_props_ref ( AVFilterLink * outlink)
static

Definition at line 679 of file vf_scale_npp.c.

Referenced by nppscale_filter_frame_ref().

◆ nppscale_deinterleave()

static int nppscale_deinterleave ( AVFilterContext * ctx,
NPPScaleStageContext * stage,
AVFrame * out,
AVFrame * in )
static

Definition at line 697 of file vf_scale_npp.c.

◆ nppscale_resize()

static int nppscale_resize ( AVFilterContext * ctx,
NPPScaleStageContext * stage,
AVFrame * out,
AVFrame * in )
static

Definition at line 721 of file vf_scale_npp.c.

◆ nppscale_interleave()

static int nppscale_interleave ( AVFilterContext * ctx,
NPPScaleStageContext * stage,
AVFrame * out,
AVFrame * in )
static

Definition at line 749 of file vf_scale_npp.c.

◆ nppscale_scale()

static int nppscale_scale ( AVFilterLink * link,
AVFrame * out,
AVFrame * in )
static

Definition at line 781 of file vf_scale_npp.c.

Referenced by nppscale_filter_frame().

◆ nppscale_filter_frame()

static int nppscale_filter_frame ( AVFilterLink * link,
AVFrame * in )
static

Definition at line 880 of file vf_scale_npp.c.

◆ nppscale_filter_frame_ref()

static int nppscale_filter_frame_ref ( AVFilterLink * link,
AVFrame * in )
static

Definition at line 925 of file vf_scale_npp.c.

◆ request_frame()

static int request_frame ( AVFilterLink * outlink)
static

Definition at line 956 of file vf_scale_npp.c.

◆ request_frame_ref()

static int request_frame_ref ( AVFilterLink * outlink)
static

Definition at line 961 of file vf_scale_npp.c.

Variable Documentation

◆ supported_formats

enum AVPixelFormat supported_formats[]
static
Initial value:
= {
}
@ AV_PIX_FMT_NV12
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
Definition pixfmt.h:96
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition pixfmt.h:73
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
Definition pixfmt.h:108
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition pixfmt.h:78

Definition at line 46 of file vf_scale_npp.c.

◆ deinterleaved_formats

enum AVPixelFormat deinterleaved_formats[][2]
static
Initial value:

Definition at line 53 of file vf_scale_npp.c.

Referenced by get_deinterleaved_format().

◆ var_names

const char* const var_names[]
static
Initial value:
= {
"in_w", "iw",
"in_h", "ih",
"out_w", "ow",
"out_h", "oh",
"a",
"sar",
"dar",
"n",
"t",
"main_w",
"main_h",
"main_a",
"main_sar",
"main_dar", "mdar",
"main_n",
"main_t",
}
#define NULL
Definition coverity.c:32

Definition at line 78 of file vf_scale_npp.c.

◆ ff_vf_scale2ref_npp

const FFFilter ff_vf_scale2ref_npp
Initial value:
= {
.p.name = "scale2ref_npp",
.p.description = NULL_IF_CONFIG_SMALL("NVIDIA Performance Primitives video "
"scaling and format conversion to the "
"given reference."),
.p.priv_class = &nppscale_class,
.init = nppscale_init,
.uninit = nppscale_uninit,
.priv_size = sizeof(NPPScaleContext),
.flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
}
#define FILTER_INPUTS(array)
Definition filters.h:264
#define FILTER_OUTPUTS(array)
Definition filters.h:265
#define FF_FILTER_FLAG_HWFRAME_AWARE
The filter is aware of hardware frames, and any hardware frame context should not be automatically pr...
Definition filters.h:208
#define FILTER_SINGLE_PIXFMT(pix_fmt_)
Definition filters.h:254
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
@ AV_PIX_FMT_CUDA
HW acceleration through CUDA.
Definition pixfmt.h:260
static const AVFilterPad nppscale2ref_inputs[]
static const AVClass nppscale_class
static void nppscale_uninit(AVFilterContext *ctx)
static const AVFilterPad nppscale2ref_outputs[]
static av_cold int nppscale_init(AVFilterContext *ctx)

Definition at line 165 of file vf_scale_npp.c.

◆ nppscale_process

int(*const nppscale_process[])(AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in) ( AVFilterContext * ctx,
NPPScaleStageContext * stage,
AVFrame * out,
AVFrame * in )
static
Initial value:
= {
}
@ STAGE_RESIZE
@ STAGE_DEINTERLEAVE
@ STAGE_INTERLEAVE
static int nppscale_resize(AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)
static int nppscale_interleave(AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)
static int nppscale_deinterleave(AVFilterContext *ctx, NPPScaleStageContext *stage, AVFrame *out, AVFrame *in)

Definition at line 774 of file vf_scale_npp.c.

Referenced by nppscale_scale().

◆ options

const AVOption options[]
static
Initial value:
= {
{ "w", "Output video width", OFFSET(w_expr), AV_OPT_TYPE_STRING, .flags = FLAGS },
{ "h", "Output video height", OFFSET(h_expr), AV_OPT_TYPE_STRING, .flags = FLAGS },
{ "format", "Output pixel format", OFFSET(format_str), AV_OPT_TYPE_STRING, { .str = "same" }, .flags = FLAGS },
{ "s", "Output video size", OFFSET(size_str), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = FLAGS },
{ "interp_algo", "Interpolation algorithm used for resizing", OFFSET(interp_algo), AV_OPT_TYPE_INT, { .i64 = NPPI_INTER_CUBIC }, 0, INT_MAX, FLAGS, .unit = "interp_algo" },
{ "nn", "nearest neighbour", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_NN }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "linear", "linear", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_LINEAR }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "cubic", "cubic", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_CUBIC }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "cubic2p_bspline", "2-parameter cubic (B=1, C=0)", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_CUBIC2P_BSPLINE }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "cubic2p_catmullrom", "2-parameter cubic (B=0, C=1/2)", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_CUBIC2P_CATMULLROM }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "cubic2p_b05c03", "2-parameter cubic (B=1/2, C=3/10)", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_CUBIC2P_B05C03 }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "super", "supersampling", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_SUPER }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "lanczos", "Lanczos", 0, AV_OPT_TYPE_CONST, { .i64 = NPPI_INTER_LANCZOS }, 0, 0, FLAGS, .unit = "interp_algo" },
{ "force_original_aspect_ratio", "decrease or increase w/h if necessary to keep the original AR", OFFSET(force_original_aspect_ratio), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, SCALE_FORCE_OAR_NB-1, FLAGS, .unit = "force_oar" },
{ "disable", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_FORCE_OAR_DISABLE }, 0, 0, FLAGS, .unit = "force_oar" },
{ "decrease", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_FORCE_OAR_DECREASE }, 0, 0, FLAGS, .unit = "force_oar" },
{ "increase", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = SCALE_FORCE_OAR_INCREASE }, 0, 0, FLAGS, .unit = "force_oar" },
{ "force_divisible_by", "enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used", OFFSET(force_divisible_by), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 256, FLAGS },
{ "reset_sar", "reset SAR to 1 and scale to square pixels if scaling proportionally", OFFSET(reset_sar), AV_OPT_TYPE_BOOL, { .i64 = 0}, 0, 1, FLAGS },
{ "eval", "specify when to evaluate expressions", OFFSET(eval_mode), AV_OPT_TYPE_INT, { .i64 = EVAL_MODE_INIT }, 0, EVAL_MODE_NB-1, FLAGS, .unit = "eval" },
{ "init", "eval expressions once during initialization", 0, AV_OPT_TYPE_CONST, { .i64 = EVAL_MODE_INIT }, 0, 0, FLAGS, .unit = "eval" },
{ "frame", "eval expressions during initialization and per-frame", 0, AV_OPT_TYPE_CONST, { .i64 = EVAL_MODE_FRAME }, 0, 0, FLAGS, .unit = "eval" },
{ NULL },
}
@ EVAL_MODE_NB
Definition af_volume.h:42
@ EVAL_MODE_FRAME
Definition af_volume.h:41
#define FLAGS
Definition cmdutils.c:598
#define OFFSET(x)
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition opt.h:298
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
Definition opt.h:326
@ AV_OPT_TYPE_STRING
Underlying C type is a uint8_t* that is either NULL or points to a C string allocated with the av_mal...
Definition opt.h:275
@ SCALE_FORCE_OAR_DISABLE
Definition scale_eval.h:25
@ SCALE_FORCE_OAR_NB
Definition scale_eval.h:28
@ SCALE_FORCE_OAR_INCREASE
Definition scale_eval.h:27
@ SCALE_FORCE_OAR_DECREASE
Definition scale_eval.h:26
@ EVAL_MODE_INIT
Definition vf_fftfilt.c:41

Definition at line 968 of file vf_scale_npp.c.

◆ nppscale_class

const AVClass nppscale_class
static
Initial value:
= {
.class_name = "nppscale",
.item_name = av_default_item_name,
.option = options,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85
@ AV_CLASS_CATEGORY_FILTER
Definition log.h:36

Definition at line 995 of file vf_scale_npp.c.

◆ nppscale_inputs

const AVFilterPad nppscale_inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = nppscale_filter_frame,
}
}
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static int nppscale_filter_frame(AVFilterLink *link, AVFrame *in)

Definition at line 1003 of file vf_scale_npp.c.

◆ nppscale_outputs

const AVFilterPad nppscale_outputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = config_props,
}
}
static int config_props(AVBitStreamFilterLink *link)
Definition source.c:181

Definition at line 1011 of file vf_scale_npp.c.

◆ ff_vf_scale_npp

const FFFilter ff_vf_scale_npp
Initial value:
= {
.p.name = "scale_npp",
.p.description = NULL_IF_CONFIG_SMALL("NVIDIA Performance Primitives video "
"scaling and format conversion"),
.p.priv_class = &nppscale_class,
.init = nppscale_init,
.uninit = nppscale_uninit,
.priv_size = sizeof(NPPScaleContext),
.flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
}
static const AVFilterPad nppscale_inputs[]
static const AVFilterPad nppscale_outputs[]

Definition at line 1019 of file vf_scale_npp.c.

◆ nppscale2ref_inputs

const AVFilterPad nppscale2ref_inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = nppscale_filter_frame,
},
{
.name = "ref",
.filter_frame = nppscale_filter_frame_ref,
}
}
static int nppscale_filter_frame_ref(AVFilterLink *link, AVFrame *in)

Definition at line 1038 of file vf_scale_npp.c.

◆ nppscale2ref_outputs

const AVFilterPad nppscale2ref_outputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = config_props,
.request_frame= request_frame,
},
{
.name = "ref",
.config_props = config_props_ref,
.request_frame= request_frame_ref,
}
}
static int request_frame(AVFilterLink *outlink)
Definition af_aecho.c:272
static int request_frame_ref(AVFilterLink *outlink)
Definition vf_scale.c:738
static int config_props_ref(AVFilterLink *outlink)
Definition vf_scale.c:716

Definition at line 1051 of file vf_scale_npp.c.