avfilter/showvolume : move clear picture part to a func
and use it if fade == 0.
This commit is contained in:
committed by
Paul B Mahol
parent
a1b91b0cc2
commit
4152413dde
@@ -245,13 +245,24 @@ static void drawtext(AVFrame *pic, int x, int y, const char *txt, int o)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void clear_picture(ShowVolumeContext *s, AVFilterLink *outlink) {
|
||||||
|
int i, j;
|
||||||
|
const uint32_t bg = (uint32_t)(s->bgopacity * 255) << 24;
|
||||||
|
|
||||||
|
for (i = 0; i < outlink->h; i++) {
|
||||||
|
uint32_t *dst = (uint32_t *)(s->out->data[0] + i * s->out->linesize[0]);
|
||||||
|
for (j = 0; j < outlink->w; j++)
|
||||||
|
AV_WN32A(dst + j, bg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
|
static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
|
||||||
{
|
{
|
||||||
AVFilterContext *ctx = inlink->dst;
|
AVFilterContext *ctx = inlink->dst;
|
||||||
AVFilterLink *outlink = ctx->outputs[0];
|
AVFilterLink *outlink = ctx->outputs[0];
|
||||||
ShowVolumeContext *s = ctx->priv;
|
ShowVolumeContext *s = ctx->priv;
|
||||||
const int step = s->step;
|
const int step = s->step;
|
||||||
int c, i, j, k;
|
int c, j, k;
|
||||||
AVFrame *out;
|
AVFrame *out;
|
||||||
|
|
||||||
if (!s->out || s->out->width != outlink->w ||
|
if (!s->out || s->out->width != outlink->w ||
|
||||||
@@ -262,18 +273,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
|
|||||||
av_frame_free(&insamples);
|
av_frame_free(&insamples);
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
|
clear_picture(s, outlink);
|
||||||
for (i = 0; i < outlink->h; i++) {
|
|
||||||
uint32_t *dst = (uint32_t *)(s->out->data[0] + i * s->out->linesize[0]);
|
|
||||||
const uint32_t bg = (uint32_t)(s->bgopacity * 255) << 24;
|
|
||||||
|
|
||||||
for (j = 0; j < outlink->w; j++)
|
|
||||||
AV_WN32A(dst + j, bg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
s->out->pts = insamples->pts;
|
s->out->pts = insamples->pts;
|
||||||
|
|
||||||
if (s->f < 1.) {
|
if ((s->f < 1.) && (s->f > 0.)) {
|
||||||
for (j = 0; j < outlink->h; j++) {
|
for (j = 0; j < outlink->h; j++) {
|
||||||
uint8_t *dst = s->out->data[0] + j * s->out->linesize[0];
|
uint8_t *dst = s->out->data[0] + j * s->out->linesize[0];
|
||||||
const uint32_t alpha = s->bgopacity * 255;
|
const uint32_t alpha = s->bgopacity * 255;
|
||||||
@@ -285,6 +289,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
|
|||||||
dst[k * 4 + 3] = FFMAX(dst[k * 4 + 3] * s->f, alpha);
|
dst[k * 4 + 3] = FFMAX(dst[k * 4 + 3] * s->f, alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (s->f == 0.) {
|
||||||
|
clear_picture(s, outlink);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->orientation) { /* vertical */
|
if (s->orientation) { /* vertical */
|
||||||
|
|||||||
Reference in New Issue
Block a user