| @@ -150,6 +150,7 @@ typedef struct Stereo3DContext { | |||
| AVFrame *prev; | |||
| int blanks; | |||
| int in_off_left[4], in_off_right[4]; | |||
| AVRational aspect; | |||
| Stereo3DDSPContext dsp; | |||
| } Stereo3DContext; | |||
| @@ -359,11 +360,11 @@ static int config_output(AVFilterLink *outlink) | |||
| AVFilterContext *ctx = outlink->src; | |||
| AVFilterLink *inlink = ctx->inputs[0]; | |||
| Stereo3DContext *s = ctx->priv; | |||
| AVRational aspect = inlink->sample_aspect_ratio; | |||
| AVRational fps = inlink->frame_rate; | |||
| AVRational tb = inlink->time_base; | |||
| const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(outlink->format); | |||
| int ret; | |||
| s->aspect = inlink->sample_aspect_ratio; | |||
| switch (s->in.format) { | |||
| case INTERLEAVE_COLS_LR: | |||
| @@ -404,25 +405,25 @@ static int config_output(AVFilterLink *outlink) | |||
| switch (s->in.format) { | |||
| case SIDE_BY_SIDE_2_LR: | |||
| aspect.num *= 2; | |||
| s->aspect.num *= 2; | |||
| case SIDE_BY_SIDE_LR: | |||
| s->width = inlink->w / 2; | |||
| s->in.off_right = s->width; | |||
| break; | |||
| case SIDE_BY_SIDE_2_RL: | |||
| aspect.num *= 2; | |||
| s->aspect.num *= 2; | |||
| case SIDE_BY_SIDE_RL: | |||
| s->width = inlink->w / 2; | |||
| s->in.off_left = s->width; | |||
| break; | |||
| case ABOVE_BELOW_2_LR: | |||
| aspect.den *= 2; | |||
| s->aspect.den *= 2; | |||
| case ABOVE_BELOW_LR: | |||
| s->in.row_right = | |||
| s->height = inlink->h / 2; | |||
| break; | |||
| case ABOVE_BELOW_2_RL: | |||
| aspect.den *= 2; | |||
| s->aspect.den *= 2; | |||
| case ABOVE_BELOW_RL: | |||
| s->in.row_left = | |||
| s->height = inlink->h / 2; | |||
| @@ -486,19 +487,19 @@ static int config_output(AVFilterLink *outlink) | |||
| break; | |||
| } | |||
| case SIDE_BY_SIDE_2_LR: | |||
| aspect.den *= 2; | |||
| s->aspect.den *= 2; | |||
| case SIDE_BY_SIDE_LR: | |||
| s->out.width = s->width * 2; | |||
| s->out.off_right = s->width; | |||
| break; | |||
| case SIDE_BY_SIDE_2_RL: | |||
| aspect.den *= 2; | |||
| s->aspect.den *= 2; | |||
| case SIDE_BY_SIDE_RL: | |||
| s->out.width = s->width * 2; | |||
| s->out.off_left = s->width; | |||
| break; | |||
| case ABOVE_BELOW_2_LR: | |||
| aspect.num *= 2; | |||
| s->aspect.num *= 2; | |||
| case ABOVE_BELOW_LR: | |||
| s->out.height = s->height * 2; | |||
| s->out.row_right = s->height; | |||
| @@ -514,7 +515,7 @@ static int config_output(AVFilterLink *outlink) | |||
| s->out.row_right = s->height + s->blanks; | |||
| break; | |||
| case ABOVE_BELOW_2_RL: | |||
| aspect.num *= 2; | |||
| s->aspect.num *= 2; | |||
| case ABOVE_BELOW_RL: | |||
| s->out.height = s->height * 2; | |||
| s->out.row_left = s->height; | |||
| @@ -576,7 +577,7 @@ static int config_output(AVFilterLink *outlink) | |||
| outlink->h = s->out.height; | |||
| outlink->frame_rate = fps; | |||
| outlink->time_base = tb; | |||
| outlink->sample_aspect_ratio = aspect; | |||
| outlink->sample_aspect_ratio = s->aspect; | |||
| if ((ret = av_image_fill_linesizes(s->linesize, outlink->format, s->width)) < 0) | |||
| return ret; | |||
| @@ -1075,6 +1076,7 @@ copy: | |||
| av_frame_free(&s->prev); | |||
| av_frame_free(&inpicref); | |||
| } | |||
| out->sample_aspect_ratio = s->aspect; | |||
| return ff_filter_frame(outlink, out); | |||
| } | |||