From a48e6ba1941c59fc3fee73372eec6d3931000982 Mon Sep 17 00:00:00 2001 From: "hans@rhel5-devel.localdomain" Date: Sun, 14 Jun 2009 22:58:53 +0200 Subject: libv4l: Detect ov518 decompression errors From: Hans de Goede Sometimes the ov518 gives us an incomplete frame, detect this and throw it away. Priority: normal Signed-off-by: Hans de Goede --- v4l2-apps/libv4l/libv4lconvert/libv4lconvert.c | 4 ++-- v4l2-apps/libv4l/libv4lconvert/ov518-decomp.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/v4l2-apps/libv4l/libv4lconvert/libv4lconvert.c b/v4l2-apps/libv4l/libv4lconvert/libv4lconvert.c index fe3185018..998bc154d 100644 --- a/v4l2-apps/libv4l/libv4lconvert/libv4lconvert.c +++ b/v4l2-apps/libv4l/libv4lconvert/libv4lconvert.c @@ -658,7 +658,7 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data, if (v4lconvert_helper_decompress(data, LIBDIR "/libv4l/ov511-decomp", src, src_size, d, d_size, width, height, yvu)) { /* Corrupt frame, better get another one */ - errno = -EAGAIN; + errno = EAGAIN; return -1; } break; @@ -666,7 +666,7 @@ static int v4lconvert_convert_pixfmt(struct v4lconvert_data *data, if (v4lconvert_helper_decompress(data, LIBDIR "/libv4l/ov518-decomp", src, src_size, d, d_size, width, height, yvu)) { /* Corrupt frame, better get another one */ - errno = -EAGAIN; + errno = EAGAIN; return -1; } break; diff --git a/v4l2-apps/libv4l/libv4lconvert/ov518-decomp.c b/v4l2-apps/libv4l/libv4lconvert/ov518-decomp.c index f8f37649e..51b8d8c60 100644 --- a/v4l2-apps/libv4l/libv4lconvert/ov518-decomp.c +++ b/v4l2-apps/libv4l/libv4lconvert/ov518-decomp.c @@ -1325,7 +1325,7 @@ decompress420NoMMXOV518(unsigned char *pIn, return 1; /* Did we decode enough? */ - if (cinfo->bytes >= cinfo->rawLen - 897) + if (cinfo->bytes >= cinfo->rawLen - (897 + 64)) return 0; else return 1; @@ -1420,7 +1420,8 @@ static int v4lconvert_ov518_to_yuv420(unsigned char *src, unsigned char *dst, return -1; /* Decompress, skipping the 8-byte SOF header */ - decompress420NoMMXOV518(src + 8, dst, pTmp, w, h, numpix, &cinfo, yvu); + if (decompress420NoMMXOV518(src + 8, dst, pTmp, w, h, numpix, &cinfo, yvu)) + return -1; return 0; } -- cgit v1.2.3