FFmpeg
Loading...
Searching...
No Matches
vf_colorspace.c File Reference
#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/csp.h"
#include "libavutil/frame.h"
#include "libavutil/mem.h"
#include "libavutil/mem_internal.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/pixfmt.h"
#include "avfilter.h"
#include "colorspacedsp.h"
#include "filters.h"
#include "formats.h"
#include "video.h"
#include "colorspace.h"

Go to the source code of this file.

Data Structures

struct  TransferCharacteristics
 
struct  ColorSpaceContext
 
struct  ThreadData
 Used for passing data between threads. More...
 

Macros

#define supported_depth(d)
 
#define supported_subsampling(lcw, lch)
 
#define supported_format(d)
 
#define OFFSET(x)
 
#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
 
#define ENUM(x, y, z)
 

Enumerations

enum  DitherMode { DITHER_NONE , DITHER_FSB , DITHER_NB }
 
enum  Colorspace {
  CS_UNSPECIFIED , CS_BT470M , CS_BT470BG , CS_BT601_6_525 ,
  CS_BT601_6_625 , CS_BT709 , CS_SMPTE170M , CS_SMPTE240M ,
  CS_BT2020 , CS_NB
}
 
enum  WhitepointAdaptation {
  WP_ADAPT_BRADFORD , WP_ADAPT_VON_KRIES , NB_WP_ADAPT_NON_IDENTITY , WP_ADAPT_IDENTITY = NB_WP_ADAPT_NON_IDENTITY ,
  NB_WP_ADAPT
}
 
enum  ClipGamutMode { CLIP_GAMUT_NONE , CLIP_GAMUT_RGB , NB_CLIP_GAMUT }
 

Functions

static const struct TransferCharacteristics * get_transfer_characteristics (enum AVColorTransferCharacteristic trc)
 
static int fill_gamma_table (ColorSpaceContext *s)
 
static void fill_whitepoint_conv_table (double out[3][3], enum WhitepointAdaptation wp_adapt, const AVWhitepointCoefficients *wp_src, const AVWhitepointCoefficients *wp_dst)
 
static void apply_lut (int16_t *buf[3], ptrdiff_t stride, int w, int h, const int16_t *lut)
 
static int convert (AVFilterContext *ctx, void *data, int job_nr, int n_jobs)
 
static int get_range_off (AVFilterContext *ctx, int *off, int *y_rng, int *uv_rng, enum AVColorRange rng, int depth)
 
static int create_filtergraph (AVFilterContext *ctx, const AVFrame *in, const AVFrame *out)
 
static av_cold int init (AVFilterContext *ctx)
 
static void uninit (AVFilterContext *ctx)
 
static int filter_frame (AVFilterLink *link, AVFrame *in)
 
static int query_formats (const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
 
static int config_props (AVFilterLink *outlink)
 
 AVFILTER_DEFINE_CLASS (colorspace)
 

Variables

static enum AVColorTransferCharacteristic default_trc [CS_NB+1]
 
static enum AVColorPrimaries default_prm [CS_NB+1]
 
static enum AVColorSpace default_csp [CS_NB+1]
 
static const struct TransferCharacteristics transfer_characteristics []
 
static const AVOption colorspace_options []
 
static const AVFilterPad inputs []
 
static const AVFilterPad outputs []
 
const FFFilter ff_vf_colorspace
 

Macro Definition Documentation

◆ supported_depth

#define supported_depth ( d)
Value:
((d) == 8 || (d) == 10 || (d) == 12)

◆ supported_subsampling

#define supported_subsampling ( lcw,
lch )
Value:
(((lcw) == 0 && (lch) == 0) || ((lcw) == 1 && (lch) == 0) || ((lcw) == 1 && (lch) == 1))

◆ supported_format

#define supported_format ( d)
Value:
((d) != NULL && (d)->nb_components == 3 && \
!((d)->flags & AV_PIX_FMT_FLAG_RGB) && \
supported_depth((d)->comp[0].depth) && \
supported_subsampling((d)->log2_chroma_w, (d)->log2_chroma_h))
#define NULL
Definition coverity.c:32
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
Definition eamad.c:79
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
Definition pixdesc.h:136

Referenced by create_filtergraph().

◆ OFFSET

#define OFFSET ( x)
Value:

Definition at line 917 of file vf_colorspace.c.

◆ FLAGS

Definition at line 918 of file vf_colorspace.c.

◆ ENUM

#define ENUM ( x,
y,
z )
Value:
{ x, "", 0, AV_OPT_TYPE_CONST, { .i64 = y }, INT_MIN, INT_MAX, FLAGS, .unit = z }
#define FLAGS
Definition cmdutils.c:596
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition opt.h:298

Definition at line 919 of file vf_colorspace.c.

Enumeration Type Documentation

◆ DitherMode

