140 int *dither_scratch[3][2], *dither_scratch_base[3][2];
160 double yuv2rgb_dbl_coeffs[3][3], rgb2yuv_dbl_coeffs[3][3];
197 coeffs = &transfer_characteristics[trc];
205 [
WP_D65] = { 0.3127, 0.3290 },
206 [
WP_C] = { 0.3100, 0.3160 },
207 [
WP_DCI] = { 0.3140, 0.3510 },
208 [
WP_E] = { 1/3.0f, 1/3.0f },
231 p = &color_primaries[prm];
243 double in_ialpha = 1.0 / in_alpha, in_igamma = 1.0 / in_gamma, in_idelta = 1.0 / in_delta;
251 for (n = 0; n < 32768; n++) {
252 double v = (n - 2048.0) / 28672.0, d, l;
255 if (v <= -out_beta) {
256 d = -out_alpha * pow(-v, out_gamma) + (out_alpha - 1.0);
257 }
else if (v < out_beta) {
260 d = out_alpha * pow(v, out_gamma) - (out_alpha - 1.0);
265 if (v <= -in_beta * in_delta) {
266 l = -pow((1.0 - in_alpha - v) * in_ialpha, in_igamma);
267 }
else if (v < in_beta * in_delta) {
270 l = pow((v + in_alpha - 1.0) * in_ialpha, in_igamma);
287 { 0.8951, 0.2664, -0.1614 },
288 { -0.7502, 1.7135, 0.0367 },
289 { 0.0389, -0.0685, 1.0296 },
291 { 0.40024, 0.70760, -0.08081 },
292 { -0.22630, 1.16532, 0.04570 },
293 { 0.00000, 0.00000, 0.91822 },
296 const double (*
ma)[3] = ma_tbl[wp_adapt];
298 double zw_src = 1.0 - wp_src->
xw - wp_src->
yw;
300 double zw_dst = 1.0 - wp_dst->
xw - wp_dst->
yw;
301 double mai[3][3], fac[3][3],
tmp[3][3];
302 double rs, gs, bs, rd, gd, bd;
305 rs =
ma[0][0] * wp_src->
xw +
ma[0][1] * wp_src->
yw +
ma[0][2] * zw_src;
306 gs =
ma[1][0] * wp_src->
xw +
ma[1][1] * wp_src->
yw +
ma[1][2] * zw_src;
307 bs =
ma[2][0] * wp_src->
xw +
ma[2][1] * wp_src->
yw +
ma[2][2] * zw_src;
308 rd =
ma[0][0] * wp_dst->
xw +
ma[0][1] * wp_dst->
yw +
ma[0][2] * zw_dst;
309 gd =
ma[1][0] * wp_dst->
xw +
ma[1][1] * wp_dst->
yw +
ma[1][2] * zw_dst;
310 bd =
ma[2][0] * wp_dst->
xw +
ma[2][1] * wp_dst->
yw +
ma[2][2] * zw_dst;
314 fac[0][1] = fac[0][2] = fac[1][0] = fac[1][2] = fac[2][0] = fac[2][1] = 0.0;
320 int w,
int h,
const int16_t *lut)
324 for (n = 0; n < 3; n++) {
325 int16_t *
data = buf[n];
327 for (y = 0; y <
h; y++) {
328 for (x = 0; x <
w; x++)
338 ptrdiff_t in_linesize[3], out_linesize[3];
346 uint8_t *in_data[3], *out_data[3];
348 int h_in = (td->
in->
height + 1) >> 1;
349 int h1 = 2 * (job_nr * h_in / n_jobs), h2 = 2 * ((job_nr + 1) * h_in / n_jobs);
413 int *y_rng,
int *uv_rng,
427 *off = 16 << (depth - 8);
428 *y_rng = 219 << (depth - 8);
429 *uv_rng = 224 << (depth - 8);
433 *y_rng = *uv_rng = (256 << (depth - 8)) - 1;
448 int emms = 0, m, n, o, res, fmt_identical, redo_yuv2rgb = 0, redo_rgb2yuv = 0;
450 #define supported_depth(d) ((d) == 8 || (d) == 10 || (d) == 12) 451 #define supported_subsampling(lcw, lch) \ 452 (((lcw) == 0 && (lch) == 0) || ((lcw) == 1 && (lch) == 0) || ((lcw) == 1 && (lch) == 1)) 453 #define supported_format(d) \ 454 ((d) != NULL && (d)->nb_components == 3 && \ 455 !((d)->flags & AV_PIX_FMT_FLAG_RGB) && \ 456 supported_depth((d)->comp[0].depth) && \ 457 supported_subsampling((d)->log2_chroma_w, (d)->log2_chroma_h)) 461 "Unsupported input format %d (%s) or bitdepth (%d)\n",
468 "Unsupported output format %d (%s) or bitdepth (%d)\n",
470 out_desc ? out_desc->
comp[0].
depth : -1);
492 "Unsupported input primaries %d (%s)\n",
504 "Unsupported output color property %d\n", s->user_all);
508 "Unsupported output primaries %d (%s)\n",
516 double rgb2xyz[3][3], xyz2rgb[3][3], rgb2rgb[3][3];
526 double wpconv[3][3],
tmp[3][3];
535 for (m = 0; m < 3; m++)
536 for (n = 0; n < 3; n++) {
538 for (o = 1; o < 8; o++)
556 "Unsupported input transfer characteristics %d (%s)\n",
570 "Please specify output transfer characteristics\n");
573 "Unsupported output color property %d\n", s->user_all);
577 "Unsupported output transfer characteristics %d (%s)\n",
605 "Unsupported input colorspace %d (%s)\n",
620 "Please specify output transfer characteristics\n");
623 "Unsupported output color property %d\n", s->user_all);
627 "Unsupported output transfer characteristics %d (%s)\n",
645 int off,
bits, in_rng;
651 "Unsupported input color range %d (%s)\n",
655 for (n = 0; n < 8; n++)
659 bits = 1 << (in_desc->
comp[0].
depth - 1);
660 for (n = 0; n < 3; n++) {
661 for (in_rng = s->
in_y_rng, m = 0; m < 3; m++, in_rng = s->in_uv_rng) {
663 for (o = 1; o < 8; o++)
678 int off, out_rng,
bits;
684 "Unsupported output color range %d (%s)\n",
688 for (n = 0; n < 8; n++)
691 bits = 1 << (29 - out_desc->
comp[0].
depth);
692 for (out_rng = s->
out_y_rng, n = 0; n < 3; n++, out_rng = s->out_uv_rng) {
693 for (m = 0; m < 3; m++) {
695 for (o = 1; o < 8; o++)
715 for (out_rng = s->
out_y_rng, m = 0; m < 3; m++, out_rng = s->out_uv_rng) {
716 for (in_rng = s->
in_y_rng, n = 0; n < 3; n++, in_rng = s->in_uv_rng) {
718 lrint(16384 * yuv2yuv[m][n] * out_rng * (1 << idepth) /
719 (in_rng * (1 << odepth)));
720 for (o = 1; o < 8; o++)
774 ptrdiff_t rgb_stride =
FFALIGN(in->
width *
sizeof(int16_t), 32);
775 unsigned rgb_sz = rgb_stride * in->
height;
804 if (rgb_sz != s->
rgb_sz) {
840 if (!s->
rgb[0] || !s->
rgb[1] || !s->
rgb[2] ||
917 if (inlink->
w % 2 || inlink->
h % 2) {
919 inlink->
w, inlink->
h);
923 outlink->
w = inlink->
w;
924 outlink->
h = inlink->
h;
931 #define OFFSET(x) offsetof(ColorSpaceContext, x) 932 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM 933 #define ENUM(x, y, z) { x, "", 0, AV_OPT_TYPE_CONST, { .i64 = y }, INT_MIN, INT_MAX, FLAGS, z } 936 {
"all",
"Set all color properties together",
948 {
"space",
"Output colorspace",
961 {
"range",
"Output color range",
969 {
"primaries",
"Output color primaries",
985 {
"trc",
"Output transfer characteristics",
1003 {
"format",
"Output pixel format",
1016 {
"fast",
"Ignore primary chromaticity and gamma correction",
1020 {
"dither",
"Dithering mode",
1026 {
"wpadapt",
"Whitepoint adaptation method",
1033 {
"iall",
"Set all input color properties together",
1036 {
"ispace",
"Input colorspace",
1039 {
"irange",
"Input color range",
1042 {
"iprimaries",
"Input color primaries",
1045 {
"itrc",
"Input transfer characteristics",
1073 .
name =
"colorspace",
1079 .priv_class = &colorspace_class,
ITU-R BT2020 for 12-bit system.
also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
EBU Tech. 3213-E / JEDEC P22 phosphors.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
This structure describes decoded (raw) audio or video data.
static enum AVColorPrimaries default_prm[CS_NB+1]
ptrdiff_t const GLvoid * data
"Linear transfer characteristics"
double yuv2rgb_dbl_coeffs[3][3]
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
#define AV_LOG_WARNING
Something somehow does not look correct.
int * dither_scratch[3][2]
Main libavfilter public API header.
enum AVColorTransferCharacteristic in_trc out_trc user_trc user_itrc
static const AVOption colorspace_options[]
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 ...
int h
agreed upon image height
static void yuv2rgb(uint8_t *out, int ridx, int Y, int U, int V)
SMPTE ST 432-1 (2010) / P3 D65 / Display P3.
int16_t yuv2rgb_coeffs[3][3][8]
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
static int get_range_off(AVFilterContext *ctx, int *off, int *y_rng, int *uv_rng, enum AVColorRange rng, int depth)
SMPTE ST 431-2 (2011) / DCI P3.
#define AV_PIX_FMT_YUV420P12
static void fn() yuv2yuv(uint8_t *_dst[3], const ptrdiff_t dst_stride[3], uint8_t *_src[3], const ptrdiff_t src_stride[3], int w, int h, const int16_t c[3][3][8], const int16_t yuv_offset[2][8])
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
AVFilterFormatsConfig outcfg
Lists of supported formats / etc.
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
AVColorTransferCharacteristic
Color Transfer Characteristic.
functionally identical to above
const char * av_color_space_name(enum AVColorSpace space)
static const struct ColorPrimaries * get_color_primaries(enum AVColorPrimaries prm)
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
const char * name
Pad name.
AVFilterLink ** inputs
array of pointers to input links
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
void(* multiply3x3)(int16_t *data[3], ptrdiff_t stride, int w, int h, const int16_t m[3][3][8])
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
AVColorSpace
YUV colorspace type.
static av_cold int init(AVFilterContext *ctx)
const char * av_color_range_name(enum AVColorRange range)
AVFilter ff_vf_colorspace
enum Colorspace user_all user_iall
Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16.
also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
static void uninit(AVFilterContext *ctx)
const struct ColorPrimaries * out_primaries
#define DECLARE_ALIGNED(n, t, v)
Declare a variable that is aligned in memory.
ptrdiff_t out_linesize[3]
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
AVColorRange
Visual content value range.
const struct LumaCoefficients * ff_get_luma_coefficients(enum AVColorSpace csp)
#define AV_PIX_FMT_YUV422P12
const struct ColorPrimaries * in_primaries
AVColorPrimaries
Chromaticity coordinates of the source primaries.
int lrgb2lrgb_passthrough
A filter pad used for either input or output.
enum AVColorSpace in_csp out_csp user_csp user_icsp
A link between two filters.
also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
double rgb2yuv_dbl_coeffs[3][3]
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
void(* yuv2yuv_fn)(uint8_t *yuv_out[3], const ptrdiff_t yuv_out_stride[3], uint8_t *yuv_in[3], const ptrdiff_t yuv_in_stride[3], int w, int h, const int16_t yuv2yuv_coeffs[3][3][8], const int16_t yuv_offset[2][8])
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
const struct LumaCoefficients * out_lumacoef
static const uint8_t dither[8][8]
void * priv
private data for use by the filter
enum AVColorRange color_range
MPEG vs JPEG YUV range.
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
enum AVColorSpace colorspace
YUV colorspace type.
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
simple assert() macros that are a bit more flexible than ISO C assert().
SMPTE ST 428-1 (CIE 1931 XYZ)
#define AV_PIX_FMT_YUV444P10
static int create_filtergraph(AVFilterContext *ctx, const AVFrame *in, const AVFrame *out)
int av_frame_copy(AVFrame *dst, const AVFrame *src)
Copy the frame data from src to dst.
static const AVFilterPad inputs[]
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
#define supported_format(d)
static void apply_lut(int16_t *buf[3], ptrdiff_t stride, int w, int h, const int16_t *lut)
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
struct PrimaryCoefficients coeff
int w
agreed upon image width
static const struct TransferCharacteristics transfer_characteristics[AVCOL_TRC_NB]
int ff_filter_get_nb_threads(AVFilterContext *ctx)
Get number of threads for current filter instance.
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
colour filters using Illuminant C
static enum AVColorSpace default_csp[CS_NB+1]
ITU-R BT2020 non-constant luminance system.
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
static const struct ColorPrimaries color_primaries[AVCOL_PRI_NB]
static const AVFilterPad outputs[]
int16_t lrgb2lrgb_coeffs[3][3][8]
AVFilterContext * src
source filter
FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
planar GBR 4:4:4:4 48bpp, little-endian
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
enum AVColorPrimaries in_prm out_prm user_prm user_iprm
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames...
static void fill_whitepoint_conv_table(double out[3][3], enum WhitepointAdaptation wp_adapt, enum Whitepoint src, enum Whitepoint dst)
void ff_fill_rgb2yuv_table(const struct LumaCoefficients *coeffs, double rgb2yuv[3][3])
also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
static int query_formats(AVFilterContext *ctx)
int16_t yuv2yuv_coeffs[3][3][8]
functionally identical to above
Used for passing data between threads.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static const int16_t alpha[]
rgb2yuv_fsb_fn rgb2yuv_fsb
yuv2yuv_fn yuv2yuv[NB_BPP][NB_BPP][NB_SS]
static int fill_gamma_table(ColorSpaceContext *s)
rgb2yuv_fn rgb2yuv[NB_BPP][NB_SS]
int * dither_scratch_base[3][2]
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
#define AV_PIX_FMT_YUV420P10
Describe the class of an AVClass context structure.
yuv2rgb_fn yuv2rgb[NB_BPP][NB_SS]
const struct LumaCoefficients * in_lumacoef
void ff_matrix_invert_3x3(const double in[3][3], double out[3][3])
const char * name
Filter name.
void(* rgb2yuv_fsb_fn)(uint8_t *yuv[3], const ptrdiff_t yuv_stride[3], int16_t *rgb[3], ptrdiff_t rgb_stride, int w, int h, const int16_t rgb2yuv_coeffs[3][3][8], const int16_t yuv_offset[8], int *rnd[3][2])
AVRational sample_aspect_ratio
agreed upon sample aspect ratio
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a link
static enum AVColorTransferCharacteristic default_trc[CS_NB+1]
AVFilterLink ** outputs
array of pointers to output links
static enum AVPixelFormat pix_fmts[]
#define flags(name, subs,...)
AVFilterInternal * internal
An opaque struct for libavfilter internal use.
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_YUV444P12
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
The exact code depends on how similar the blocks are and how related they are to the and needs to apply these operations to the correct inlink or outlink if there are several Macros are available to factor that when no extra processing is inlink
Narrow or limited range content.
void(* rgb2yuv_fn)(uint8_t *yuv[3], const ptrdiff_t yuv_stride[3], int16_t *rgb[3], ptrdiff_t rgb_stride, int w, int h, const int16_t rgb2yuv_coeffs[3][3][8], const int16_t yuv_offset[8])
GLint GLenum GLboolean GLsizei stride
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
IEC 61966-2-1 (sRGB or sYCC)
enum WhitepointAdaptation wp_adapt
enum AVColorRange in_rng out_rng user_rng user_irng
void ff_colorspacedsp_init(ColorSpaceDSPContext *dsp)
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
void(* yuv2rgb_fn)(int16_t *rgb[3], ptrdiff_t rgb_stride, uint8_t *yuv[3], const ptrdiff_t yuv_stride[3], int w, int h, const int16_t yuv2rgb_coeffs[3][3][8], const int16_t yuv_offset[8])
enum AVPixelFormat in_format user_format
static int convert(AVFilterContext *ctx, void *data, int job_nr, int n_jobs)
AVFilterFormatsConfig incfg
Lists of supported formats / etc.
avfilter_execute_func * execute
static const struct TransferCharacteristics * get_transfer_characteristics(enum AVColorTransferCharacteristic trc)
int16_t rgb2yuv_coeffs[3][3][8]
void ff_matrix_mul_3x3(double dst[3][3], const double src1[3][3], const double src2[3][3])
AVFilterContext * dst
dest filter
const struct TransferCharacteristics * in_txchr
const struct TransferCharacteristics * out_txchr
enum AVColorPrimaries color_primaries
AVFILTER_DEFINE_CLASS(colorspace)
ITU-R BT2020 for 10-bit system.
static const struct WhitepointCoefficients whitepoint_coefficients[WP_NB]
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
enum AVColorTransferCharacteristic color_trc
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
int depth
Number of bits in the component.
static int filter_frame(AVFilterLink *link, AVFrame *in)
static int config_props(AVFilterLink *outlink)
AVPixelFormat
Pixel format.
rgb2yuv_fsb_fn rgb2yuv_fsb[NB_BPP][NB_SS]
int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
Copy only "metadata" fields from src to dst.
void ff_fill_rgb2xyz_table(const struct PrimaryCoefficients *coeffs, const struct WhitepointCoefficients *wp, double rgb2xyz[3][3])