aboutsummaryrefslogtreecommitdiffstats
path: root/libavfilter/vf_showinfo.c
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2011-05-14 13:20:52 +0200
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2011-05-15 12:27:28 +0200
commitbb82ea797fb6538308af84310118d8006b150318 (patch)
treee531fa73b4574f85622dfd9c60be7159bd7f8834 /libavfilter/vf_showinfo.c
parent10931720cd55d83e0b933b8a9bb0795fd9e48875 (diff)
downloadffmpeg-bb82ea797fb6538308af84310118d8006b150318.tar.gz
showinfo: fix computation of Adler checksum
Previously the code was computing the checksum only for the first line of each plane.
Diffstat (limited to 'libavfilter/vf_showinfo.c')
-rw-r--r--libavfilter/vf_showinfo.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/libavfilter/vf_showinfo.c b/libavfilter/vf_showinfo.c
index d512199602..30e1108b13 100644
--- a/libavfilter/vf_showinfo.c
+++ b/libavfilter/vf_showinfo.c
@@ -43,13 +43,19 @@ static void end_frame(AVFilterLink *inlink)
AVFilterContext *ctx = inlink->dst;
ShowInfoContext *showinfo = ctx->priv;
AVFilterBufferRef *picref = inlink->cur_buf;
- uint32_t plane_crc[4], crc = 0;
- int plane;
+ uint32_t plane_crc[4] = {0}, crc = 0;
+ int i, plane, vsub = av_pix_fmt_descriptors[inlink->format].log2_chroma_h;
- for (plane = 0; plane < 4; plane++) {
+ for (plane = 0; picref->data[plane] && plane < 4; plane++) {
size_t linesize = av_image_get_linesize(picref->format, picref->video->w, plane);
- plane_crc[plane] = av_adler32_update(0 , picref->data[plane], linesize);
- crc = av_adler32_update(crc, picref->data[plane], linesize);
+ uint8_t *data = picref->data[plane];
+ int h = plane == 1 || plane == 2 ? inlink->h >> vsub : inlink->h;
+
+ for (i = 0; i < h; i++) {
+ plane_crc[plane] = av_adler32_update(plane_crc[plane], data, linesize);
+ crc = av_adler32_update(crc, data, linesize);
+ data += picref->linesize[plane];
+ }
}
av_log(ctx, AV_LOG_INFO,