Unified · Split
| @@ -11,6 +11,8 @@ version <next>: · 10 unmodified lines | |||
| 11 | - Frame multithreaded decoding | 11 | - Frame multithreaded decoding |
| 12 | - Lots of deprecated API cruft removed | 12 | - Lots of deprecated API cruft removed |
| 13 | - fft and imdct optimizations for AVX (Sandy Bridge) processors | 13 | - fft and imdct optimizations for AVX (Sandy Bridge) processors |
| 14 | - showinfo filter added | ||
| 15 | |||
| 14 | 16 | ||
| 15 | version 0.7_beta1: | 17 | version 0.7_beta1: |
| 16 | 18 | ||
| @@ -1309,6 +1309,65 @@ settb=2*intb · 1308 unmodified lines | |||
| 1309 | settb=AVTB | 1309 | settb=AVTB |
| 1310 | @end example | 1310 | @end example |
| 1311 | 1311 | ||
| 1312 | @section showinfo | ||
| 1313 | |||
| 1314 | Show a line containing various information for each input video frame. | ||
| 1315 | The input video is not modified. | ||
| 1316 | |||
| 1317 | The shown line contains a sequence of key/value pairs of the form | ||
| 1318 | @var{key}:@var{value}. | ||
| 1319 | |||
| 1320 | A description of each shown parameter follows: | ||
| 1321 | |||
| 1322 | @table @option | ||
| 1323 | @item n | ||
| 1324 | sequential number of the input frame, starting from 0 | ||
| 1325 | |||
| 1326 | @item pts | ||
| 1327 | Presentation TimeStamp of the input frame, expressed as a number of | ||
| 1328 | time base units. The time base unit depends on the filter input pad. | ||
| 1329 | |||
| 1330 | @item pts_time | ||
| 1331 | Presentation TimeStamp of the input frame, expressed as a number of | ||
| 1332 | seconds | ||
| 1333 | |||
| 1334 | @item pos | ||
| 1335 | position of the frame in the input stream, -1 if this information in | ||
| 1336 | unavailable and/or meanigless (for example in case of synthetic video) | ||
| 1337 | |||
| 1338 | @item fmt | ||
| 1339 | pixel format name | ||
| 1340 | |||
| 1341 | @item sar | ||
| 1342 | sample aspect ratio of the input frame, expressed in the form | ||
| 1343 | @var{num}/@var{den} | ||
| 1344 | |||
| 1345 | @item s | ||
| 1346 | size of the input frame, expressed in the form | ||
| 1347 | @var{width}x@var{height} | ||
| 1348 | |||
| 1349 | @item i | ||
| 1350 | interlaced mode ("P" for "progressive", "T" for top field first, "B" | ||
| 1351 | for bottom field first) | ||
| 1352 | |||
| 1353 | @item iskey | ||
| 1354 | 1 if the frame is a key frame, 0 otherwise | ||
| 1355 | |||
| 1356 | @item type | ||
| 1357 | picture type of the input frame ("I" for an I-frame, "P" for a | ||
| 1358 | P-frame, "B" for a B-frame, "?" for unknown type). | ||
| 1359 | Check also the documentation of the @code{AVPictureType} enum and of | ||
| 1360 | the @code{av_get_picture_type_char} function defined in | ||
| 1361 | @file{libavutil/avutil.h}. | ||
| 1362 | |||
| 1363 | @item crc | ||
| 1364 | Adler-32 CRC of the input frame | ||
| 1365 | |||
| 1366 | @item plane_crc | ||
| 1367 | Adler-32 CRC of each plane of the input frame, expressed in the form | ||
| 1368 | "[@var{crc0} @var{crc1} @var{crc2} @var{crc3}]" | ||
| 1369 | @end table | ||
| 1370 | |||
| 1312 | @section slicify | 1371 | @section slicify |
| 1313 | 1372 | ||
| 1314 | Pass the images of input video on to next video filter as multiple | 1373 | Pass the images of input video on to next video filter as multiple |
| @@ -48,6 +48,7 @@ OBJS-$(CONFIG_SETDAR_FILTER) += vf_aspect.o · 47 unmodified lines | |||
| 48 | OBJS-$(CONFIG_SETPTS_FILTER) += vf_setpts.o | 48 | OBJS-$(CONFIG_SETPTS_FILTER) += vf_setpts.o |
| 49 | OBJS-$(CONFIG_SETSAR_FILTER) += vf_aspect.o | 49 | OBJS-$(CONFIG_SETSAR_FILTER) += vf_aspect.o |
| 50 | OBJS-$(CONFIG_SETTB_FILTER) += vf_settb.o | 50 | OBJS-$(CONFIG_SETTB_FILTER) += vf_settb.o |
| 51 | OBJS-$(CONFIG_SHOWINFO_FILTER) += vf_showinfo.o | ||
| 51 | OBJS-$(CONFIG_SLICIFY_FILTER) += vf_slicify.o | 52 | OBJS-$(CONFIG_SLICIFY_FILTER) += vf_slicify.o |
| 52 | OBJS-$(CONFIG_TRANSPOSE_FILTER) += vf_transpose.o | 53 | OBJS-$(CONFIG_TRANSPOSE_FILTER) += vf_transpose.o |
| 53 | OBJS-$(CONFIG_UNSHARP_FILTER) += vf_unsharp.o | 54 | OBJS-$(CONFIG_UNSHARP_FILTER) += vf_unsharp.o |
| @@ -66,6 +66,7 @@ void avfilter_register_all(void) · 65 unmodified lines | |||
| 66 | REGISTER_FILTER (SETPTS, setpts, vf); | 66 | REGISTER_FILTER (SETPTS, setpts, vf); |
| 67 | REGISTER_FILTER (SETSAR, setsar, vf); | 67 | REGISTER_FILTER (SETSAR, setsar, vf); |
| 68 | REGISTER_FILTER (SETTB, settb, vf); | 68 | REGISTER_FILTER (SETTB, settb, vf); |
| 69 | REGISTER_FILTER (SHOWINFO, showinfo, vf); | ||
| 69 | REGISTER_FILTER (SLICIFY, slicify, vf); | 70 | REGISTER_FILTER (SLICIFY, slicify, vf); |
| 70 | REGISTER_FILTER (TRANSPOSE, transpose, vf); | 71 | REGISTER_FILTER (TRANSPOSE, transpose, vf); |
| 71 | REGISTER_FILTER (UNSHARP, unsharp, vf); | 72 | REGISTER_FILTER (UNSHARP, unsharp, vf); |
| @@ -26,8 +26,8 @@ · 25 unmodified lines | |||
| 26 | #include "libavutil/samplefmt.h" | 26 | #include "libavutil/samplefmt.h" |
| 27 | 27 | ||
| 28 | #define LIBAVFILTER_VERSION_MAJOR 2 | 28 | #define LIBAVFILTER_VERSION_MAJOR 2 |
| 29 | #define LIBAVFILTER_VERSION_MINOR 3 | 29 | #define LIBAVFILTER_VERSION_MINOR 1 |
| 30 | #define LIBAVFILTER_VERSION_MICRO 1 | 30 | #define LIBAVFILTER_VERSION_MICRO 0 |
| 31 | 31 | ||
| 32 | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | 32 | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ |
| 33 | LIBAVFILTER_VERSION_MINOR, \ | 33 | LIBAVFILTER_VERSION_MINOR, \ |
| @@ -0,0 +1,92 @@ | |||
| 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 fow showing textual video frame information | ||
| 23 | */ | ||
| 24 | |||
| 25 | #include "libavutil/adler32.h" | ||
| 26 | #include "libavutil/imgutils.h" | ||
| 27 | #include "libavutil/pixdesc.h" | ||
| 28 | #include "avfilter.h" | ||
| 29 | |||
| 30 | typedef struct { | ||
| 31 | unsigned int frame; | ||
| 32 | } ShowInfoContext; | ||
| 33 | |||
| 34 | static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) | ||
| 35 | { | ||
| 36 | ShowInfoContext *showinfo = ctx->priv; | ||
| 37 | showinfo->frame = 0; | ||
| 38 | return 0; | ||
| 39 | } | ||
| 40 | |||
| 41 | static void end_frame(AVFilterLink *inlink) | ||
| 42 | { | ||
| 43 | AVFilterContext *ctx = inlink->dst; | ||
| 44 | ShowInfoContext *showinfo = ctx->priv; | ||
| 45 | AVFilterBufferRef *picref = inlink->cur_buf; | ||
| 46 | uint32_t plane_crc[4], crc = 0; | ||
| 47 | int plane; | ||
| 48 | |||
| 49 | for (plane = 0; plane < 4; plane++) { | ||
| 50 | size_t linesize = av_image_get_linesize(picref->format, picref->video->w, plane); | ||
| 51 | plane_crc[plane] = av_adler32_update(0 , picref->data[plane], linesize); | ||
| 52 | crc = av_adler32_update(crc, picref->data[plane], linesize); | ||
| 53 | } | ||
| 54 | |||
| 55 | av_log(ctx, AV_LOG_INFO, | ||
| 56 | "n:%d pts:%"PRId64" pts_time:%f pos:%"PRId64" " | ||
| 57 | "fmt:%s sar:%d/%d s:%dx%d i:%c iskey:%d type:%c " | ||
| 58 | "crc:%u plane_crc:[%u %u %u %u]\n", | ||
| 59 | showinfo->frame, | ||
| 60 | picref->pts, picref ->pts * av_q2d(inlink->time_base), picref->pos, | ||
| 61 | av_pix_fmt_descriptors[picref->format].name, | ||
| 62 | picref->video->pixel_aspect.num, picref->video->pixel_aspect.den, | ||
| 63 | picref->video->w, picref->video->h, | ||
| 64 | !picref->video->interlaced ? 'P' : /* Progressive */ | ||
| 65 | picref->video->top_field_first ? 'T' : 'B', /* Top / Bottom */ | ||
| 66 | picref->video->key_frame, | ||
| 67 | av_get_picture_type_char(picref->video->pict_type), | ||
| 68 | crc, plane_crc[0], plane_crc[1], plane_crc[2], plane_crc[3]); | ||
| 69 | |||
| 70 | showinfo->frame++; | ||
| 71 | avfilter_end_frame(inlink->dst->outputs[0]); | ||
| 72 | } | ||
| 73 | |||
| 74 | AVFilter avfilter_vf_showinfo = { | ||
| 75 | .name = "showinfo", | ||
| 76 | .description = NULL_IF_CONFIG_SMALL("Show textual information for each video frame."), | ||
| 77 | |||
| 78 | .priv_size = sizeof(ShowInfoContext), | ||
| 79 | .init = init, | ||
| 80 | |||
| 81 | .inputs = (AVFilterPad[]) {{ .name = "default", | ||
| 82 | .type = AVMEDIA_TYPE_VIDEO, | ||
| 83 | .get_video_buffer = avfilter_null_get_video_buffer, | ||
| 84 | .start_frame = avfilter_null_start_frame, | ||
| 85 | .end_frame = end_frame, | ||
| 86 | .min_perms = AV_PERM_READ, }, | ||
| 87 | { .name = NULL}}, | ||
| 88 | |||
| 89 | .outputs = (AVFilterPad[]) {{ .name = "default", | ||
| 90 | .type = AVMEDIA_TYPE_VIDEO }, | ||
| 91 | { .name = NULL}}, | ||
| 92 | }; | ||