enum DitherMode
Enumerator
DITHER_NONE 
DITHER_FSB 
DITHER_NB 

Definition at line 43 of file vf_colorspace.c.

◆ Colorspace

enum Colorspace
Enumerator
CS_UNSPECIFIED 
CS_BT470M 
CS_BT470BG 
CS_BT601_6_525 
CS_BT601_6_625 
CS_BT709 
CS_SMPTE170M 
CS_SMPTE240M 
CS_BT2020 
CS_NB 

Definition at line 49 of file vf_colorspace.c.

◆ WhitepointAdaptation

Enumerator
WP_ADAPT_BRADFORD 
WP_ADAPT_VON_KRIES 
NB_WP_ADAPT_NON_IDENTITY 
WP_ADAPT_IDENTITY 
NB_WP_ADAPT 

Definition at line 62 of file vf_colorspace.c.

◆ ClipGamutMode

Enumerator
CLIP_GAMUT_NONE 
CLIP_GAMUT_RGB 
NB_CLIP_GAMUT 

Definition at line 70 of file vf_colorspace.c.

Function Documentation

◆ get_transfer_characteristics()

static const struct TransferCharacteristics * get_transfer_characteristics ( enum AVColorTransferCharacteristic trc)
static

Definition at line 192 of file vf_colorspace.c.

Referenced by create_filtergraph().

◆ fill_gamma_table()

static int fill_gamma_table ( ColorSpaceContext * s)
static

Definition at line 205 of file vf_colorspace.c.

Referenced by create_filtergraph().

◆ fill_whitepoint_conv_table()

static void fill_whitepoint_conv_table ( double out[3][3],
enum WhitepointAdaptation wp_adapt,
const AVWhitepointCoefficients * wp_src,
const AVWhitepointCoefficients * wp_dst )
static

Definition at line 254 of file vf_colorspace.c.

Referenced by create_filtergraph().

◆ apply_lut()

static void apply_lut ( int16_t * buf[3],
ptrdiff_t stride,
int w,
int h,
const int16_t * lut )
static

Definition at line 292 of file vf_colorspace.c.

Referenced by convert().

◆ convert()

static int convert ( AVFilterContext * ctx,
void * data,
int job_nr,
int n_jobs )
static

Definition at line 315 of file vf_colorspace.c.

◆ get_range_off()

static int get_range_off ( AVFilterContext * ctx,
int * off,
int * y_rng,
int * uv_rng,
enum AVColorRange rng,
int depth )
static

Definition at line 385 of file vf_colorspace.c.

Referenced by create_filtergraph().

◆ create_filtergraph()

static int create_filtergraph ( AVFilterContext * ctx,
const AVFrame * in,
const AVFrame * out )
static

Definition at line 415 of file vf_colorspace.c.

Referenced by filter_frame().

◆ init()

static av_cold int init ( AVFilterContext * ctx)
static

Definition at line 684 of file vf_colorspace.c.

◆ uninit()

static void uninit ( AVFilterContext * ctx)
static

Definition at line 713 of file vf_colorspace.c.

Referenced by filter_frame().

◆ filter_frame()

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

Definition at line 731 of file vf_colorspace.c.

◆ query_formats()

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

Definition at line 856 of file vf_colorspace.c.

◆ config_props()

static int config_props ( AVFilterLink * outlink)
static

Definition at line 898 of file vf_colorspace.c.

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( colorspace )

Variable Documentation

◆ default_trc

enum AVColorTransferCharacteristic default_trc[CS_NB+1]
static
Initial value:
= {
}
@ CS_BT470BG
@ CS_BT2020
@ CS_BT470M
@ CS_SMPTE170M
@ CS_NB
@ CS_BT709
@ CS_BT601_6_525
@ CS_SMPTE240M
@ CS_UNSPECIFIED
@ CS_BT601_6_625
@ AVCOL_TRC_SMPTE170M
also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
Definition pixfmt.h:684
@ AVCOL_TRC_GAMMA22
also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
Definition pixfmt.h:682
@ AVCOL_TRC_SMPTE240M
Definition pixfmt.h:685
@ AVCOL_TRC_GAMMA28
also ITU-R BT470BG
Definition pixfmt.h:683
@ AVCOL_TRC_BT2020_10
ITU-R BT2020 for 10-bit system.
Definition pixfmt.h:692
@ AVCOL_TRC_UNSPECIFIED
Definition pixfmt.h:680
@ AVCOL_TRC_BT709
also ITU-R BT1361
Definition pixfmt.h:679

Definition at line 76 of file vf_colorspace.c.

Referenced by create_filtergraph(), and filter_frame().

◆ default_prm

