Commit 50e66726 authored by Clément Bœsch's avatar Clément Bœsch

lavfi: use ceil right shift for chroma width/height.

This should fix several issues with odd dimensions inputs.

lut, vflip, pad and crop video filters also need to be checked for such
issues. It's possible sws is also affected.
parent d751a252
...@@ -372,8 +372,8 @@ static void blend_frame(AVFilterContext *ctx, ...@@ -372,8 +372,8 @@ static void blend_frame(AVFilterContext *ctx,
for (plane = 0; plane < b->nb_planes; plane++) { for (plane = 0; plane < b->nb_planes; plane++) {
int hsub = plane == 1 || plane == 2 ? b->hsub : 0; int hsub = plane == 1 || plane == 2 ? b->hsub : 0;
int vsub = plane == 1 || plane == 2 ? b->vsub : 0; int vsub = plane == 1 || plane == 2 ? b->vsub : 0;
int outw = dst_buf->width >> hsub; int outw = FF_CEIL_RSHIFT(dst_buf->width, hsub);
int outh = dst_buf->height >> vsub; int outh = FF_CEIL_RSHIFT(dst_buf->height, vsub);
uint8_t *dst = dst_buf->data[plane]; uint8_t *dst = dst_buf->data[plane];
uint8_t *top = top_buf->data[plane]; uint8_t *top = top_buf->data[plane];
uint8_t *bottom = bottom_buf->data[plane]; uint8_t *bottom = bottom_buf->data[plane];
......
...@@ -302,7 +302,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -302,7 +302,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterLink *outlink = inlink->dst->outputs[0];
AVFrame *out; AVFrame *out;
int plane; int plane;
int cw = inlink->w >> boxblur->hsub, ch = in->height >> boxblur->vsub; int cw = FF_CEIL_RSHIFT(inlink->w, boxblur->hsub), ch = FF_CEIL_RSHIFT(in->height, boxblur->vsub);
int w[4] = { inlink->w, cw, cw, inlink->w }; int w[4] = { inlink->w, cw, cw, inlink->w };
int h[4] = { in->height, ch, ch, in->height }; int h[4] = { in->height, ch, ch, in->height };
......
...@@ -92,8 +92,8 @@ static void calc_diffs(const DecimateContext *dm, struct qitem *q, ...@@ -92,8 +92,8 @@ static void calc_diffs(const DecimateContext *dm, struct qitem *q,
const int linesize2 = f2->linesize[plane]; const int linesize2 = f2->linesize[plane];
const uint8_t *f1p = f1->data[plane]; const uint8_t *f1p = f1->data[plane];
const uint8_t *f2p = f2->data[plane]; const uint8_t *f2p = f2->data[plane];
int width = plane ? f1->width >> dm->hsub : f1->width; int width = plane ? FF_CEIL_RSHIFT(f1->width, dm->hsub) : f1->width;
int height = plane ? f1->height >> dm->vsub : f1->height; int height = plane ? FF_CEIL_RSHIFT(f1->height, dm->vsub) : f1->height;
int hblockx = dm->blockx / 2; int hblockx = dm->blockx / 2;
int hblocky = dm->blocky / 2; int hblocky = dm->blocky / 2;
......
...@@ -228,9 +228,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -228,9 +228,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
apply_delogo(out->data[plane], out->linesize[plane], apply_delogo(out->data[plane], out->linesize[plane],
in ->data[plane], in ->linesize[plane], in ->data[plane], in ->linesize[plane],
inlink->w>>hsub, inlink->h>>vsub, FF_CEIL_RSHIFT(inlink->w, hsub),
FF_CEIL_RSHIFT(inlink->h, vsub),
delogo->x>>hsub, delogo->y>>vsub, delogo->x>>hsub, delogo->y>>vsub,
delogo->w>>hsub, delogo->h>>vsub, FF_CEIL_RSHIFT(delogo->w, hsub),
FF_CEIL_RSHIFT(delogo->h, vsub),
delogo->band>>FFMIN(hsub, vsub), delogo->band>>FFMIN(hsub, vsub),
delogo->show, direct); delogo->show, direct);
} }
......
...@@ -171,8 +171,8 @@ static int config_output(AVFilterLink *outlink) ...@@ -171,8 +171,8 @@ static int config_output(AVFilterLink *outlink)
const int output = outlink->srcpad - ctx->output_pads; const int output = outlink->srcpad - ctx->output_pads;
if (e->map[output] == 1 || e->map[output] == 2) { if (e->map[output] == 1 || e->map[output] == 2) {
outlink->h = inlink->h >> desc->log2_chroma_h; outlink->h = FF_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
outlink->w = inlink->w >> desc->log2_chroma_w; outlink->w = FF_CEIL_RSHIFT(inlink->w, desc->log2_chroma_w);
} }
return 0; return 0;
......
...@@ -233,8 +233,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) ...@@ -233,8 +233,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
/* chroma planes */ /* chroma planes */
for (plane = 1; plane < 3; plane++) { for (plane = 1; plane < 3; plane++) {
for (i = 0; i < frame->height; i++) { for (i = 0; i < frame->height; i++) {
const int width = FF_CEIL_RSHIFT(inlink->w, fade->hsub);
p = frame->data[plane] + (i >> fade->vsub) * frame->linesize[plane]; p = frame->data[plane] + (i >> fade->vsub) * frame->linesize[plane];
for (j = 0; j < inlink->w >> fade->hsub; j++) { for (j = 0; j < width; j++) {
/* 8421367 = ((128 << 1) + 1) << 15. It is an integer /* 8421367 = ((128 << 1) + 1) << 15. It is an integer
* representation of 128.5. The .5 is for rounding * representation of 128.5. The .5 is for rounding
* purposes. */ * purposes. */
......
...@@ -153,12 +153,12 @@ AVFILTER_DEFINE_CLASS(fieldmatch); ...@@ -153,12 +153,12 @@ AVFILTER_DEFINE_CLASS(fieldmatch);
static int get_width(const FieldMatchContext *fm, const AVFrame *f, int plane) static int get_width(const FieldMatchContext *fm, const AVFrame *f, int plane)
{ {
return plane ? f->width >> fm->hsub : f->width; return plane ? FF_CEIL_RSHIFT(f->width, fm->hsub) : f->width;
} }
static int get_height(const FieldMatchContext *fm, const AVFrame *f, int plane) static int get_height(const FieldMatchContext *fm, const AVFrame *f, int plane)
{ {
return plane ? f->height >> fm->vsub : f->height; return plane ? FF_CEIL_RSHIFT(f->height, fm->vsub) : f->height;
} }
static int64_t luma_abs_diff(const AVFrame *f1, const AVFrame *f2) static int64_t luma_abs_diff(const AVFrame *f1, const AVFrame *f2)
...@@ -270,8 +270,8 @@ static int calc_combed_score(const FieldMatchContext *fm, const AVFrame *src) ...@@ -270,8 +270,8 @@ static int calc_combed_score(const FieldMatchContext *fm, const AVFrame *src)
uint8_t *cmkp = fm->cmask_data[0]; uint8_t *cmkp = fm->cmask_data[0];
uint8_t *cmkpU = fm->cmask_data[1]; uint8_t *cmkpU = fm->cmask_data[1];
uint8_t *cmkpV = fm->cmask_data[2]; uint8_t *cmkpV = fm->cmask_data[2];
const int width = src->width >> fm->hsub; const int width = FF_CEIL_RSHIFT(src->width, fm->hsub);
const int height = src->height >> fm->vsub; const int height = FF_CEIL_RSHIFT(src->height, fm->vsub);
const int cmk_linesize = fm->cmask_linesize[0] << 1; const int cmk_linesize = fm->cmask_linesize[0] << 1;
const int cmk_linesizeUV = fm->cmask_linesize[2]; const int cmk_linesizeUV = fm->cmask_linesize[2];
uint8_t *cmkpp = cmkp - (cmk_linesize>>1); uint8_t *cmkpp = cmkp - (cmk_linesize>>1);
......
...@@ -66,8 +66,8 @@ static inline double getpix(void *priv, double x, double y, int plane) ...@@ -66,8 +66,8 @@ static inline double getpix(void *priv, double x, double y, int plane)
AVFrame *picref = geq->picref; AVFrame *picref = geq->picref;
const uint8_t *src = picref->data[plane]; const uint8_t *src = picref->data[plane];
const int linesize = picref->linesize[plane]; const int linesize = picref->linesize[plane];
const int w = picref->width >> ((plane == 1 || plane == 2) ? geq->hsub : 0); const int w = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(picref->width, geq->hsub) : picref->width;
const int h = picref->height >> ((plane == 1 || plane == 2) ? geq->vsub : 0); const int h = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(picref->height, geq->vsub) : picref->height;
if (!src) if (!src)
return 0; return 0;
...@@ -209,8 +209,8 @@ static int geq_filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -209,8 +209,8 @@ static int geq_filter_frame(AVFilterLink *inlink, AVFrame *in)
int x, y; int x, y;
uint8_t *dst = out->data[plane]; uint8_t *dst = out->data[plane];
const int linesize = out->linesize[plane]; const int linesize = out->linesize[plane];
const int w = inlink->w >> ((plane == 1 || plane == 2) ? geq->hsub : 0); const int w = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(inlink->w, geq->hsub) : inlink->w;
const int h = inlink->h >> ((plane == 1 || plane == 2) ? geq->vsub : 0); const int h = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(inlink->h, geq->vsub) : inlink->h;
values[VAR_W] = w; values[VAR_W] = w;
values[VAR_H] = h; values[VAR_H] = h;
......
...@@ -77,7 +77,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -77,7 +77,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
AVFilterLink *outlink = ctx->outputs[0]; AVFilterLink *outlink = ctx->outputs[0];
AVFrame *out; AVFrame *out;
uint8_t *inrow, *outrow; uint8_t *inrow, *outrow;
int i, j, plane, step, hsub, vsub; int i, j, plane, step;
out = ff_get_video_buffer(outlink, outlink->w, outlink->h); out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!out) { if (!out) {
...@@ -91,16 +91,16 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -91,16 +91,16 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
memcpy(out->data[1], in->data[1], AVPALETTE_SIZE); memcpy(out->data[1], in->data[1], AVPALETTE_SIZE);
for (plane = 0; plane < 4 && in->data[plane]; plane++) { for (plane = 0; plane < 4 && in->data[plane]; plane++) {
const int width = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(inlink->w, flip->hsub) : inlink->w;
const int height = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(inlink->h, flip->vsub) : inlink->h;
step = flip->max_step[plane]; step = flip->max_step[plane];
hsub = (plane == 1 || plane == 2) ? flip->hsub : 0;
vsub = (plane == 1 || plane == 2) ? flip->vsub : 0;
outrow = out->data[plane]; outrow = out->data[plane];
inrow = in ->data[plane] + ((inlink->w >> hsub) - 1) * step; inrow = in ->data[plane] + (width - 1) * step;
for (i = 0; i < in->height >> vsub; i++) { for (i = 0; i < height; i++) {
switch (step) { switch (step) {
case 1: case 1:
for (j = 0; j < (inlink->w >> hsub); j++) for (j = 0; j < width; j++)
outrow[j] = inrow[-j]; outrow[j] = inrow[-j];
break; break;
...@@ -108,7 +108,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -108,7 +108,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
{ {
uint16_t *outrow16 = (uint16_t *)outrow; uint16_t *outrow16 = (uint16_t *)outrow;
uint16_t * inrow16 = (uint16_t *) inrow; uint16_t * inrow16 = (uint16_t *) inrow;
for (j = 0; j < (inlink->w >> hsub); j++) for (j = 0; j < width; j++)
outrow16[j] = inrow16[-j]; outrow16[j] = inrow16[-j];
} }
break; break;
...@@ -117,7 +117,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -117,7 +117,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
{ {
uint8_t *in = inrow; uint8_t *in = inrow;
uint8_t *out = outrow; uint8_t *out = outrow;
for (j = 0; j < (inlink->w >> hsub); j++, out += 3, in -= 3) { for (j = 0; j < width; j++, out += 3, in -= 3) {
int32_t v = AV_RB24(in); int32_t v = AV_RB24(in);
AV_WB24(out, v); AV_WB24(out, v);
} }
...@@ -128,13 +128,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -128,13 +128,13 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
{ {
uint32_t *outrow32 = (uint32_t *)outrow; uint32_t *outrow32 = (uint32_t *)outrow;
uint32_t * inrow32 = (uint32_t *) inrow; uint32_t * inrow32 = (uint32_t *) inrow;
for (j = 0; j < (inlink->w >> hsub); j++) for (j = 0; j < width; j++)
outrow32[j] = inrow32[-j]; outrow32[j] = inrow32[-j];
} }
break; break;
default: default:
for (j = 0; j < (inlink->w >> hsub); j++) for (j = 0; j < width; j++)
memcpy(outrow + j*step, inrow - j*step, step); memcpy(outrow + j*step, inrow - j*step, step);
} }
......
...@@ -297,8 +297,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -297,8 +297,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
for (c = 0; c < 3; c++) { for (c = 0; c < 3; c++) {
denoise(hqdn3d, in->data[c], out->data[c], denoise(hqdn3d, in->data[c], out->data[c],
hqdn3d->line, &hqdn3d->frame_prev[c], hqdn3d->line, &hqdn3d->frame_prev[c],
in->width >> (!!c * hqdn3d->hsub), FF_CEIL_RSHIFT(in->width, (!!c * hqdn3d->hsub)),
in->height >> (!!c * hqdn3d->vsub), FF_CEIL_RSHIFT(in->height, (!!c * hqdn3d->vsub)),
in->linesize[c], out->linesize[c], in->linesize[c], out->linesize[c],
hqdn3d->coefs[c?2:0], hqdn3d->coefs[c?3:1]); hqdn3d->coefs[c?2:0], hqdn3d->coefs[c?3:1]);
} }
......
...@@ -305,7 +305,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) ...@@ -305,7 +305,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
process_chrominance(outpic->data[1], outpic->data[2], outpic->linesize[1], process_chrominance(outpic->data[1], outpic->data[2], outpic->linesize[1],
inpic->data[1], inpic->data[2], inpic->linesize[1], inpic->data[1], inpic->data[2], inpic->linesize[1],
inlink->w >> hue->hsub, inlink->h >> hue->vsub, FF_CEIL_RSHIFT(inlink->w, hue->hsub),
FF_CEIL_RSHIFT(inlink->h, hue->vsub),
hue->hue_cos, hue->hue_sin); hue->hue_cos, hue->hue_sin);
if (!direct) if (!direct)
......
...@@ -110,7 +110,7 @@ static int config_input(AVFilterLink *inlink) ...@@ -110,7 +110,7 @@ static int config_input(AVFilterLink *inlink)
if ((ret = av_image_fill_linesizes(il->linesize, inlink->format, inlink->w)) < 0) if ((ret = av_image_fill_linesizes(il->linesize, inlink->format, inlink->w)) < 0)
return ret; return ret;
il->chroma_height = inlink->h >> desc->log2_chroma_h; il->chroma_height = FF_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
return 0; return 0;
} }
......
...@@ -131,7 +131,7 @@ static void copy_picture_field(AVFrame *src_frame, AVFrame *dst_frame, ...@@ -131,7 +131,7 @@ static void copy_picture_field(AVFrame *src_frame, AVFrame *dst_frame,
int plane, i, j; int plane, i, j;
for (plane = 0; plane < desc->nb_components; plane++) { for (plane = 0; plane < desc->nb_components; plane++) {
int lines = (plane == 1 || plane == 2) ? inlink->h >> vsub : inlink->h; int lines = (plane == 1 || plane == 2) ? FF_CEIL_RSHIFT(inlink->h, vsub) : inlink->h;
int linesize = av_image_get_linesize(inlink->format, inlink->w, plane); int linesize = av_image_get_linesize(inlink->format, inlink->w, plane);
uint8_t *dstp = dst_frame->data[plane]; uint8_t *dstp = dst_frame->data[plane];
const uint8_t *srcp = src_frame->data[plane]; const uint8_t *srcp = src_frame->data[plane];
......
...@@ -151,7 +151,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) ...@@ -151,7 +151,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
outpic->interlaced_frame = 0; outpic->interlaced_frame = 0;
for (plane = 0; inpic->data[plane] && plane < 4; plane++) { for (plane = 0; inpic->data[plane] && plane < 4; plane++) {
h = plane == 0 ? inlink->h : inlink->h >> kerndeint->vsub; h = plane == 0 ? inlink->h : FF_CEIL_RSHIFT(inlink->h, kerndeint->vsub);
bwidth = kerndeint->tmp_bwidth[plane]; bwidth = kerndeint->tmp_bwidth[plane];
srcp = srcp_saved = inpic->data[plane]; srcp = srcp_saved = inpic->data[plane];
......
...@@ -122,7 +122,8 @@ static int decimate_frame(AVFilterContext *ctx, ...@@ -122,7 +122,8 @@ static int decimate_frame(AVFilterContext *ctx,
int hsub = plane == 1 || plane == 2 ? decimate->hsub : 0; int hsub = plane == 1 || plane == 2 ? decimate->hsub : 0;
if (diff_planes(ctx, if (diff_planes(ctx,
cur->data[plane], ref->data[plane], ref->linesize[plane], cur->data[plane], ref->data[plane], ref->linesize[plane],
ref->width>>hsub, ref->height>>vsub)) FF_CEIL_RSHIFT(ref->width, hsub),
FF_CEIL_RSHIFT(ref->height, vsub)))
return 0; return 0;
} }
......
...@@ -193,7 +193,7 @@ static int config_input(AVFilterLink *inlink) ...@@ -193,7 +193,7 @@ static int config_input(AVFilterLink *inlink)
if ((ret = av_image_fill_linesizes(n->linesize, inlink->format, inlink->w)) < 0) if ((ret = av_image_fill_linesizes(n->linesize, inlink->format, inlink->w)) < 0)
return ret; return ret;
n->height[1] = n->height[2] = inlink->h >> desc->log2_chroma_h; n->height[1] = n->height[2] = FF_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
n->height[0] = n->height[3] = inlink->h; n->height[0] = n->height[3] = inlink->h;
return 0; return 0;
......
...@@ -46,7 +46,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) ...@@ -46,7 +46,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
for (plane = 0; plane < 4 && frame->data[plane]; plane++) { for (plane = 0; plane < 4 && frame->data[plane]; plane++) {
int64_t linesize = av_image_get_linesize(frame->format, frame->width, plane); int64_t linesize = av_image_get_linesize(frame->format, frame->width, plane);
uint8_t *data = frame->data[plane]; uint8_t *data = frame->data[plane];
int h = plane == 1 || plane == 2 ? inlink->h >> vsub : inlink->h; int h = plane == 1 || plane == 2 ? FF_CEIL_RSHIFT(inlink->h, vsub) : inlink->h;
if (linesize < 0) if (linesize < 0)
return linesize; return linesize;
......
...@@ -166,7 +166,8 @@ static int config_props(AVFilterLink *inlink) ...@@ -166,7 +166,8 @@ static int config_props(AVFilterLink *inlink)
alloc_sws_context(&sblur->luma, inlink->w, inlink->h, sblur->sws_flags); alloc_sws_context(&sblur->luma, inlink->w, inlink->h, sblur->sws_flags);
alloc_sws_context(&sblur->chroma, alloc_sws_context(&sblur->chroma,
inlink->w >> sblur->hsub, inlink->h >> sblur->vsub, FF_CEIL_RSHIFT(inlink->w, sblur->hsub),
FF_CEIL_RSHIFT(inlink->h, sblur->vsub),
sblur->sws_flags); sblur->sws_flags);
return 0; return 0;
...@@ -241,8 +242,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic) ...@@ -241,8 +242,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
SmartblurContext *sblur = inlink->dst->priv; SmartblurContext *sblur = inlink->dst->priv;
AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterLink *outlink = inlink->dst->outputs[0];
AVFrame *outpic; AVFrame *outpic;
int cw = inlink->w >> sblur->hsub; int cw = FF_CEIL_RSHIFT(inlink->w, sblur->hsub);
int ch = inlink->h >> sblur->vsub; int ch = FF_CEIL_RSHIFT(inlink->h, sblur->vsub);
outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h); outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!outpic) { if (!outpic) {
......
...@@ -129,7 +129,7 @@ static int config_input(AVFilterLink *inlink) ...@@ -129,7 +129,7 @@ static int config_input(AVFilterLink *inlink)
if ((ret = av_image_fill_linesizes(tc->stride, inlink->format, inlink->w)) < 0) if ((ret = av_image_fill_linesizes(tc->stride, inlink->format, inlink->w)) < 0)
return ret; return ret;
tc->planeheight[1] = tc->planeheight[2] = inlink->h >> desc->log2_chroma_h; tc->planeheight[1] = tc->planeheight[2] = FF_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
tc->planeheight[0] = tc->planeheight[3] = inlink->h; tc->planeheight[0] = tc->planeheight[3] = inlink->h;
tc->nb_planes = av_pix_fmt_count_planes(inlink->format); tc->nb_planes = av_pix_fmt_count_planes(inlink->format);
......
...@@ -130,7 +130,7 @@ static int config_out_props(AVFilterLink *outlink) ...@@ -130,7 +130,7 @@ static int config_out_props(AVFilterLink *outlink)
/* fill black picture with black */ /* fill black picture with black */
for (i = 0; i < 4 && tinterlace->black_data[i]; i++) { for (i = 0; i < 4 && tinterlace->black_data[i]; i++) {
int h = i == 1 || i == 2 ? outlink->h >> desc->log2_chroma_h : outlink->h; int h = i == 1 || i == 2 ? FF_CEIL_RSHIFT(outlink->h, desc->log2_chroma_h) : outlink->h;
memset(tinterlace->black_data[i], black[i], memset(tinterlace->black_data[i], black[i],
tinterlace->black_linesize[i] * h); tinterlace->black_linesize[i] * h);
} }
......
...@@ -163,8 +163,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) ...@@ -163,8 +163,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
int vsub = plane == 1 || plane == 2 ? trans->vsub : 0; int vsub = plane == 1 || plane == 2 ? trans->vsub : 0;
int pixstep = trans->pixsteps[plane]; int pixstep = trans->pixsteps[plane];
int inh = in->height >> vsub; int inh = in->height >> vsub;
int outw = out->width >> hsub; int outw = FF_CEIL_RSHIFT(out->width, hsub);
int outh = out->height >> vsub; int outh = FF_CEIL_RSHIFT(out->height, vsub);
uint8_t *dst, *src; uint8_t *dst, *src;
int dstlinesize, srclinesize; int dstlinesize, srclinesize;
int x, y; int x, y;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment