mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-12 18:31:37 +00:00
lavfi/blend: use correct way to check number of planes
This fix crash with gray, as its marked as pseudopal, and thus have extra plane. Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
89b5039ff2
commit
990b13806d
@ -80,6 +80,7 @@ typedef struct {
|
|||||||
struct FFBufQueue queue_top;
|
struct FFBufQueue queue_top;
|
||||||
struct FFBufQueue queue_bottom;
|
struct FFBufQueue queue_bottom;
|
||||||
int hsub, vsub; ///< chroma subsampling values
|
int hsub, vsub; ///< chroma subsampling values
|
||||||
|
int nb_planes;
|
||||||
int frame_requested;
|
int frame_requested;
|
||||||
char *all_expr;
|
char *all_expr;
|
||||||
enum BlendMode all_mode;
|
enum BlendMode all_mode;
|
||||||
@ -330,6 +331,7 @@ static int config_input_top(AVFilterLink *inlink)
|
|||||||
|
|
||||||
b->hsub = pix_desc->log2_chroma_w;
|
b->hsub = pix_desc->log2_chroma_w;
|
||||||
b->vsub = pix_desc->log2_chroma_h;
|
b->vsub = pix_desc->log2_chroma_h;
|
||||||
|
b->nb_planes = av_pix_fmt_count_planes(inlink->format);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +373,7 @@ static void blend_frame(AVFilterContext *ctx,
|
|||||||
FilterParams *param;
|
FilterParams *param;
|
||||||
int plane;
|
int plane;
|
||||||
|
|
||||||
for (plane = 0; dst_buf->data[plane]; 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 = dst_buf->width >> hsub;
|
||||||
@ -422,7 +424,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
|
|||||||
|
|
||||||
b->frame_requested = 0;
|
b->frame_requested = 0;
|
||||||
blend_frame(ctx, top_buf, bottom_buf, out_buf);
|
blend_frame(ctx, top_buf, bottom_buf, out_buf);
|
||||||
ret = ff_filter_frame(ctx->outputs[0], out_buf);
|
ret = ff_filter_frame(outlink, out_buf);
|
||||||
av_frame_free(&top_buf);
|
av_frame_free(&top_buf);
|
||||||
av_frame_free(&bottom_buf);
|
av_frame_free(&bottom_buf);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user