FFmpeg
Loading...
Searching...
No Matches
vf_libplacebo.c File Reference
#include <math.h>
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/eval.h"
#include "libavutil/fifo.h"
#include "libavutil/file.h"
#include "libavutil/frame.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "formats.h"
#include "filters.h"
#include "video.h"
#include "vulkan_filter.h"
#include "scale_eval.h"
#include <libplacebo/options.h>
#include <libplacebo/renderer.h>
#include <libplacebo/utils/libav.h>
#include <libplacebo/utils/frame_queue.h>
#include <libplacebo/vulkan.h>

Go to the source code of this file.

Data Structures

struct  LibplaceboInput
 
struct  LibplaceboContext
 

Macros

#define OFFSET(x)
 
#define STATIC   (AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
 
#define DYNAMIC   (STATIC | AV_OPT_FLAG_RUNTIME_PARAM)
 

Enumerations

enum  {
  TONE_MAP_AUTO , TONE_MAP_CLIP , TONE_MAP_ST2094_40 , TONE_MAP_ST2094_10 ,
  TONE_MAP_BT2390 , TONE_MAP_BT2446A , TONE_MAP_SPLINE , TONE_MAP_REINHARD ,
  TONE_MAP_MOBIUS , TONE_MAP_HABLE , TONE_MAP_GAMMA , TONE_MAP_LINEAR ,
  TONE_MAP_COUNT
}
 
enum  {
  GAMUT_MAP_CLIP , GAMUT_MAP_PERCEPTUAL , GAMUT_MAP_RELATIVE , GAMUT_MAP_SATURATION ,
  GAMUT_MAP_ABSOLUTE , GAMUT_MAP_DESATURATE , GAMUT_MAP_DARKEN , GAMUT_MAP_HIGHLIGHT ,
  GAMUT_MAP_LINEAR , GAMUT_MAP_COUNT
}
 
enum  var_name {
  VAR_IN_IDX , VAR_IDX , VAR_IN_W , VAR_IW ,
  VAR_IN_H , VAR_IH , VAR_OUT_W , VAR_OW ,
  VAR_OUT_H , VAR_OH , VAR_CROP_W , VAR_CW ,
  VAR_CROP_H , VAR_CH , VAR_POS_W , VAR_PW ,
  VAR_POS_H , VAR_PH , VAR_A , VAR_SAR ,
  VAR_DAR , VAR_HSUB , VAR_VSUB , VAR_OHSUB ,
  VAR_OVSUB , VAR_IN_T , VAR_T , VAR_OUT_T ,
  VAR_OT , VAR_N , VAR_VARS_NB
}
 
enum  fit_mode {
  FIT_FILL , FIT_CONTAIN , FIT_COVER , FIT_NONE ,
  FIT_SCALE_DOWN , FIT_MODE_NB
}
 
enum  fit_sense { FIT_TARGET , FIT_CONSTRAINT , FIT_SENSE_NB }
 

Functions

static enum pl_log_level get_log_level (void)
 
static void pl_av_log (void *log_ctx, enum pl_log_level level, const char *msg)
 
static const struct pl_tone_map_function * get_tonemapping_func (int tm)
 
static void set_gamut_mode (struct pl_color_map_params *p, int gamut_mode)
 
static int find_scaler (AVFilterContext *avctx, const struct pl_filter_config **opt, const char *name, int frame_mixing)
 
static int parse_custom_lut (AVFilterContext *avctx)
 
static int update_settings (AVFilterContext *ctx)
 
static int parse_shader (AVFilterContext *avctx, const void *shader, size_t len)
 
static void libplacebo_uninit (AVFilterContext *avctx)
 
static int libplacebo_config_input (AVFilterLink *inlink)
 
static int init_vulkan (AVFilterContext *avctx, const AVVulkanDeviceContext *hwctx)
 
static int libplacebo_init (AVFilterContext *avctx)
 
static void lock_queue (void *priv, uint32_t qf, uint32_t qidx)
 
static void unlock_queue (void *priv, uint32_t qf, uint32_t qidx)
 
static int input_init (AVFilterContext *avctx, LibplaceboInput *input, int idx)
 
static void input_uninit (LibplaceboInput *input)
 
static int copy_pl_queue (const AVVulkanDeviceContext *hwctx, const AVVulkanDeviceQueueFamily *qf, struct pl_vulkan_queue *pl_qf)
 
