Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2013-04-04 16:55:41 +0400
committerPaul B Mahol <onemda@gmail.com>2013-04-04 18:32:49 +0400
commit6a08ccd61da040955ed24c0eb3d24ab4e860852a (patch)
tree9093f5008a778feaf0098da998f6d52126d8bf89 /libavfilter/vsrc_testsrc.c
parent3b93bea9e3cad046779b05b065d8566be303bea0 (diff)
lavfi/smptebars: fix output for subsampled yuv
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/vsrc_testsrc.c')
-rw-r--r--libavfilter/vsrc_testsrc.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index bc0d3d16ab..9317f82852 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -704,12 +704,13 @@ static void smptebars_fill_picture(AVFilterContext *ctx, AVFrame *picref)
{
TestSourceContext *test = ctx->priv;
FFDrawColor color;
- int r_w, r_h, w_h, p_w, p_h, i, x = 0;
+ int r_w, r_h, w_h, p_w, p_h, i, tmp, x = 0;
+ const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(picref->format);
- r_w = (test->w + 6) / 7;
- r_h = test->h * 2 / 3;
- w_h = test->h * 3 / 4 - r_h;
- p_w = r_w * 5 / 4;
+ r_w = FFALIGN((test->w + 6) / 7, 1 << pixdesc->log2_chroma_w);
+ r_h = FFALIGN(test->h * 2 / 3, 1 << pixdesc->log2_chroma_h);
+ w_h = FFALIGN(test->h * 3 / 4 - r_h, 1 << pixdesc->log2_chroma_h);
+ p_w = FFALIGN(r_w * 5 / 4, 1 << pixdesc->log2_chroma_w);
p_h = test->h - w_h - r_h;
#define DRAW_COLOR(rgba, x, y, w, h) \
@@ -729,14 +730,16 @@ static void smptebars_fill_picture(AVFilterContext *ctx, AVFrame *picref)
x += p_w;
DRAW_COLOR(q_pixel, x, r_h + w_h, p_w, p_h);
x += p_w;
- DRAW_COLOR(black, x, r_h + w_h, 5 * r_w - x, p_h);
- x += 5 * r_w - x;
- DRAW_COLOR(neg4ire, x, r_h + w_h, r_w / 3, p_h);
- x += r_w / 3;
- DRAW_COLOR(black, x, r_h + w_h, r_w / 3, p_h);
- x += r_w / 3;
- DRAW_COLOR(pos4ire, x, r_h + w_h, r_w / 3, p_h);
- x += r_w / 3;
+ tmp = FFALIGN(5 * r_w - x, 1 << pixdesc->log2_chroma_w);
+ DRAW_COLOR(black, x, r_h + w_h, tmp, p_h);
+ x += tmp;
+ tmp = FFALIGN(r_w / 3, 1 << pixdesc->log2_chroma_w);
+ DRAW_COLOR(neg4ire, x, r_h + w_h, tmp, p_h);
+ x += tmp;
+ DRAW_COLOR(black, x, r_h + w_h, tmp, p_h);
+ x += tmp;
+ DRAW_COLOR(pos4ire, x, r_h + w_h, tmp, p_h);
+ x += tmp;
DRAW_COLOR(black, x, r_h + w_h, test->w - x, p_h);
}