FFmpeg
Loading...
Searching...
No Matches
vf_idet.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 Michael Niedermayer <michaelni@gmx.at>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#include <float.h> /* FLT_MAX */
22
23#include "libavutil/common.h"
24#include "libavutil/opt.h"
25#include "libavutil/pixdesc.h"
26
27#include "filters.h"
28#include "vf_idetdsp.h"
29
36
42
76
77#define OFFSET(x) offsetof(IDETContext, x)
78#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
79
80static const AVOption idet_options[] = {
81 { "intl_thres", "set interlacing threshold", OFFSET(interlace_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 1.04}, -1, FLT_MAX, FLAGS },
82 { "prog_thres", "set progressive threshold", OFFSET(progressive_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 1.5}, -1, FLT_MAX, FLAGS },
83 { "rep_thres", "set repeat threshold", OFFSET(repeat_threshold), AV_OPT_TYPE_FLOAT, {.dbl = 3.0}, -1, FLT_MAX, FLAGS },
84 { "half_life", "half life of cumulative statistics", OFFSET(half_life), AV_OPT_TYPE_FLOAT, {.dbl = 0.0}, -1, INT_MAX, FLAGS },
85 { "analyze_interlaced_flag", "set number of frames to use to determine if the interlace flag is accurate", OFFSET(analyze_interlaced_flag), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, FLAGS },
86 { NULL }
87};
88
90
91static const char *type2str(Type type)
92{
93 switch(type) {
94 case TFF : return "tff";
95 case BFF : return "bff";
96 case PROGRESSIVE : return "progressive";
97 case UNDETERMINED : return "undetermined";
98 }
99 return NULL;
100}
101
102#define PRECISION 1048576
103
104static uint64_t uintpow(uint64_t b,unsigned int e)
105{
106 uint64_t r=1;
107 while(e--) r*=b;
108 return r;
109}
110
111static int av_dict_set_fxp(AVDictionary **pm, const char *key, uint64_t value, unsigned int digits,
112 int flags)
113{
114 char valuestr[44];
115 uint64_t print_precision = uintpow(10, digits);
116
117 value = av_rescale(value, print_precision, PRECISION);
118
119 snprintf(valuestr, sizeof(valuestr), "%"PRId64".%0*"PRId64,
120 value / print_precision, digits, value % print_precision);
121
122 return av_dict_set(pm, key, valuestr, flags);
123}
124
125static const char *rep2str(RepeatedField repeated_field)
126{
127 switch(repeated_field) {
128 case REPEAT_NONE : return "neither";
129 case REPEAT_TOP : return "top";
130 case REPEAT_BOTTOM : return "bottom";
131 }
132 return NULL;
133}
134
136{
137 IDETContext *idet = ctx->priv;
138 int y, i;
139 int64_t alpha[2]={0};
140 int64_t delta=0;
141 int64_t gamma[2]={0};
142 Type type, best_type;
143 RepeatedField repeat;
144 int match = 0;
145 AVDictionary **metadata = &idet->cur->metadata;
146 ff_idet_filter_func filter_line = idet->dsp.filter_line;
147
148 for (i = 0; i < idet->csp->nb_components; i++) {
149 int w = idet->cur->width;
150 int h = idet->cur->height;
151 int refs = idet->cur->linesize[i];
152
153 if (i && i<3) {
156 }
157
158 for (y = 2; y < h - 2; y++) {
159 uint8_t *prev = &idet->prev->data[i][y*refs];
160 uint8_t *cur = &idet->cur ->data[i][y*refs];
161 uint8_t *next = &idet->next->data[i][y*refs];
162 alpha[ y &1] += filter_line(cur-refs, prev, cur+refs, w);
163 alpha[(y^1)&1] += filter_line(cur-refs, next, cur+refs, w);
164 delta += filter_line(cur-refs, cur, cur+refs, w);
165 gamma[(y^1)&1] += filter_line(cur , prev, cur , w);
166 }
167 }
168
169 if (alpha[0] > idet->interlace_threshold * alpha[1]){
170 type = TFF;
171 }else if(alpha[1] > idet->interlace_threshold * alpha[0]){
172 type = BFF;
173 }else if(alpha[1] > idet->progressive_threshold * delta){
175 }else{
177 }
178
179 if ( gamma[0] > idet->repeat_threshold * gamma[1] ){
180 repeat = REPEAT_TOP;
181 } else if ( gamma[1] > idet->repeat_threshold * gamma[0] ){
182 repeat = REPEAT_BOTTOM;
183 } else {
184 repeat = REPEAT_NONE;
185 }
186
187 memmove(idet->history+1, idet->history, HIST_SIZE-1);
188 idet->history[0] = type;
189 best_type = UNDETERMINED;
190 for(i=0; i<HIST_SIZE; i++){
191 if(idet->history[i] != UNDETERMINED){
192 if(best_type == UNDETERMINED)
193 best_type = idet->history[i];
194
195 if(idet->history[i] == best_type) {
196 match++;
197 }else{
198 match=0;
199 break;
200 }
201 }
202 }
203 if(idet->last_type == UNDETERMINED){
204 if(match ) idet->last_type = best_type;
205 }else{
206 if(match>2) idet->last_type = best_type;
207 }
208
209 if (idet->last_type == TFF){
211 }else if(idet->last_type == BFF){
214 }else if(idet->last_type == PROGRESSIVE){
216 }
217
218 for(i=0; i<3; i++)
219 idet->repeats[i] = av_rescale(idet->repeats [i], idet->decay_coefficient, PRECISION);
220
221 for(i=0; i<4; i++){
222 idet->prestat [i] = av_rescale(idet->prestat [i], idet->decay_coefficient, PRECISION);
223 idet->poststat[i] = av_rescale(idet->poststat[i], idet->decay_coefficient, PRECISION);
224 }
225
226 idet->total_repeats [ repeat] ++;
227 idet->repeats [ repeat] += PRECISION;
228
229 idet->total_prestat [ type] ++;
230 idet->prestat [ type] += PRECISION;
231
232 idet->total_poststat[idet->last_type] ++;
233 idet->poststat [idet->last_type] += PRECISION;
234
235 av_log(ctx, AV_LOG_DEBUG, "Repeated Field:%12s, Single frame:%12s, Multi frame:%12s\n",
236 rep2str(repeat), type2str(type), type2str(idet->last_type));
237
238 av_dict_set (metadata, "lavfi.idet.repeated.current_frame", rep2str(repeat), 0);
239 av_dict_set_fxp(metadata, "lavfi.idet.repeated.neither", idet->repeats[REPEAT_NONE], 2, 0);
240 av_dict_set_fxp(metadata, "lavfi.idet.repeated.top", idet->repeats[REPEAT_TOP], 2, 0);
241 av_dict_set_fxp(metadata, "lavfi.idet.repeated.bottom", idet->repeats[REPEAT_BOTTOM], 2, 0);
242
243 av_dict_set (metadata, "lavfi.idet.single.current_frame", type2str(type), 0);
244 av_dict_set_fxp(metadata, "lavfi.idet.single.tff", idet->prestat[TFF], 2 , 0);
245 av_dict_set_fxp(metadata, "lavfi.idet.single.bff", idet->prestat[BFF], 2, 0);
246 av_dict_set_fxp(metadata, "lavfi.idet.single.progressive", idet->prestat[PROGRESSIVE], 2, 0);
247 av_dict_set_fxp(metadata, "lavfi.idet.single.undetermined", idet->prestat[UNDETERMINED], 2, 0);
248
249 av_dict_set (metadata, "lavfi.idet.multiple.current_frame", type2str(idet->last_type), 0);
250 av_dict_set_fxp(metadata, "lavfi.idet.multiple.tff", idet->poststat[TFF], 2, 0);
251 av_dict_set_fxp(metadata, "lavfi.idet.multiple.bff", idet->poststat[BFF], 2, 0);
252 av_dict_set_fxp(metadata, "lavfi.idet.multiple.progressive", idet->poststat[PROGRESSIVE], 2, 0);
253 av_dict_set_fxp(metadata, "lavfi.idet.multiple.undetermined", idet->poststat[UNDETERMINED], 2, 0);
254}
255
256static int filter_frame(AVFilterLink *link, AVFrame *picref)
257{
258 AVFilterContext *ctx = link->dst;
259 IDETContext *idet = ctx->priv;
260
261 // initial frame(s) and not interlaced, just pass through for
262 // the analyze_interlaced_flag mode
263 if (idet->analyze_interlaced_flag &&
264 !(picref->flags & AV_FRAME_FLAG_INTERLACED) &&
265 !idet->next) {
266 return ff_filter_frame(ctx->outputs[0], picref);
267 }
269 if ((picref->flags & AV_FRAME_FLAG_INTERLACED) && idet->interlaced_flag_accuracy < 0) {
271 }
272 return ff_filter_frame(ctx->outputs[0], picref);
273 }
274
275 av_frame_free(&idet->prev);
276
277 if( picref->width != link->w
278 || picref->height != link->h
279 || picref->format != link->format) {
280 link->dst->inputs[0]->format = picref->format;
281 link->dst->inputs[0]->w = picref->width;
282 link->dst->inputs[0]->h = picref->height;
283
284 av_frame_free(&idet->cur );
285 av_frame_free(&idet->next);
286 idet->csp = NULL;
287 }
288
289 idet->prev = idet->cur;
290 idet->cur = idet->next;
291 idet->next = picref;
292
293 if (!idet->cur &&
294 !(idet->cur = av_frame_clone(idet->next)))
295 return AVERROR(ENOMEM);
296
297 if (!idet->prev)
298 return 0;
299
300 if (!idet->csp) {
301 idet->csp = av_pix_fmt_desc_get(link->format);
302 ff_idet_dsp_init(&idet->dsp, idet->csp->comp[0].depth);
303 }
304
305 if (idet->analyze_interlaced_flag) {
306 if (idet->cur->flags & AV_FRAME_FLAG_INTERLACED) {
308 filter(ctx);
309 if (idet->last_type == PROGRESSIVE) {
312 } else if (idet->last_type != UNDETERMINED) {
315 }
316 if (idet->analyze_interlaced_flag == 1) {
317 ff_filter_frame(ctx->outputs[0], av_frame_clone(idet->cur));
318
319 if ((idet->next->flags & AV_FRAME_FLAG_INTERLACED) && idet->interlaced_flag_accuracy < 0) {
321 }
323 av_log(ctx, AV_LOG_INFO, "Final flag accuracy %d\n", idet->interlaced_flag_accuracy);
324 return ff_filter_frame(ctx->outputs[0], av_frame_clone(idet->next));
325 }
326 }
327 } else {
328 filter(ctx);
329 }
330
331 return ff_filter_frame(ctx->outputs[0], av_frame_clone(idet->cur));
332}
333
335{
336 AVFilterContext *ctx = link->src;
337 IDETContext *idet = ctx->priv;
338 int ret;
339
340 if (idet->eof)
341 return AVERROR_EOF;
342
343 ret = ff_request_frame(link->src->inputs[0]);
344
345 if (ret == AVERROR_EOF && idet->cur && !idet->analyze_interlaced_flag_done) {
346 AVFrame *next = av_frame_clone(idet->next);
347
348 if (!next)
349 return AVERROR(ENOMEM);
350
351 ret = filter_frame(link->src->inputs[0], next);
352 idet->eof = 1;
353 }
354
355 return ret;
356}
357
359{
360 IDETContext *idet = ctx->priv;
361
362 av_log(ctx, AV_LOG_INFO, "Repeated Fields: Neither:%6"PRId64" Top:%6"PRId64" Bottom:%6"PRId64"\n",
366 );
367 av_log(ctx, AV_LOG_INFO, "Single frame detection: TFF:%6"PRId64" BFF:%6"PRId64" Progressive:%6"PRId64" Undetermined:%6"PRId64"\n",
368 idet->total_prestat[TFF],
369 idet->total_prestat[BFF],
372 );
373 av_log(ctx, AV_LOG_INFO, "Multi frame detection: TFF:%6"PRId64" BFF:%6"PRId64" Progressive:%6"PRId64" Undetermined:%6"PRId64"\n",
374 idet->total_poststat[TFF],
375 idet->total_poststat[BFF],
378 );
379
380 av_frame_free(&idet->prev);
381 av_frame_free(&idet->cur );
382 av_frame_free(&idet->next);
383}
384
418
420{
421 IDETContext *idet = ctx->priv;
422
423 idet->eof = 0;
424 idet->last_type = UNDETERMINED;
425 memset(idet->history, UNDETERMINED, HIST_SIZE);
426
427 if( idet->half_life > 0 )
428 idet->decay_coefficient = lrint( PRECISION * exp2(-1.0 / idet->half_life) );
429 else
431
432 ff_idet_dsp_init(&idet->dsp, 8);
433
434 return 0;
435}
436
437static const AVFilterPad idet_inputs[] = {
438 {
439 .name = "default",
440 .type = AVMEDIA_TYPE_VIDEO,
441 .filter_frame = filter_frame,
442 },
443};
444
445static const AVFilterPad idet_outputs[] = {
446 {
447 .name = "default",
448 .type = AVMEDIA_TYPE_VIDEO,
449 .request_frame = request_frame
450 },
451};
452
454 .p.name = "idet",
455 .p.description = NULL_IF_CONFIG_SMALL("Interlace detect Filter."),
457 .p.priv_class = &idet_class,
458 .priv_size = sizeof(IDETContext),
459 .init = init,
460 .uninit = uninit,
464};
static int request_frame(AVFilterLink *outlink)
Definition af_aecho.c:272
const FFFilter ff_vf_idet
Definition vf_idet.c:453
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
Definition avfilter.c:1068
int ff_request_frame(AVFilterLink *link)
Request an input frame from the filter at the other end of the link.
Definition avfilter.c:483
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define flags(name, subs,...)
Definition cbs_h264.c:74
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define FLAGS
Definition cmdutils.c:598
common internal and external API header
#define AV_CEIL_RSHIFT(a, b)
Definition common.h:60
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
static int filter_frame(DBEDecodeContext *s, AVFrame *frame)
Definition dolby_e.c:1067
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
double value
Definition eval.c:102
#define HIST_SIZE
Definition f_ebur128.c:51
const char * key
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition opt.h:258
@ AV_OPT_TYPE_FLOAT
Underlying C type is float.
Definition opt.h:270
#define AVFILTER_FLAG_METADATA_ONLY
The filter is a "metadata" filter - it does not modify the frame data in any way.
Definition avfilter.h:182
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition dict.c:86
#define AVERROR_EOF
End of file.
Definition error.h:57
#define AVERROR(e)
Definition error.h:45
#define AV_FRAME_FLAG_INTERLACED
A flag to mark frames whose content is interlaced.
Definition frame.h:695
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
Definition frame.h:700
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
AVFrame * av_frame_clone(const AVFrame *src)
Create a new frame that references the same data as src.
Definition frame.c:483
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_INFO
Standard information.
Definition log.h:221
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
cl_device_type type
static const int16_t alpha[]
Definition ilbcdata.h:55
#define r
Definition input.c:42
#define b
Definition input.c:43
static av_cold void uninit(AVBitStreamFilterContext *ctx)
#define FILTER_INPUTS(array)
Definition filters.h:264
#define FILTER_OUTPUTS(array)
Definition filters.h:265
#define FILTER_PIXFMTS_ARRAY(array)
Definition filters.h:244
#define AVFILTER_DEFINE_CLASS(fname)
Definition filters.h:478
Type
Definition vf_idet.c:30
@ TFF
Definition vf_idet.c:31
@ BFF
Definition vf_idet.c:32
@ UNDETERMINED
Definition vf_idet.c:34
static const AVOption idet_options[]
Definition vf_idet.c:80
static const AVFilterPad idet_outputs[]
Definition vf_idet.c:445
static const char * rep2str(RepeatedField repeated_field)
Definition vf_idet.c:125
static const char * type2str(Type type)
Definition vf_idet.c:91
#define HIST_SIZE
Definition vf_idet.c:62
static int request_frame(AVFilterLink *link)
Definition vf_idet.c:334
RepeatedField
Definition vf_idet.c:37
@ REPEAT_BOTTOM
Definition vf_idet.c:40
@ REPEAT_NONE
Definition vf_idet.c:38
@ REPEAT_TOP
Definition vf_idet.c:39
static av_cold void uninit(AVFilterContext *ctx)
Definition vf_idet.c:358
#define OFFSET(x)
Definition vf_idet.c:77
static const AVFilterPad idet_inputs[]
Definition vf_idet.c:437
static int av_dict_set_fxp(AVDictionary **pm, const char *key, uint64_t value, unsigned int digits, int flags)
Definition vf_idet.c:111
static int filter_frame(AVFilterLink *link, AVFrame *picref)
Definition vf_idet.c:256
static uint64_t uintpow(uint64_t b, unsigned int e)
Definition vf_idet.c:104
#define av_cold
Definition attributes.h:117
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static enum AVPixelFormat pix_fmts[]
Definition libkvazaar.c:296
#define exp2(x)
Definition libm.h:290
uint8_t w
Definition llvidencdsp.c:39
AVOptions.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition pixdesc.c:3460
#define AV_PIX_FMT_YUV420P16
Definition pixfmt.h:556
#define AV_PIX_FMT_YUV444P12
Definition pixfmt.h:552
#define AV_PIX_FMT_YUV444P9
Definition pixfmt.h:544
#define AV_PIX_FMT_YUV420P10
Definition pixfmt.h:545
#define AV_PIX_FMT_YUV422P9
Definition pixfmt.h:543
#define AV_PIX_FMT_YUV420P12
Definition pixfmt.h:549
#define AV_PIX_FMT_YUV422P12
Definition pixfmt.h:550
#define AV_PIX_FMT_YUV422P10
Definition pixfmt.h:546
#define AV_PIX_FMT_YUV420P9
Definition pixfmt.h:542
#define AV_PIX_FMT_YUV420P14
Definition pixfmt.h:553
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
@ 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_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
Definition pixfmt.h:106
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition pixfmt.h:77
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
Definition pixfmt.h:81
@ 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_YUVJ440P
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
Definition pixfmt.h:107
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
Definition pixfmt.h:79
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
Definition pixfmt.h:80
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition pixfmt.h:78
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Definition pixfmt.h:174
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
Definition pixfmt.h:86
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
Definition pixfmt.h:173
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
Definition pixfmt.h:87
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
Definition pixfmt.h:85
#define AV_PIX_FMT_YUV422P14
Definition pixfmt.h:554
#define AV_PIX_FMT_YUV422P16
Definition pixfmt.h:557
#define AV_PIX_FMT_GRAY16
Definition pixfmt.h:528
#define AV_PIX_FMT_YUV444P14
Definition pixfmt.h:555
#define AV_PIX_FMT_YUV444P16
Definition pixfmt.h:558
#define AV_PIX_FMT_YUV444P10
Definition pixfmt.h:548
#define snprintf
Definition snprintf.h:34
Describe the class of an AVClass context structure.
Definition log.h:76
int depth
Number of bits in the component.
Definition pixdesc.h:57
An instance of a filter.
Definition avfilter.h:273
AVFilterLink ** inputs
array of pointers to input links
Definition avfilter.h:281
A filter pad used for either input or output.
Definition filters.h:40
This structure describes decoded (raw) audio or video data.
Definition frame.h:472
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition frame.h:493
int width
Definition frame.h:544
int height
Definition frame.h:544
int flags
Frame flags, a combination of AV_FRAME_FLAGS.
Definition frame.h:716
AVDictionary * metadata
metadata.
Definition frame.h:750
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
Definition frame.h:517
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
Definition frame.h:559
AVOption.
Definition opt.h:428
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition pixdesc.h:69
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition pixdesc.h:105
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition pixdesc.h:80
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition pixdesc.h:89
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition pixdesc.h:71
float interlace_threshold
Definition vf_idet.c:47
uint64_t total_poststat[4]
Definition vf_idet.c:60
IDETDSPContext dsp
Definition vf_idet.c:45
AVFrame * cur
Definition vf_idet.c:65
uint64_t total_prestat[4]
Definition vf_idet.c:59
Type last_type
Definition vf_idet.c:53
AVFrame * next
Definition vf_idet.c:66
const AVPixFmtDescriptor * csp
Definition vf_idet.c:73
uint8_t history[HIST_SIZE]
Definition vf_idet.c:63
int interlaced_flag_accuracy
Definition vf_idet.c:69
AVFrame * prev
Definition vf_idet.c:67
int analyze_interlaced_flag
Definition vf_idet.c:70
uint64_t prestat[4]
Definition vf_idet.c:56
float repeat_threshold
Definition vf_idet.c:49
uint64_t repeats[3]
Definition vf_idet.c:55
uint64_t total_repeats[3]
Definition vf_idet.c:58
uint64_t poststat[4]
Definition vf_idet.c:57
int analyze_interlaced_flag_done
Definition vf_idet.c:71
float half_life
Definition vf_idet.c:50
uint64_t decay_coefficient
Definition vf_idet.c:51
float progressive_threshold
Definition vf_idet.c:48
ff_idet_filter_func filter_line
Definition vf_idetdsp.h:27
#define lrint
Definition tablegen.h:53
#define av_log(a,...)
void(* filter)(uint8_t *src, ptrdiff_t stride, int qscale)
Definition h263dsp.c:29
static AVFormatContext * ctx
Definition movenc.c:49
@ PROGRESSIVE
in the bitstream is reported as 00b
Definition vc1.h:152
void av_cold ff_idet_dsp_init(IDETDSPContext *dsp, int depth)
Definition vf_idetdsp.c:56
int(* ff_idet_filter_func)(const uint8_t *a, const uint8_t *b, const uint8_t *c, int w)
Definition vf_idetdsp.h:24
float delta
#define PRECISION
Definition wavpack.c:53