static int libplacebo_process_command (AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
 
static const AVFrameref_frame (const struct pl_frame_mix *mix)
 
static double q2d_fallback (AVRational q, const double def)
 
static void update_crops (AVFilterContext *ctx, LibplaceboInput *in, struct pl_frame *target, double target_pts)
 
static int output_frame (AVFilterContext *ctx, int64_t pts)
 
static bool map_frame (pl_gpu gpu, pl_tex *tex, const struct pl_source_frame *src, struct pl_frame *out)
 
static void unmap_frame (pl_gpu gpu, struct pl_frame *frame, const struct pl_source_frame *src)
 
static void discard_frame (const struct pl_source_frame *src)
 
static int handle_input (AVFilterContext *ctx, LibplaceboInput *input)
 
static void drain_input_pts (LibplaceboInput *in, int64_t until)
 
static int libplacebo_activate (AVFilterContext *ctx)
 
static int libplacebo_query_format (const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
 
static AVRational max_q (AVRational a, AVRational b)
 
static int libplacebo_config_output (AVFilterLink *outlink)
 
 AVFILTER_DEFINE_CLASS (libplacebo)
 

Variables

static const char *const var_names []
 
static const AVOption libplacebo_options []
 
static const AVFilterPad libplacebo_outputs []
 
const FFFilter ff_vf_libplacebo
 

Macro Definition Documentation

◆ OFFSET

#define OFFSET ( x)
Value:

Definition at line 1561 of file vf_libplacebo.c.

◆ STATIC

Definition at line 1562 of file vf_libplacebo.c.

◆ DYNAMIC

#define DYNAMIC   (STATIC | AV_OPT_FLAG_RUNTIME_PARAM)

Definition at line 1563 of file vf_libplacebo.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
TONE_MAP_AUTO 
TONE_MAP_CLIP 
TONE_MAP_ST2094_40 
TONE_MAP_ST2094_10 
TONE_MAP_BT2390 
TONE_MAP_BT2446A 
TONE_MAP_SPLINE 
TONE_MAP_REINHARD 
TONE_MAP_MOBIUS 
TONE_MAP_HABLE 
TONE_MAP_GAMMA 
TONE_MAP_LINEAR 
TONE_MAP_COUNT 

Definition at line 42 of file vf_libplacebo.c.

◆ anonymous enum

anonymous enum
Enumerator
GAMUT_MAP_CLIP 
GAMUT_MAP_PERCEPTUAL 
GAMUT_MAP_RELATIVE 
GAMUT_MAP_SATURATION 
GAMUT_MAP_ABSOLUTE 
GAMUT_MAP_DESATURATE 
GAMUT_MAP_DARKEN 
GAMUT_MAP_HIGHLIGHT 
GAMUT_MAP_LINEAR 
GAMUT_MAP_COUNT 

Definition at line 58 of file vf_libplacebo.c.

◆ var_name

enum var_name
Enumerator
VAR_IN_IDX 
VAR_IDX 
VAR_IN_W 
VAR_IW 
VAR_IN_H 
VAR_IH 
VAR_OUT_W 
VAR_OW 
VAR_OUT_H 
VAR_OH 
VAR_CROP_W 
VAR_CW 
VAR_CROP_H 
VAR_CH 
VAR_POS_W 
VAR_PW 
VAR_POS_H 
VAR_PH 
VAR_A 
VAR_SAR 
VAR_DAR 
VAR_HSUB 
VAR_VSUB 
VAR_OHSUB 
VAR_OVSUB 
VAR_IN_T 
VAR_T 
VAR_OUT_T 
VAR_OT 
VAR_N 
VAR_VARS_NB 

Definition at line 94 of file vf_libplacebo.c.

◆ fit_mode

enum fit_mode
Enumerator
FIT_FILL 
FIT_CONTAIN 
FIT_COVER 
FIT_NONE 
FIT_SCALE_DOWN 
FIT_MODE_NB 

Definition at line 129 of file vf_libplacebo.c.

◆ fit_sense

enum fit_sense
Enumerator
FIT_TARGET 
FIT_CONSTRAINT 
FIT_SENSE_NB 

Definition at line 138 of file vf_libplacebo.c.

Function Documentation

◆ get_log_level()

static enum pl_log_level get_log_level ( void )
inlinestatic

Definition at line 274 of file vf_libplacebo.c.

Referenced by lcevc_init(), and libplacebo_init().

◆ pl_av_log()

static void pl_av_log ( void * log_ctx,
enum pl_log_level level,
const char * msg )
static

Definition at line 286 of file vf_libplacebo.c.

Referenced by libplacebo_init().

◆ get_tonemapping_func()

static const struct pl_tone_map_function * get_tonemapping_func ( int tm)
static

Definition at line 303 of file vf_libplacebo.c.

Referenced by update_settings().

◆ set_gamut_mode()

static void set_gamut_mode ( struct pl_color_map_params * p,
int gamut_mode )
static

Definition at line 321 of file vf_libplacebo.c.

Referenced by update_settings().

◆ find_scaler()

static int find_scaler ( AVFilterContext * avctx,
const struct pl_filter_config ** opt,
const char * name,
int frame_mixing )
static

Definition at line 338 of file vf_libplacebo.c.

Referenced by update_settings().

◆ parse_custom_lut()

static int parse_custom_lut ( AVFilterContext * avctx)
static

Definition at line 363 of file vf_libplacebo.c.

Referenced by init_vulkan().

◆ update_settings()

static int update_settings ( AVFilterContext * ctx)
static

Definition at line 384 of file vf_libplacebo.c.

Referenced by libplacebo_init(), libplacebo_process_command(), and parse_shader().

◆ parse_shader()

static int parse_shader ( AVFilterContext * avctx,
const void * shader,
size_t len )
static

Definition at line 494 of file vf_libplacebo.c.

Referenced by init_vulkan().

◆ libplacebo_uninit()

static void libplacebo_uninit ( AVFilterContext * avctx)
static

Definition at line 755 of file vf_libplacebo.c.

Referenced by libplacebo_init().

◆ libplacebo_config_input()

static int libplacebo_config_input ( AVFilterLink * inlink)
static

Definition at line 1379 of file vf_libplacebo.c.

Referenced by libplacebo_init().

◆ init_vulkan()

static int init_vulkan ( AVFilterContext * avctx,
const AVVulkanDeviceContext * hwctx )
static

Definition at line 673 of file vf_libplacebo.c.

Referenced by libplacebo_config_input(), and libplacebo_init().

◆ libplacebo_init()

static int libplacebo_init ( AVFilterContext * avctx)
static

Definition at line 513 of file vf_libplacebo.c.

◆ lock_queue()

static void lock_queue ( void * priv,
uint32_t qf,
uint32_t qidx )
static

Definition at line 615 of file vf_libplacebo.c.

Referenced by init_vulkan(), and vulkan_device_init().

◆ unlock_queue()

static void unlock_queue ( void * priv,
uint32_t qf,
uint32_t qidx )
static

Definition at line 626 of file vf_libplacebo.c.

Referenced by init_vulkan(), and vulkan_device_init().

◆ input_init()

static int input_init ( AVFilterContext * avctx,
LibplaceboInput * input,
int idx )
static

Definition at line 637 of file vf_libplacebo.c.

Referenced by init_vulkan().

◆ input_uninit()

static void input_uninit ( LibplaceboInput * input)
static

Definition at line 651 of file vf_libplacebo.c.

Referenced by libplacebo_uninit().

◆ copy_pl_queue()

static int copy_pl_queue ( const AVVulkanDeviceContext * hwctx,
const AVVulkanDeviceQueueFamily * qf,
struct pl_vulkan_queue * pl_qf )
static

Definition at line 658 of file vf_libplacebo.c.

Referenced by init_vulkan().

◆ libplacebo_process_command()

static int libplacebo_process_command ( AVFilterContext * ctx,
const char * cmd,
const char * arg,
char * res,
int res_len,
int flags )
static

Definition at line 789 of file vf_libplacebo.c.

◆ ref_frame()

static const AVFrame * ref_frame ( const struct pl_frame_mix * mix)
static

Definition at line 802 of file vf_libplacebo.c.

Referenced by output_frame(), and update_crops().

◆ q2d_fallback()

static double q2d_fallback ( AVRational q,
const double def )
inlinestatic

Definition at line 811 of file vf_libplacebo.c.

Referenced by libplacebo_activate(), libplacebo_config_output(), and update_crops().

◆ update_crops()

static void update_crops ( AVFilterContext * ctx,
LibplaceboInput * in,
struct pl_frame * target,
double target_pts )
static

Definition at line 816 of file vf_libplacebo.c.

Referenced by output_frame().

◆ output_frame()

static int output_frame ( AVFilterContext * ctx,
int64_t pts )
static

Definition at line 917 of file vf_libplacebo.c.

Referenced by libplacebo_activate().

◆ map_frame()

static bool map_frame ( pl_gpu gpu,
pl_tex * tex,
const struct pl_source_frame * src,
struct pl_frame * out )
static

Definition at line 1095 of file vf_libplacebo.c.

Referenced by handle_input().

◆ unmap_frame()

static void unmap_frame ( pl_gpu gpu,
struct pl_frame * frame,
const struct pl_source_frame * src )
static

Definition at line 1117 of file vf_libplacebo.c.

Referenced by handle_input().

◆ discard_frame()

static void discard_frame ( const struct pl_source_frame * src)
static

Definition at line 1123 of file vf_libplacebo.c.

Referenced by handle_input().

◆ handle_input()

static int handle_input ( AVFilterContext * ctx,
LibplaceboInput * input )
static

Definition at line 1129 of file vf_libplacebo.c.

Referenced by libplacebo_activate().

◆ drain_input_pts()

static void drain_input_pts ( LibplaceboInput * in,
int64_t until )
static

Definition at line 1180 of file vf_libplacebo.c.

Referenced by libplacebo_activate().

◆ libplacebo_activate()

static int libplacebo_activate ( AVFilterContext * ctx)
static

Definition at line 1187 of file vf_libplacebo.c.

◆ libplacebo_query_format()

static int libplacebo_query_format ( const AVFilterContext * ctx,
AVFilterFormatsConfig ** cfg_in,
AVFilterFormatsConfig ** cfg_out )
static

Definition at line 1286 of file vf_libplacebo.c.

◆ max_q()

static AVRational max_q ( AVRational a,
AVRational b )
inlinestatic

Definition at line 1423 of file vf_libplacebo.c.

Referenced by libplacebo_config_output().

◆ libplacebo_config_output()

static int libplacebo_config_output ( AVFilterLink * outlink)
static

Definition at line 1428 of file vf_libplacebo.c.

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( libplacebo )

Variable Documentation

◆ var_names

const char* const var_names[]
static
Initial value:
= {
"in_idx", "idx",
"in_w", "iw",
"in_h", "ih",
"out_w", "ow",
"out_h", "oh",
"crop_w", "cw",
"crop_h", "ch",
"pos_w", "pw",
"pos_h", "ph",
"a",
"sar",
"dar",
"hsub",
"vsub",
"ohsub",
"ovsub",
"in_t", "t",
"out_t", "ot",
"n",
}
#define NULL
Definition coverity.c:32

Definition at line 71 of file vf_libplacebo.c.

◆ libplacebo_options

const AVOption libplacebo_options[]
static

Definition at line 1565 of file vf_libplacebo.c.

◆ libplacebo_outputs

const AVFilterPad libplacebo_outputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = &libplacebo_config_output,
},
}
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static int libplacebo_config_output(AVFilterLink *outlink)