enum AVColorPrimaries default_prm[CS_NB+1]
static
Initial value:
= {
}
@ AVCOL_PRI_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
Definition pixfmt.h:654
@ AVCOL_PRI_BT709
also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B
Definition pixfmt.h:649
@ AVCOL_PRI_SMPTE240M
identical to above, also called "SMPTE C" even though it uses D65
Definition pixfmt.h:656
@ AVCOL_PRI_UNSPECIFIED
Definition pixfmt.h:650
@ AVCOL_PRI_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
Definition pixfmt.h:655
@ AVCOL_PRI_BT2020
ITU-R BT2020.
Definition pixfmt.h:658
@ AVCOL_PRI_BT470M
also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
Definition pixfmt.h:652

Definition at line 89 of file vf_colorspace.c.

Referenced by create_filtergraph(), and filter_frame().

◆ default_csp

enum AVColorSpace default_csp[CS_NB+1]
static
Initial value:
= {
}
@ AVCOL_SPC_BT709
also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B
Definition pixfmt.h:713
@ AVCOL_SPC_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
Definition pixfmt.h:717
@ AVCOL_SPC_BT2020_NCL
ITU-R BT2020 non-constant luminance system.
Definition pixfmt.h:722
@ AVCOL_SPC_UNSPECIFIED
Definition pixfmt.h:714
@ AVCOL_SPC_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
Definition pixfmt.h:718
@ AVCOL_SPC_SMPTE240M
derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries
Definition pixfmt.h:719

Definition at line 102 of file vf_colorspace.c.

Referenced by create_filtergraph(), and init().

◆ transfer_characteristics

const struct TransferCharacteristics transfer_characteristics[]
static
Initial value:
= {
[AVCOL_TRC_BT709] = { 1.099, 0.018, 0.45, 4.5 },
[AVCOL_TRC_GAMMA22] = { 1.0, 0.0, 1.0 / 2.2, 0.0 },
[AVCOL_TRC_GAMMA28] = { 1.0, 0.0, 1.0 / 2.8, 0.0 },
[AVCOL_TRC_SMPTE170M] = { 1.099, 0.018, 0.45, 4.5 },
[AVCOL_TRC_SMPTE240M] = { 1.1115, 0.0228, 0.45, 4.0 },
[AVCOL_TRC_LINEAR] = { 1.0, 0.0, 1.0, 0.0 },
[AVCOL_TRC_IEC61966_2_1] = { 1.055, 0.0031308, 1.0 / 2.4, 12.92 },
[AVCOL_TRC_IEC61966_2_4] = { 1.099, 0.018, 0.45, 4.5 },
[AVCOL_TRC_BT2020_10] = { 1.099, 0.018, 0.45, 4.5 },
[AVCOL_TRC_BT2020_12] = { 1.0993, 0.0181, 0.45, 4.5 },
}
@ AVCOL_TRC_IEC61966_2_4
IEC 61966-2-4.
Definition pixfmt.h:689
@ AVCOL_TRC_LINEAR
"Linear transfer characteristics"
Definition pixfmt.h:686
@ AVCOL_TRC_BT2020_12
ITU-R BT2020 for 12-bit system.
Definition pixfmt.h:693
@ AVCOL_TRC_IEC61966_2_1
IEC 61966-2-1 (sRGB or sYCC)
Definition pixfmt.h:691

Definition at line 178 of file vf_colorspace.c.

Referenced by color_config(), frame_header(), get_transfer_characteristics(), h264_metadata_update_sps(), mpeg2_metadata_init(), parse_mpeg2_extension_descriptor(), sequence_display_extension(), vui_parameters(), vui_parameters(), vui_parameters(), vui_parameters_default(), and vui_parameters_default().

◆ colorspace_options

const AVOption colorspace_options[]
static

Definition at line 921 of file vf_colorspace.c.

◆ inputs

const AVFilterPad inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = filter_frame,
},
}
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
Definition dolby_e.c:1067
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200

Definition at line 1049 of file vf_colorspace.c.

◆ outputs

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

Definition at line 1057 of file vf_colorspace.c.

◆ ff_vf_colorspace

const FFFilter ff_vf_colorspace
Initial value:
= {
.p.name = "colorspace",
.p.description = NULL_IF_CONFIG_SMALL("Convert between colorspaces."),
.p.priv_class = &colorspace_class,
.init = init,
.uninit = uninit,
.priv_size = sizeof(ColorSpaceContext),
}
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
Definition aeval.c:246
static const AVFilterPad inputs[]
Definition af_aap.c:299
static const AVFilterPad outputs[]
Definition af_aap.c:310
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
Definition avfilter.h:202
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition avfilter.h:172
static av_cold void uninit(AVBitStreamFilterContext *ctx)
#define FILTER_INPUTS(array)
Definition filters.h:279
#define FILTER_OUTPUTS(array)
Definition filters.h:280
#define FILTER_QUERY_FUNC2(func)
Definition filters.h:256
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:97

Definition at line 1065 of file vf_colorspace.c.