[FFmpeg-soc] [soc]: r5411 - in libavfilter: checkout.sh diffs/01_ffplay_filters.diff diffs/02_ffmpeg_filters.diff diffs/03_vfilters_doc.diff doc vf_crop.c vf_null.c vf_overlay.c vf_scale.c vf_transpose.c vsrc_b...
stefano
subversion at mplayerhq.hu
Sun Oct 18 11:17:56 CEST 2009
Author: stefano
Date: Sun Oct 18 11:17:56 2009
New Revision: 5411
Log:
Update to FFmpeg r20272.
Added:
libavfilter/diffs/03_vfilters_doc.diff
Deleted:
libavfilter/doc/
Modified:
libavfilter/checkout.sh
libavfilter/diffs/01_ffplay_filters.diff
libavfilter/diffs/02_ffmpeg_filters.diff
libavfilter/vf_crop.c
libavfilter/vf_null.c
libavfilter/vf_overlay.c
libavfilter/vf_scale.c
libavfilter/vf_transpose.c
libavfilter/vsrc_buffer.c
libavfilter/vsrc_movie.c
Modified: libavfilter/checkout.sh
==============================================================================
--- libavfilter/checkout.sh Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/checkout.sh Sun Oct 18 11:17:56 2009 (r5411)
@@ -1,7 +1,7 @@
#! /bin/sh
echo "checking out pristine ffmpeg"
-svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk/ ffmpeg -r20198
+svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk/ ffmpeg -r20272
echo "downloading the corresponding version of swscale"
cd ffmpeg/libswscale
@@ -13,6 +13,3 @@ for diff in $(ls $(pwd)/diffs/*.diff); d
echo "copying files to libavfilter"
find $(pwd) -maxdepth 1 -type f -not -name $(basename $0) -exec cp {} ffmpeg/libavfilter \;
-
-echo "copying libavfilter doc files"
-cp -p $(pwd)/doc/* ffmpeg/doc
Modified: libavfilter/diffs/01_ffplay_filters.diff
==============================================================================
--- libavfilter/diffs/01_ffplay_filters.diff Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/diffs/01_ffplay_filters.diff Sun Oct 18 11:17:56 2009 (r5411)
@@ -1,6 +1,6 @@
Index: ffplay.c
===================================================================
---- ffplay.c (revision 20198)
+--- ffplay.c (revision 20272)
+++ ffplay.c (working copy)
@@ -29,6 +29,12 @@
#include "libavcodec/colorspace.h"
@@ -288,15 +288,15 @@ Index: ffplay.c
+
+ /* FIXME: until I figure out how to hook everything up to the codec
+ * right, we're just copying the entire frame. */
-+ picref = avfilter_get_video_buffer(link, AV_PERM_WRITE);
++ picref = avfilter_get_video_buffer(link, AV_PERM_WRITE, link->w, link->h);
+ av_picture_copy((AVPicture *)&picref->data, (AVPicture *)priv->frame,
-+ picref->pic->format, picref->w, picref->h);
++ picref->pic->format, link->w, link->h);
+ av_free_packet(&pkt);
+
+ picref->pts = pts;
+ picref->pixel_aspect = priv->is->video_st->codec->sample_aspect_ratio;
+ avfilter_start_frame(link, avfilter_ref_pic(picref, ~0));
-+ avfilter_draw_slice(link, 0, picref->h);
++ avfilter_draw_slice(link, 0, link->h);
+ avfilter_end_frame(link);
+ avfilter_unref_pic(picref);
+
Modified: libavfilter/diffs/02_ffmpeg_filters.diff
==============================================================================
--- libavfilter/diffs/02_ffmpeg_filters.diff Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/diffs/02_ffmpeg_filters.diff Sun Oct 18 11:17:56 2009 (r5411)
@@ -1,6 +1,6 @@
Index: ffmpeg.c
===================================================================
---- ffmpeg.c (revision 20198)
+--- ffmpeg.c (revision 20272)
+++ ffmpeg.c (working copy)
@@ -41,6 +41,13 @@
#include "libavutil/avstring.h"
Added: libavfilter/diffs/03_vfilters_doc.diff
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ libavfilter/diffs/03_vfilters_doc.diff Sun Oct 18 11:17:56 2009 (r5411)
@@ -0,0 +1,191 @@
+Index: doc/vfilters.texi
+===================================================================
+--- doc/vfilters.texi (revision 20272)
++++ doc/vfilters.texi (working copy)
+@@ -78,4 +78,186 @@
+
+ Below is a description of the currently available video filters.
+
++ at section crop
++
++ at example
++./ffmpeg -i in.avi -vfilters "crop=0:0:-1:240" out.avi
++ at end example
++
++Crop the input video to x:y:width:height.
++The -1 in width or height means that dimension in the input video.
++
++ at section drawbox
++
++ at example
++./ffmpeg -i in.avi -vfilters "drawbox=10:20:200:60:red" out.avi
++ at end example
++
++Draw a box with x:y:width:height dimensions in a chosen color.
++
++ at section fifo
++
++ at example
++./ffmpeg -i in.avi -vfilters "fifo" out.avi
++ at end example
++
++ at section format
++
++ at example
++./ffmpeg -i in.avi -vfilters "format=yuv420p" out.avi
++ at end example
++
++Convert video to one of the specified filters formats (libavfilter will
++try to pick one that is supported as an input to the next filter).
++
++ at section fps
++
++ at example
++./ffmpeg -i in.avi -vfilters "fps=30000:1001" out.avi
++ at end example
++
++Modifies the framerate of the input video to a chosen one.
++
++ at section hflip
++
++ at example
++./ffmpeg -i in.avi -vfilters "hflip" out.avi
++ at end example
++
++Flip the video horizontally.
++
++ at section negate
++
++ at example
++./ffmpeg -i in.avi -vfilters "negate" out.avi
++ at end example
++
++Convert a video to its negative.
++
++ at section noformat
++
++ at example
++./ffmpeg -i in.avi -vfilters "noformat=yuv420p" out.avi
++ at end example
++
++Force libavfilter not to send any of the specified pixel formats to the
++next filter.
++
++ at section overlay
++
++Overlay one video on top of another (see the example in the introduction
++section).
++Be aware that frames are taken
++from each input video in timestamp order, hence, if their initial
++timestamps differ, it is a a good idea to pass the two
++inputs through a @var{setpts=PTS-STARTPTS} filter to have them
++begin in the same zero timestamp, as it does the example for
++the @var{movie} filter.
++
++Parameters to the filter are separated by a colon. The first parameter
++is the x coordinate of the overlay, the second parameter is the y
++coordinate. The parameters need not be constant expressions, but may
++be expressions containing the names @var{mainW}, @var{mainH},
++ at var{overlayW} and @var{overlayH}, for the size of the first and second
++input video, respectively. For example,
++ at example
++overlay=mainW-overlayW-10:mainH-overlayH-10
++ at end example
++can be used to draw the overlay at 10 pixels from the bottom right
++corner of the main video.
++
++ at section rotate
++
++ at example
++./ffmpeg -i in.avi -vfilters "rotate=30" out.avi
++ at end example
++
++Rotate video by a chosen amount in degrees. By default, 45 degrees.
++
++ at section scale
++
++ at example
++./ffmpeg -i in.avi -vfilters "scale=200:100:sws_flags=bicubic" out.avi
++ at end example
++
++Scale to new width/height and/or convert pixel format.
++The two first parameter are the desired width and height.
++If the third parameter @var{sws_flags} is absent, then @var{bilinear} is assumed.
++
++ at section setpts
++
++ at example
++# Start counting PTS from zero
++ffmpeg -i input.avi -vfilters setpts=PTS-STARTPTS output.avi
++
++# Fast motion
++ffmpeg -i input.avi -vfilters setpts=0.5*PTS output.avi
++
++# Fixed rate 25 fps
++ffmpeg -i input.avi -vfilters setpts=N*AVTB/25 output.avi
++
++# Fixed rate 25 fps with some jitter
++ffmpeg -i input.avi -vfilters 'setpts=AVTB/25*(N+0.05*sin(N*2*PI/25))' output.avi
++ at end example
++
++Modifies the presentation timestamp (PTS) of the input video.
++
++ at section slicify
++
++ at example
++./ffmpeg -i in.avi -vfilters "slicify=32" out.avi
++ at end example
++
++Pass on input video to next video filter as multiple slices.
++The parameter is the slice height (16 if not specified).
++Adding this in the beginning of filter chains should make filtering
++faster due to the better use of the memory cache.
++
++ at section split
++
++See the example in the introduction section.
++The input video is passed on to two outputs.
++
++ at section transpose
++
++ at example
++./ffmpeg -i in.avi -vfilters "transpose" out.avi
++ at end example
++
++Transpose (line => column) input video to next video filter.
++
++ at section vflip
++
++ at example
++./ffmpeg -i in.avi -vfilters "vflip" out.avi
++ at end example
++
++Flip the video vertically.
++
++ at section buffer
++
++This input filter is used by the client application to feed pictures to
++the filter chain. See ffmpeg.c for an usage example.
++
++ at section movie
++
++The parameters of the movie filter are
++ at example
++ seekpoint in microseconds : string format : string filename
++ at end example
++
++We can overlay a second movie on top of a main one as in this graph:
++
++ at example
++ input -----------> deltapts0 --> overlay --> output
++ ^
++ movie --> scale--> deltapts1 ------|
++ at end example
++
++To do that
++
++ at example
++ffmpeg -i in.avi -s 240x320 -vfilters "[in]setpts=PTS-STARTPTS, [T1]overlay=16:16[out]; movie=3200000:avi:in.avi, scale=180:144, setpts=PTS-STARTPTS[T1]" -y out.avi
++ at end example
++
+ @bye
Modified: libavfilter/vf_crop.c
==============================================================================
--- libavfilter/vf_crop.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vf_crop.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -99,6 +99,11 @@ static int config_output(AVFilterLink *l
return 0;
}
+static AVFilterPicRef *get_video_buffer(AVFilterLink *link, int perms, int w, int h)
+{
+ return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h);
+}
+
static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
{
CropContext *crop = link->dst->priv;
@@ -150,6 +155,7 @@ AVFilter avfilter_vf_crop =
.type = CODEC_TYPE_VIDEO,
.start_frame = start_frame,
.draw_slice = draw_slice,
+ .get_video_buffer= get_video_buffer,
.config_props = config_input, },
{ .name = NULL}},
.outputs = (AVFilterPad[]) {{ .name = "default",
Modified: libavfilter/vf_null.c
==============================================================================
--- libavfilter/vf_null.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vf_null.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -29,6 +29,11 @@ static void start_frame(AVFilterLink *in
avfilter_start_frame(in_link->dst->outputs[0], picref);
}
+static AVFilterPicRef *get_video_buffer(AVFilterLink *link, int perms, int w, int h)
+{
+ return avfilter_get_video_buffer(link->dst->outputs[0], perms, w, h);
+}
+
static void end_frame(AVFilterLink *in_link)
{
avfilter_end_frame(in_link->dst->outputs[0]);
@@ -42,6 +47,7 @@ AVFilter avfilter_vf_null =
.inputs = (AVFilterPad[]) {{ .name = "default",
.type = CODEC_TYPE_VIDEO,
+ .get_video_buffer= get_video_buffer,
.start_frame = start_frame,
.end_frame = end_frame },
{ .name = NULL}},
Modified: libavfilter/vf_overlay.c
==============================================================================
--- libavfilter/vf_overlay.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vf_overlay.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -249,7 +249,7 @@ static int request_frame(AVFilterLink *l
}
/* we draw the output frame */
- pic = avfilter_get_video_buffer(link, AV_PERM_WRITE);
+ pic = avfilter_get_video_buffer(link, AV_PERM_WRITE, link->w, link->h);
if(over->pics[0][0]) {
pic->pixel_aspect = over->pics[0][0]->pixel_aspect;
copy_image(pic, 0, 0, over->pics[0][0], link->w, link->h,
Modified: libavfilter/vf_scale.c
==============================================================================
--- libavfilter/vf_scale.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vf_scale.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -99,6 +99,11 @@ static int query_formats(AVFilterContext
return 0;
}
+static AVFilterPicRef *get_video_buffer(AVFilterLink *link, int perms, int w, int h)
+{
+ return avfilter_default_get_video_buffer(link, perms, w, h);
+}
+
static int config_props(AVFilterLink *link)
{
ScaleContext *scale = link->src->priv;
@@ -130,7 +135,7 @@ static void start_frame(AVFilterLink *li
AVFilterLink *out = link->dst->outputs[0];
int64_t gcd;
- out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE);
+ out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h);
out->outpic->pts = picref->pts;
out->outpic->pixel_aspect.num = picref->pixel_aspect.num * out->h * link->w;
@@ -188,6 +193,7 @@ AVFilter avfilter_vf_scale =
.inputs = (AVFilterPad[]) {{ .name = "default",
.type = CODEC_TYPE_VIDEO,
+ .get_video_buffer= get_video_buffer,
.start_frame = start_frame,
.draw_slice = draw_slice,
.min_perms = AV_PERM_READ, },
Modified: libavfilter/vf_transpose.c
==============================================================================
--- libavfilter/vf_transpose.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vf_transpose.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -90,7 +90,7 @@ static void start_frame(AVFilterLink *li
{
AVFilterLink *out = link->dst->outputs[0];
- out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE);
+ out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, link->w, link->h);
out->outpic->pts = picref->pts;
out->outpic->pixel_aspect.num = picref->pixel_aspect.den;
Modified: libavfilter/vsrc_buffer.c
==============================================================================
--- libavfilter/vsrc_buffer.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vsrc_buffer.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -96,15 +96,16 @@ static int request_frame(AVFilterLink *l
/* This picture will be needed unmodified later for decoding the next
* frame */
picref = avfilter_get_video_buffer(link, AV_PERM_WRITE | AV_PERM_PRESERVE |
- AV_PERM_REUSE2);
+ AV_PERM_REUSE2,
+ link->w, link->h);
- memcpy(picref->data , c->frame.data , sizeof(c->frame.data ));
- memcpy(picref->linesize, c->frame.linesize, sizeof(c->frame.linesize));
+ av_picture_copy((AVPicture *)&picref->data, (AVPicture *)&c->frame,
+ picref->pic->format, link->w, link->h);
picref->pts = c->pts;
picref->pixel_aspect = c->pixel_aspect;
avfilter_start_frame(link, avfilter_ref_pic(picref, ~0));
- avfilter_draw_slice(link, 0, picref->h);
+ avfilter_draw_slice(link, 0, link->h);
avfilter_end_frame(link);
avfilter_unref_pic(picref);
Modified: libavfilter/vsrc_movie.c
==============================================================================
--- libavfilter/vsrc_movie.c Wed Oct 14 02:45:13 2009 (r5410)
+++ libavfilter/vsrc_movie.c Sun Oct 18 11:17:56 2009 (r5411)
@@ -177,7 +177,8 @@ int movie_get_frame(AVFilterLink *link)
if(!mv->pic)
mv->pic = avfilter_get_video_buffer(link, AV_PERM_WRITE |
AV_PERM_PRESERVE |
- AV_PERM_REUSE2);
+ AV_PERM_REUSE2,
+ link->w, link->h);
//av_log(link->src, AV_LOG_INFO, "movie_get_frame() w:%d h:%d\n", mv->w, mv->h);
// Get frame
More information about the FFmpeg-soc
mailing list