Definition at line 1792 of file vf_libplacebo.c.

◆ ff_vf_libplacebo

const FFFilter ff_vf_libplacebo
Initial value:
= {
.p.name = "libplacebo",
.p.description = NULL_IF_CONFIG_SMALL("Apply various GPU filters from libplacebo"),
.p.priv_class = &libplacebo_class,
.priv_size = sizeof(LibplaceboContext),
.flags_internal = FF_FILTER_FLAG_HWFRAME_AWARE,
}
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AVFILTER_FLAG_HWDEVICE
The filter can create hardware frames using AVFilterContext.hw_device_ctx.
Definition avfilter.h:187
#define AVFILTER_FLAG_DYNAMIC_INPUTS
The number of the filter inputs is not determined just by AVFilter.inputs.
Definition avfilter.h:155
static av_cold void uninit(AVBitStreamFilterContext *ctx)
static int activate(AVBitStreamFilterContext *ctx)
#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_QUERY_FUNC2(func)
Definition filters.h:241
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static const AVFilterPad libplacebo_outputs[]
static void libplacebo_uninit(AVFilterContext *avctx)
static int libplacebo_process_command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
static int libplacebo_init(AVFilterContext *avctx)
static int libplacebo_query_format(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
static int libplacebo_activate(AVFilterContext *ctx)

Definition at line 1800 of file vf_libplacebo.c.