[FFmpeg-soc] [soc]: r1932 - libavfilter/vf_scale.c
Bobby Bingham
uhmmmm at gmail.com
Thu Feb 28 00:42:17 CET 2008
On Thu, 28 Feb 2008 00:18:59 +0100 (CET)
koorogi <subversion at mplayerhq.hu> wrote:
> Author: koorogi
> Date: Thu Feb 28 00:18:58 2008
> New Revision: 1932
>
> Log:
> Slice support for vf_scale.
>
>
> Modified:
> libavfilter/vf_scale.c
>
> Modified: libavfilter/vf_scale.c
> ==============================================================================
> --- libavfilter/vf_scale.c (original)
> +++ libavfilter/vf_scale.c Thu Feb 28 00:18:58 2008
> @@ -34,6 +34,8 @@ typedef struct
> * -1 = keep original aspect
> */
> int w, h;
> +
> + int sliceY; ///< top of current output slice
> } ScaleContext;
>
> static int init(AVFilterContext *ctx, const char *args, void *opaque)
> @@ -110,6 +112,7 @@ static int config_props(AVFilterLink *li
>
> static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
> {
> + ScaleContext *scale = link->dst->priv;
> AVFilterLink *out = link->dst->outputs[0];
>
> out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE);
> @@ -122,22 +125,20 @@ static void start_frame(AVFilterLink *li
> FFMAX(out->outpic->pixel_aspect.num,
> out->outpic->pixel_aspect.den));
> avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
> -}
>
> + scale->sliceY = 0;
> +}
>
> -/* TODO: figure out the swscale API well enough to scale slice at a
> time */ -static void end_frame(AVFilterLink *link)
> +static void draw_slice(AVFilterLink *link, int y, int h)
> {
> ScaleContext *scale = link->dst->priv;
> + int outH;
>
> - sws_scale(scale->sws, link->cur_pic->data,
> link->cur_pic->linesize, 0,
> - link->cur_pic->h, link->dst->outputs[0]->outpic->data,
> + outH = sws_scale(scale->sws, link->cur_pic->data,
> link->cur_pic->linesize,
> + y, h, link->dst->outputs[0]->outpic->data,
> link->dst->outputs[0]->outpic->linesize);
> - avfilter_draw_slice(link->dst->outputs[0], 0,
> link->dst->outputs[0]->h);
> - avfilter_end_frame(link->dst->outputs[0]);
> -
> - avfilter_unref_pic(link->cur_pic);
> - avfilter_unref_pic(link->dst->outputs[0]->outpic);
> + avfilter_draw_slice(link->dst->outputs[0], scale->sliceY, outH);
> + scale->sliceY += outH;
> }
>
> AVFilter avfilter_vf_scale =
> @@ -154,7 +155,7 @@ AVFilter avfilter_vf_scale =
> .inputs = (AVFilterPad[]) {{ .name = "default",
> .type =
> CODEC_TYPE_VIDEO, .start_frame = start_frame,
> - .end_frame = end_frame,
> + .draw_slice = draw_slice,
> .min_perms =
> AV_PERM_READ, }, { .name = NULL}},
> .outputs = (AVFilterPad[]) {{ .name = "default",
After some more testing, it seems this doesn't work right with
--enable-swscaler. I'll take a closer look at it later tonight.
--
Bobby Bingham
Never trust atoms. Or anything made of atoms.
このメールは再利用されたバイトでできている。
More information about the FFmpeg-soc
mailing list