FFmpeg
vf_showinfo.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011 Stefano Sabatini
3  * This file is part of FFmpeg.
4  *
5  * FFmpeg is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * FFmpeg is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with FFmpeg; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 /**
21  * @file
22  * filter for showing textual video frame information
23  */
24 
25 #include <inttypes.h>
26 
27 #include "libavutil/bswap.h"
28 #include "libavutil/adler32.h"
29 #include "libavutil/display.h"
30 #include "libavutil/imgutils.h"
31 #include "libavutil/internal.h"
32 #include "libavutil/opt.h"
33 #include "libavutil/pixdesc.h"
34 #include "libavutil/spherical.h"
35 #include "libavutil/stereo3d.h"
36 #include "libavutil/timestamp.h"
37 #include "libavutil/timecode.h"
40 
41 #include "avfilter.h"
42 #include "internal.h"
43 #include "video.h"
44 
45 typedef struct ShowInfoContext {
46  const AVClass *class;
49 
50 #define OFFSET(x) offsetof(ShowInfoContext, x)
51 #define VF AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
52 
53 static const AVOption showinfo_options[] = {
54  { "checksum", "calculate checksums", OFFSET(calculate_checksums), AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1, VF },
55  { NULL }
56 };
57 
58 AVFILTER_DEFINE_CLASS(showinfo);
59 
61 {
62  AVSphericalMapping *spherical = (AVSphericalMapping *)sd->data;
63  double yaw, pitch, roll;
64 
65  av_log(ctx, AV_LOG_INFO, "spherical information: ");
66  if (sd->size < sizeof(*spherical)) {
67  av_log(ctx, AV_LOG_ERROR, "invalid data");
68  return;
69  }
70 
71  if (spherical->projection == AV_SPHERICAL_EQUIRECTANGULAR)
72  av_log(ctx, AV_LOG_INFO, "equirectangular ");
73  else if (spherical->projection == AV_SPHERICAL_CUBEMAP)
74  av_log(ctx, AV_LOG_INFO, "cubemap ");
75  else if (spherical->projection == AV_SPHERICAL_EQUIRECTANGULAR_TILE)
76  av_log(ctx, AV_LOG_INFO, "tiled equirectangular ");
77  else {
78  av_log(ctx, AV_LOG_WARNING, "unknown");
79  return;
80  }
81 
82  yaw = ((double)spherical->yaw) / (1 << 16);
83  pitch = ((double)spherical->pitch) / (1 << 16);
84  roll = ((double)spherical->roll) / (1 << 16);
85  av_log(ctx, AV_LOG_INFO, "(%f/%f/%f) ", yaw, pitch, roll);
86 
88  size_t l, t, r, b;
89  av_spherical_tile_bounds(spherical, frame->width, frame->height,
90  &l, &t, &r, &b);
93  l, t, r, b);
94  } else if (spherical->projection == AV_SPHERICAL_CUBEMAP) {
95  av_log(ctx, AV_LOG_INFO, "[pad %"PRIu32"] ", spherical->padding);
96  }
97 }
98 
100 {
101  AVStereo3D *stereo;
102 
103  av_log(ctx, AV_LOG_INFO, "stereoscopic information: ");
104  if (sd->size < sizeof(*stereo)) {
105  av_log(ctx, AV_LOG_ERROR, "invalid data");
106  return;
107  }
108 
109  stereo = (AVStereo3D *)sd->data;
110 
111  av_log(ctx, AV_LOG_INFO, "type - %s", av_stereo3d_type_name(stereo->type));
112 
113  if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
114  av_log(ctx, AV_LOG_INFO, " (inverted)");
115 }
116 
118 {
119  int nb_rois;
120  const AVRegionOfInterest *roi;
121  uint32_t roi_size;
122 
123  roi = (const AVRegionOfInterest *)sd->data;
124  roi_size = roi->self_size;
125  if (!roi_size || sd->size % roi_size != 0) {
126  av_log(ctx, AV_LOG_ERROR, "Invalid AVRegionOfInterest.self_size.");
127  return;
128  }
129  nb_rois = sd->size / roi_size;
130 
131  av_log(ctx, AV_LOG_INFO, "Regions Of Interest(RoI) information: ");
132  for (int i = 0; i < nb_rois; i++) {
133  roi = (const AVRegionOfInterest *)(sd->data + roi_size * i);
134  av_log(ctx, AV_LOG_INFO, "index: %d, region: (%d, %d)/(%d, %d), qp offset: %d/%d.\n",
135  i, roi->left, roi->top, roi->right, roi->bottom, roi->qoffset.num, roi->qoffset.den);
136  }
137 }
138 
140 {
141  AVMasteringDisplayMetadata *mastering_display;
142 
143  av_log(ctx, AV_LOG_INFO, "mastering display: ");
144  if (sd->size < sizeof(*mastering_display)) {
145  av_log(ctx, AV_LOG_ERROR, "invalid data");
146  return;
147  }
148 
149  mastering_display = (AVMasteringDisplayMetadata *)sd->data;
150 
151  av_log(ctx, AV_LOG_INFO, "has_primaries:%d has_luminance:%d "
152  "r(%5.4f,%5.4f) g(%5.4f,%5.4f) b(%5.4f %5.4f) wp(%5.4f, %5.4f) "
153  "min_luminance=%f, max_luminance=%f",
154  mastering_display->has_primaries, mastering_display->has_luminance,
155  av_q2d(mastering_display->display_primaries[0][0]),
156  av_q2d(mastering_display->display_primaries[0][1]),
157  av_q2d(mastering_display->display_primaries[1][0]),
158  av_q2d(mastering_display->display_primaries[1][1]),
159  av_q2d(mastering_display->display_primaries[2][0]),
160  av_q2d(mastering_display->display_primaries[2][1]),
161  av_q2d(mastering_display->white_point[0]), av_q2d(mastering_display->white_point[1]),
162  av_q2d(mastering_display->min_luminance), av_q2d(mastering_display->max_luminance));
163 }
164 
166 {
168 
169  av_log(ctx, AV_LOG_INFO, "Content Light Level information: "
170  "MaxCLL=%d, MaxFALL=%d",
171  metadata->MaxCLL, metadata->MaxFALL);
172 }
173 
175 {
177  int plane, acdc;
178 
179  av_log(ctx, AV_LOG_INFO, "video encoding parameters: type %d; ", par->type);
180  if (par->qp)
181  av_log(ctx, AV_LOG_INFO, "qp=%d; ", par->qp);
182  for (plane = 0; plane < FF_ARRAY_ELEMS(par->delta_qp); plane++)
183  for (acdc = 0; acdc < FF_ARRAY_ELEMS(par->delta_qp[plane]); acdc++) {
184  int delta_qp = par->delta_qp[plane][acdc];
185  if (delta_qp)
186  av_log(ctx, AV_LOG_INFO, "delta_qp[%d][%d]=%d; ",
187  plane, acdc, delta_qp);
188  }
189  if (par->nb_blocks)
190  av_log(ctx, AV_LOG_INFO, "%u blocks; ", par->nb_blocks);
191 }
192 
194 {
195  const char *color_range_str = av_color_range_name(frame->color_range);
196  const char *colorspace_str = av_color_space_name(frame->colorspace);
197  const char *color_primaries_str = av_color_primaries_name(frame->color_primaries);
198  const char *color_trc_str = av_color_transfer_name(frame->color_trc);
199 
200  if (!color_range_str || frame->color_range == AVCOL_RANGE_UNSPECIFIED) {
201  av_log(ctx, AV_LOG_INFO, "color_range:unknown");
202  } else {
203  av_log(ctx, AV_LOG_INFO, "color_range:%s", color_range_str);
204  }
205 
206  if (!colorspace_str || frame->colorspace == AVCOL_SPC_UNSPECIFIED) {
207  av_log(ctx, AV_LOG_INFO, " color_space:unknown");
208  } else {
209  av_log(ctx, AV_LOG_INFO, " color_space:%s", colorspace_str);
210  }
211 
212  if (!color_primaries_str || frame->color_primaries == AVCOL_PRI_UNSPECIFIED) {
213  av_log(ctx, AV_LOG_INFO, " color_primaries:unknown");
214  } else {
215  av_log(ctx, AV_LOG_INFO, " color_primaries:%s", color_primaries_str);
216  }
217 
218  if (!color_trc_str || frame->color_trc == AVCOL_TRC_UNSPECIFIED) {
219  av_log(ctx, AV_LOG_INFO, " color_trc:unknown");
220  } else {
221  av_log(ctx, AV_LOG_INFO, " color_trc:%s", color_trc_str);
222  }
223  av_log(ctx, AV_LOG_INFO, "\n");
224 }
225 
226 static void update_sample_stats_8(const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
227 {
228  int i;
229 
230  for (i = 0; i < len; i++) {
231  *sum += src[i];
232  *sum2 += src[i] * src[i];
233  }
234 }
235 
236 static void update_sample_stats_16(int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
237 {
238  const uint16_t *src1 = (const uint16_t *)src;
239  int i;
240 
241  for (i = 0; i < len / 2; i++) {
242  if ((HAVE_BIGENDIAN && !be) || (!HAVE_BIGENDIAN && be)) {
243  *sum += av_bswap16(src1[i]);
244  *sum2 += (uint32_t)av_bswap16(src1[i]) * (uint32_t)av_bswap16(src1[i]);
245  } else {
246  *sum += src1[i];
247  *sum2 += (uint32_t)src1[i] * (uint32_t)src1[i];
248  }
249  }
250 }
251 
252 static void update_sample_stats(int depth, int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
253 {
254  if (depth <= 8)
255  update_sample_stats_8(src, len, sum, sum2);
256  else
257  update_sample_stats_16(be, src, len, sum, sum2);
258 }
259 
261 {
262  AVFilterContext *ctx = inlink->dst;
263  ShowInfoContext *s = ctx->priv;
265  uint32_t plane_checksum[4] = {0}, checksum = 0;
266  int64_t sum[4] = {0}, sum2[4] = {0};
267  int32_t pixelcount[4] = {0};
268  int bitdepth = desc->comp[0].depth;
269  int be = desc->flags & AV_PIX_FMT_FLAG_BE;
270  int i, plane, vsub = desc->log2_chroma_h;
271 
272  for (plane = 0; plane < 4 && s->calculate_checksums && frame->data[plane] && frame->linesize[plane]; plane++) {
273  uint8_t *data = frame->data[plane];
274  int h = plane == 1 || plane == 2 ? AV_CEIL_RSHIFT(inlink->h, vsub) : inlink->h;
275  int linesize = av_image_get_linesize(frame->format, frame->width, plane);
276  int width = linesize >> (bitdepth > 8);
277 
278  if (linesize < 0)
279  return linesize;
280 
281  for (i = 0; i < h; i++) {
282  plane_checksum[plane] = av_adler32_update(plane_checksum[plane], data, linesize);
283  checksum = av_adler32_update(checksum, data, linesize);
284 
285  update_sample_stats(bitdepth, be, data, linesize, sum+plane, sum2+plane);
286  pixelcount[plane] += width;
287  data += frame->linesize[plane];
288  }
289  }
290 
292  "n:%4"PRId64" pts:%7s pts_time:%-7s pos:%9"PRId64" "
293  "fmt:%s sar:%d/%d s:%dx%d i:%c iskey:%d type:%c ",
294  inlink->frame_count_out,
295  av_ts2str(frame->pts), av_ts2timestr(frame->pts, &inlink->time_base), frame->pkt_pos,
296  desc->name,
297  frame->sample_aspect_ratio.num, frame->sample_aspect_ratio.den,
298  frame->width, frame->height,
299  !frame->interlaced_frame ? 'P' : /* Progressive */
300  frame->top_field_first ? 'T' : 'B', /* Top / Bottom */
301  frame->key_frame,
302  av_get_picture_type_char(frame->pict_type));
303 
304  if (s->calculate_checksums) {
306  "checksum:%08"PRIX32" plane_checksum:[%08"PRIX32,
307  checksum, plane_checksum[0]);
308 
309  for (plane = 1; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++)
310  av_log(ctx, AV_LOG_INFO, " %08"PRIX32, plane_checksum[plane]);
311  av_log(ctx, AV_LOG_INFO, "] mean:[");
312  for (plane = 0; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++)
313  av_log(ctx, AV_LOG_INFO, "%"PRId64" ", (sum[plane] + pixelcount[plane]/2) / pixelcount[plane]);
314  av_log(ctx, AV_LOG_INFO, "\b] stdev:[");
315  for (plane = 0; plane < 4 && frame->data[plane] && frame->linesize[plane]; plane++)
316  av_log(ctx, AV_LOG_INFO, "%3.1f ",
317  sqrt((sum2[plane] - sum[plane]*(double)sum[plane]/pixelcount[plane])/pixelcount[plane]));
318  av_log(ctx, AV_LOG_INFO, "\b]");
319  }
320  av_log(ctx, AV_LOG_INFO, "\n");
321 
322  for (i = 0; i < frame->nb_side_data; i++) {
323  AVFrameSideData *sd = frame->side_data[i];
324 
325  av_log(ctx, AV_LOG_INFO, " side data - ");
326  switch (sd->type) {
328  av_log(ctx, AV_LOG_INFO, "pan/scan");
329  break;
331  av_log(ctx, AV_LOG_INFO, "A/53 closed captions (%d bytes)", sd->size);
332  break;
334  dump_spherical(ctx, frame, sd);
335  break;
337  dump_stereo3d(ctx, sd);
338  break;
340  uint32_t *tc = (uint32_t*)sd->data;
341  int m = FFMIN(tc[0],3);
342  if (sd->size != 16) {
343  av_log(ctx, AV_LOG_ERROR, "invalid data");
344  break;
345  }
346  for (int j = 1; j <= m; j++) {
347  char tcbuf[AV_TIMECODE_STR_SIZE];
348  av_timecode_make_smpte_tc_string(tcbuf, tc[j], 0);
349  av_log(ctx, AV_LOG_INFO, "timecode - %s%s", tcbuf, j != m ? ", " : "");
350  }
351  break;
352  }
354  av_log(ctx, AV_LOG_INFO, "displaymatrix: rotation of %.2f degrees",
356  break;
357  case AV_FRAME_DATA_AFD:
358  av_log(ctx, AV_LOG_INFO, "afd: value of %"PRIu8, sd->data[0]);
359  break;
361  dump_roi(ctx, sd);
362  break;
365  break;
368  break;
370  char tcbuf[AV_TIMECODE_STR_SIZE];
371  av_timecode_make_mpeg_tc_string(tcbuf, *(int64_t *)(sd->data));
372  av_log(ctx, AV_LOG_INFO, "GOP timecode - %s", tcbuf);
373  break;
374  }
377  break;
378  default:
379  av_log(ctx, AV_LOG_WARNING, "unknown side data type %d (%d bytes)",
380  sd->type, sd->size);
381  break;
382  }
383 
384  av_log(ctx, AV_LOG_INFO, "\n");
385  }
386 
388 
389  return ff_filter_frame(inlink->dst->outputs[0], frame);
390 }
391 
393 {
394 
395  av_log(ctx, AV_LOG_INFO, "config %s time_base: %d/%d, frame_rate: %d/%d\n",
396  is_out ? "out" : "in",
397  link->time_base.num, link->time_base.den,
398  link->frame_rate.num, link->frame_rate.den);
399 
400  return 0;
401 }
402 
404 {
405  AVFilterContext *ctx = link->dst;
406  return config_props(ctx, link, 0);
407 }
408 
410 {
411  AVFilterContext *ctx = link->src;
412  return config_props(ctx, link, 1);
413 }
414 
416  {
417  .name = "default",
418  .type = AVMEDIA_TYPE_VIDEO,
419  .filter_frame = filter_frame,
420  .config_props = config_props_in,
421  },
422  { NULL }
423 };
424 
426  {
427  .name = "default",
428  .type = AVMEDIA_TYPE_VIDEO,
429  .config_props = config_props_out,
430  },
431  { NULL }
432 };
433 
435  .name = "showinfo",
436  .description = NULL_IF_CONFIG_SMALL("Show textual information for each video frame."),
437  .inputs = avfilter_vf_showinfo_inputs,
438  .outputs = avfilter_vf_showinfo_outputs,
439  .priv_size = sizeof(ShowInfoContext),
440  .priv_class = &showinfo_class,
441 };
AVVideoEncParams::qp
int32_t qp
Base quantisation parameter for the frame.
Definition: video_enc_params.h:95
AVMasteringDisplayMetadata::has_primaries
int has_primaries
Flag indicating whether the display primaries (and white point) are set.
Definition: mastering_display_metadata.h:62
be
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it be(in the first position) for now. Options ------- Then comes the options array. This is what will define the user accessible options. For example
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
AV_TIMECODE_STR_SIZE
#define AV_TIMECODE_STR_SIZE
Definition: timecode.h:33
AVMasteringDisplayMetadata::max_luminance
AVRational max_luminance
Max luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:57
r
const char * r
Definition: vf_curves.c:114
opt.h
AVSphericalMapping::projection
enum AVSphericalProjection projection
Projection type.
Definition: spherical.h:86
av_timecode_make_smpte_tc_string
char * av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_df)
Get the timecode string from the SMPTE timecode format.
Definition: timecode.c:118
ff_vf_showinfo
AVFilter ff_vf_showinfo
Definition: vf_showinfo.c:434
update_sample_stats
static void update_sample_stats(int depth, int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
Definition: vf_showinfo.c:252
ff_filter_frame
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
Definition: avfilter.c:1075
av_pix_fmt_desc_get
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
Definition: pixdesc.c:2549
AV_FRAME_DATA_A53_CC
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition: frame.h:58
AVMasteringDisplayMetadata::display_primaries
AVRational display_primaries[3][2]
CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
Definition: mastering_display_metadata.h:42
AVMasteringDisplayMetadata::has_luminance
int has_luminance
Flag indicating whether the luminance (min_ and max_) have been set.
Definition: mastering_display_metadata.h:67
config_props_out
static int config_props_out(AVFilterLink *link)
Definition: vf_showinfo.c:409
inlink
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
Definition: filter_design.txt:212
AV_FRAME_DATA_S12M_TIMECODE
@ AV_FRAME_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1.
Definition: frame.h:168
AVContentLightMetadata::MaxCLL
unsigned MaxCLL
Max content light level (cd/m^2).
Definition: mastering_display_metadata.h:102
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:300
avfilter_vf_showinfo_inputs
static const AVFilterPad avfilter_vf_showinfo_inputs[]
Definition: vf_showinfo.c:415
pixdesc.h
av_spherical_tile_bounds
void av_spherical_tile_bounds(const AVSphericalMapping *map, size_t width, size_t height, size_t *left, size_t *top, size_t *right, size_t *bottom)
Convert the bounding fields from an AVSphericalVideo from 0.32 fixed point to pixels.
Definition: spherical.c:36
AVOption
AVOption.
Definition: opt.h:246
b
#define b
Definition: input.c:41
AVCOL_TRC_UNSPECIFIED
@ AVCOL_TRC_UNSPECIFIED
Definition: pixfmt.h:483
spherical.h
data
const char data[16]
Definition: mxf.c:91
AV_FRAME_DATA_DISPLAYMATRIX
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition: frame.h:84
AV_SPHERICAL_EQUIRECTANGULAR_TILE
@ AV_SPHERICAL_EQUIRECTANGULAR_TILE
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection.
Definition: spherical.h:72
AVFilter::name
const char * name
Filter name.
Definition: avfilter.h:148
dump_color_property
static void dump_color_property(AVFilterContext *ctx, AVFrame *frame)
Definition: vf_showinfo.c:193
AV_SPHERICAL_EQUIRECTANGULAR
@ AV_SPHERICAL_EQUIRECTANGULAR
Video represents a sphere mapped on a flat surface using equirectangular projection.
Definition: spherical.h:56
video.h
OFFSET
#define OFFSET(x)
Definition: vf_showinfo.c:50
dump_spherical
static void dump_spherical(AVFilterContext *ctx, AVFrame *frame, AVFrameSideData *sd)
Definition: vf_showinfo.c:60
AVContentLightMetadata
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Definition: mastering_display_metadata.h:98
av_color_space_name
const char * av_color_space_name(enum AVColorSpace space)
Definition: pixdesc.c:2942
AVVideoEncParams::delta_qp
int32_t delta_qp[4][2]
Quantisation parameter offset from the base (per-frame) qp for a given plane (first index) and AC/DC ...
Definition: video_enc_params.h:101
timecode.h
AVRational::num
int num
Numerator.
Definition: rational.h:59
AVVideoEncParams
Video encoding parameters for a given frame.
Definition: video_enc_params.h:65
AVFILTER_DEFINE_CLASS
AVFILTER_DEFINE_CLASS(showinfo)
AVFilterPad
A filter pad used for either input or output.
Definition: internal.h:54
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
config_props_in
static int config_props_in(AVFilterLink *link)
Definition: vf_showinfo.c:403
AVRegionOfInterest
Structure describing a single Region Of Interest.
Definition: frame.h:225
width
#define width
filter_frame
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
Definition: vf_showinfo.c:260
stereo3d.h
AVMasteringDisplayMetadata::white_point
AVRational white_point[2]
CIE 1931 xy chromaticity coords of white point.
Definition: mastering_display_metadata.h:47
s
#define s(width, name)
Definition: cbs_vp9.c:257
AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:58
AVRegionOfInterest::bottom
int bottom
Definition: frame.h:241
dump_stereo3d
static void dump_stereo3d(AVFilterContext *ctx, AVFrameSideData *sd)
Definition: vf_showinfo.c:99
av_q2d
static double av_q2d(AVRational a)
Convert an AVRational to a double.
Definition: rational.h:104
VF
#define VF
Definition: vf_showinfo.c:51
ctx
AVFormatContext * ctx
Definition: movenc.c:48
AVVideoEncParams::type
enum AVVideoEncParamsType type
Type of the parameters (the codec they are used with).
Definition: video_enc_params.h:87
AVCOL_PRI_UNSPECIFIED
@ AVCOL_PRI_UNSPECIFIED
Definition: pixfmt.h:458
link
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
Definition: filter_design.txt:23
int32_t
int32_t
Definition: audio_convert.c:194
AVStereo3D::flags
int flags
Additional information about the frame packing.
Definition: stereo3d.h:185
if
if(ret)
Definition: filter_design.txt:179
av_color_range_name
const char * av_color_range_name(enum AVColorRange range)
Definition: pixdesc.c:2875
config_props
static int config_props(AVFilterContext *ctx, AVFilterLink *link, int is_out)
Definition: vf_showinfo.c:392
AV_FRAME_DATA_SPHERICAL
@ AV_FRAME_DATA_SPHERICAL
The data represents the AVSphericalMapping structure defined in libavutil/spherical....
Definition: frame.h:130
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:67
NULL
#define NULL
Definition: coverity.c:32
AVRegionOfInterest::self_size
uint32_t self_size
Must be set to the size of this data structure (that is, sizeof(AVRegionOfInterest)).
Definition: frame.h:230
src
#define src
Definition: vp8dsp.c:254
AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition: frame.h:119
av_color_primaries_name
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
Definition: pixdesc.c:2894
adler32.h
ShowInfoContext::calculate_checksums
int calculate_checksums
Definition: vf_showinfo.c:47
AV_FRAME_DATA_AFD
@ AV_FRAME_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition: frame.h:89
AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
Definition: pixfmt.h:533
dump_roi
static void dump_roi(AVFilterContext *ctx, AVFrameSideData *sd)
Definition: vf_showinfo.c:117
desc
const char * desc
Definition: nvenc.c:79
AV_SPHERICAL_CUBEMAP
@ AV_SPHERICAL_CUBEMAP
Video frame is split into 6 faces of a cube, and arranged on a 3x2 layout.
Definition: spherical.h:65
av_ts2timestr
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: timestamp.h:76
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
AV_FRAME_DATA_PANSCAN
@ AV_FRAME_DATA_PANSCAN
The data is the AVPanScan struct defined in libavcodec.
Definition: frame.h:52
showinfo_options
static const AVOption showinfo_options[]
Definition: vf_showinfo.c:53
AVFrameSideData::data
uint8_t * data
Definition: frame.h:208
AVVideoEncParams::nb_blocks
unsigned int nb_blocks
Number of blocks in the array.
Definition: video_enc_params.h:73
AVSphericalMapping::padding
uint32_t padding
Number of pixels to pad from the edge of each cube face.
Definition: spherical.h:182
FFMIN
#define FFMIN(a, b)
Definition: common.h:96
av_bswap16
#define av_bswap16
Definition: bswap.h:31
AVRegionOfInterest::right
int right
Definition: frame.h:243
AV_STEREO3D_FLAG_INVERT
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition: stereo3d.h:167
update_sample_stats_16
static void update_sample_stats_16(int be, const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
Definition: vf_showinfo.c:236
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:187
internal.h
av_image_get_linesize
int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane)
Compute the size of an image line with format pix_fmt and width width for the plane plane.
Definition: imgutils.c:76
av_get_picture_type_char
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
Definition: utils.c:88
src1
#define src1
Definition: h264pred.c:139
AVRegionOfInterest::left
int left
Definition: frame.h:242
AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition: frame.h:136
AVSphericalMapping::roll
int32_t roll
Rotation around the forward vector [-180, 180].
Definition: spherical.h:128
dump_content_light_metadata
static void dump_content_light_metadata(AVFilterContext *ctx, AVFrameSideData *sd)
Definition: vf_showinfo.c:165
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:269
AVRegionOfInterest::top
int top
Distance in pixels from the top edge of the frame to the top and bottom edges and from the left edge ...
Definition: frame.h:240
internal.h
display.h
AV_FRAME_DATA_STEREO3D
@ AV_FRAME_DATA_STEREO3D
Stereoscopic 3d metadata.
Definition: frame.h:63
AV_PIX_FMT_FLAG_BE
#define AV_PIX_FMT_FLAG_BE
Pixel format is big-endian.
Definition: pixdesc.h:128
uint8_t
uint8_t
Definition: audio_convert.c:194
AVMasteringDisplayMetadata
Mastering display metadata capable of representing the color volume of the display used to master the...
Definition: mastering_display_metadata.h:38
len
int len
Definition: vorbis_enc_data.h:452
AVFilterPad::name
const char * name
Pad name.
Definition: internal.h:60
AVCOL_SPC_UNSPECIFIED
@ AVCOL_SPC_UNSPECIFIED
Definition: pixfmt.h:512
avfilter_vf_showinfo_outputs
static const AVFilterPad avfilter_vf_showinfo_outputs[]
Definition: vf_showinfo.c:425
AVFilter
Filter definition.
Definition: avfilter.h:144
bswap.h
AV_FRAME_DATA_GOP_TIMECODE
@ AV_FRAME_DATA_GOP_TIMECODE
The GOP timecode in 25 bit timecode format.
Definition: frame.h:124
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
AVSphericalMapping::pitch
int32_t pitch
Rotation around the right vector [-90, 90].
Definition: spherical.h:127
AVStereo3D::type
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:180
checksum
static volatile int checksum
Definition: adler32.c:30
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen_template.c:38
SIZE_SPECIFIER
#define SIZE_SPECIFIER
Definition: internal.h:264
av_timecode_make_mpeg_tc_string
char * av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit)
Get the timecode string from the 25-bit timecode format (MPEG GOP format).
Definition: timecode.c:130
av_adler32_update
unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf, unsigned int len)
Calculate the Adler32 checksum of a buffer.
Definition: adler32.c:44
update_sample_stats_8
static void update_sample_stats_8(const uint8_t *src, int len, int64_t *sum, int64_t *sum2)
Definition: vf_showinfo.c:226
AV_FRAME_DATA_VIDEO_ENC_PARAMS
@ AV_FRAME_DATA_VIDEO_ENC_PARAMS
Encoding parameters for a video frame, as described by AVVideoEncParams.
Definition: frame.h:186
AVRational::den
int den
Denominator.
Definition: rational.h:60
avfilter.h
ShowInfoContext
Definition: vf_showinfo.c:45
AVFrameSideData::type
enum AVFrameSideDataType type
Definition: frame.h:207
AVMasteringDisplayMetadata::min_luminance
AVRational min_luminance
Min luminance of mastering display (cd/m^2).
Definition: mastering_display_metadata.h:52
AVFilterContext
An instance of a filter.
Definition: avfilter.h:338
tc
#define tc
Definition: regdef.h:69
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
mastering_display_metadata.h
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:206
AVPixFmtDescriptor
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition: pixdesc.h:81
AVContentLightMetadata::MaxFALL
unsigned MaxFALL
Max average light level per frame (cd/m^2).
Definition: mastering_display_metadata.h:107
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240
AVFrameSideData::size
int size
Definition: frame.h:209
AV_FRAME_DATA_REGIONS_OF_INTEREST
@ AV_FRAME_DATA_REGIONS_OF_INTEREST
Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of array element is ...
Definition: frame.h:181
imgutils.h
timestamp.h
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:28
av_ts2str
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition: timestamp.h:54
av_stereo3d_type_name
const char * av_stereo3d_type_name(unsigned int type)
Provide a human-readable name of a given stereo3d type.
Definition: stereo3d.c:57
h
h
Definition: vp9dsp_template.c:2038
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:176
dump_mastering_display
static void dump_mastering_display(AVFilterContext *ctx, AVFrameSideData *sd)
Definition: vf_showinfo.c:139
AVRegionOfInterest::qoffset
AVRational qoffset
Quantisation offset.
Definition: frame.h:267
AVSphericalMapping
This structure describes how to handle spherical videos, outlining information about projection,...
Definition: spherical.h:82
av_color_transfer_name
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
Definition: pixdesc.c:2918
AVSphericalMapping::yaw
int32_t yaw
Rotation around the up vector [-180, 180].
Definition: spherical.h:126
video_enc_params.h
av_display_rotation_get
double av_display_rotation_get(const int32_t matrix[9])
Extract the rotation component of the transformation matrix.
Definition: display.c:34
dump_video_enc_params
static void dump_video_enc_params(AVFilterContext *ctx, AVFrameSideData *sd)
Definition: vf_showinfo.c:174